DocArchiveManager.coffee 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. MongoManager = require "./MongoManager"
  2. MongoAWS = require "./MongoAWS"
  3. LockManager = require "./LockManager"
  4. DocstoreHandler = require "./DocstoreHandler"
  5. logger = require "logger-sharelatex"
  6. _ = require "underscore"
  7. async = require "async"
  8. settings = require("settings-sharelatex")
  9. module.exports = DocArchiveManager =
  10. archiveAllDocsChanges: (project_id, callback = (error, docs) ->) ->
  11. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  12. if error?
  13. return callback(error)
  14. else if !docs?
  15. return callback new Error("No docs for project #{project_id}")
  16. jobs = _.map docs, (doc) ->
  17. (cb)-> DocArchiveManager.archiveDocChangesWithLock project_id, doc._id, cb
  18. async.series jobs, callback
  19. archiveDocChangesWithLock: (project_id, doc_id, callback = (error) ->) ->
  20. job = (releaseLock) ->
  21. DocArchiveManager.archiveDocChanges project_id, doc_id, releaseLock
  22. LockManager.runWithLock("HistoryArchiveLock:#{doc_id}", job, callback)
  23. archiveDocChanges: (project_id, doc_id, callback)->
  24. MongoManager.getDocChangesCount doc_id, (error, count) ->
  25. return callback(error) if error?
  26. if count == 0
  27. return callback()
  28. else
  29. MongoManager.getLastCompressedUpdate doc_id, (error, update) ->
  30. return callback(error) if error?
  31. MongoAWS.archiveDocHistory project_id, doc_id, (error) ->
  32. return callback(error) if error?
  33. logger.log doc_id:doc_id, project_id:project_id, "exported document to S3"
  34. MongoManager.markDocHistoryAsArchived doc_id, update, (error) ->
  35. return callback(error) if error?
  36. callback()
  37. unArchiveAllDocsChanges: (project_id, callback = (error, docs) ->) ->
  38. DocstoreHandler.getAllDocs project_id, (error, docs) ->
  39. if error?
  40. return callback(error)
  41. else if !docs?
  42. return callback new Error("No docs for project #{project_id}")
  43. jobs = _.map docs, (doc) ->
  44. (cb)-> DocArchiveManager.unArchiveDocChanges project_id, doc._id, cb
  45. async.series jobs, callback
  46. unArchiveDocChanges: (project_id, doc_id, callback)->
  47. MongoManager.getArchivedDocChanges doc_id, (error, count) ->
  48. return callback(error) if error?
  49. if count == 0
  50. return callback()
  51. else
  52. MongoAWS.unArchiveDocHistory project_id, doc_id, (error) ->
  53. return callback(error) if error?
  54. logger.log doc_id:doc_id, project_id:project_id, "imported document from S3"
  55. MongoManager.markDocHistoryAsUnarchived doc_id, (error) ->
  56. return callback(error) if error?
  57. callback()