HttpController.coffee 3.5 KB

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