HttpController.coffee 4.1 KB

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