HttpController.coffee 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. UpdatesManager = require "./UpdatesManager"
  2. DiffManager = require "./DiffManager"
  3. PackManager = require "./PackManager"
  4. RestoreManager = require "./RestoreManager"
  5. logger = require "logger-sharelatex"
  6. DocArchiveManager = require "./DocArchiveManager"
  7. HealthChecker = require "./HealthChecker"
  8. _ = require "underscore"
  9. module.exports = HttpController =
  10. flushDoc: (req, res, next = (error) ->) ->
  11. doc_id = req.params.doc_id
  12. project_id = req.params.project_id
  13. logger.log project_id: project_id, doc_id: doc_id, "compressing doc history"
  14. UpdatesManager.processUncompressedUpdatesWithLock project_id, doc_id, (error) ->
  15. return next(error) if error?
  16. res.send 204
  17. flushProject: (req, res, next = (error) ->) ->
  18. project_id = req.params.project_id
  19. logger.log project_id: project_id, "compressing project history"
  20. UpdatesManager.processUncompressedUpdatesForProject project_id, (error) ->
  21. return next(error) if error?
  22. res.send 204
  23. listDocs: (req, res, next = (error) ->) ->
  24. logger.log "listing packing doc history"
  25. limit = +req.query?.limit || 100
  26. PackManager.listDocs {limit}, (error, doc_ids) ->
  27. return next(error) if error?
  28. ids = (doc.doc_id.toString() for doc in doc_ids)
  29. output = _.uniq(ids).join("\n") + "\n"
  30. res.send output
  31. packDoc: (req, res, next = (error) ->) ->
  32. doc_id = req.params.doc_id
  33. logger.log doc_id: doc_id, "packing doc history"
  34. PackManager.packDocHistory doc_id, (error) ->
  35. return next(error) if error?
  36. res.send 204
  37. checkDoc: (req, res, next = (error) ->) ->
  38. doc_id = req.params.doc_id
  39. project_id = req.params.project_id
  40. logger.log project_id: project_id, doc_id: doc_id, "checking doc history"
  41. DiffManager.getDocumentBeforeVersion project_id, doc_id, 1, (error, document, rewoundUpdates) ->
  42. return next(error) if error?
  43. broken = []
  44. for update in rewoundUpdates
  45. for op in update.op when op.broken is true
  46. broken.push op
  47. if broken.length > 0
  48. res.send broken
  49. else
  50. res.send 204
  51. getDiff: (req, res, next = (error) ->) ->
  52. doc_id = req.params.doc_id
  53. project_id = req.params.project_id
  54. if req.query.from?
  55. from = parseInt(req.query.from, 10)
  56. else
  57. from = null
  58. if req.query.to?
  59. to = parseInt(req.query.to, 10)
  60. else
  61. to = null
  62. logger.log project_id, doc_id: doc_id, from: from, to: to, "getting diff"
  63. DiffManager.getDiff project_id, doc_id, from, to, (error, diff) ->
  64. return next(error) if error?
  65. res.send JSON.stringify(diff: diff)
  66. getUpdates: (req, res, next = (error) ->) ->
  67. project_id = req.params.project_id
  68. if req.query.before?
  69. before = parseInt(req.query.before, 10)
  70. if req.query.min_count?
  71. min_count = parseInt(req.query.min_count, 10)
  72. UpdatesManager.getSummarizedProjectUpdates project_id, before: before, min_count: min_count, (error, updates, nextBeforeTimestamp) ->
  73. return next(error) if error?
  74. res.send JSON.stringify
  75. updates: updates
  76. nextBeforeTimestamp: nextBeforeTimestamp
  77. restore: (req, res, next = (error) ->) ->
  78. {doc_id, project_id, version} = req.params
  79. user_id = req.headers["x-user-id"]
  80. version = parseInt(version, 10)
  81. RestoreManager.restoreToBeforeVersion project_id, doc_id, version, user_id, (error) ->
  82. return next(error) if error?
  83. res.send 204
  84. archiveProject: (req, res, next = (error) ->) ->
  85. project_id = req.params.project_id
  86. logger.log project_id: project_id, "archiving all track changes to s3"
  87. DocArchiveManager.archiveAllDocsChanges project_id, (error) ->
  88. return next(error) if error?
  89. res.send 204
  90. unArchiveProject: (req, res, next = (error) ->) ->
  91. project_id = req.params.project_id
  92. logger.log project_id: project_id, "unarchiving all track changes from s3"
  93. DocArchiveManager.unArchiveAllDocsChanges project_id, (error) ->
  94. return next(error) if error?
  95. res.send 204
  96. healthCheck: (req, res)->
  97. HealthChecker.check (err)->
  98. if err?
  99. logger.err err:err, "error performing health check"
  100. res.send 500
  101. else
  102. res.send 200
  103. checkLock: (req, res)->
  104. HealthChecker.checkLock (err) ->
  105. if err?
  106. logger.err err:err, "error performing lock check"
  107. res.send 500
  108. else
  109. res.send 200