ProjectHistoryRedisManager.coffee 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. Settings = require('settings-sharelatex')
  2. projectHistoryKeys = Settings.redis?.project_history?.key_schema
  3. #rclient = require("redis-sharelatex").createClient(Settings.redis.project_history)
  4. rclient = require("./RedisMigrationManager").createClient(Settings.redis.project_history, Settings.redis.new_project_history)
  5. logger = require('logger-sharelatex')
  6. module.exports = ProjectHistoryRedisManager =
  7. queueOps: (project_id, ops..., callback = (error, projectUpdateCount) ->) ->
  8. multi = rclient.multi()
  9. # Push the ops onto the project history queue
  10. multi.rpush projectHistoryKeys.projectHistoryOps({project_id}), ops...
  11. # To record the age of the oldest op on the queue set a timestamp if not
  12. # already present (SETNX).
  13. multi.setnx projectHistoryKeys.projectHistoryFirstOpTimestamp({project_id}), Date.now()
  14. multi.exec (error, result) ->
  15. return callback(error) if error?
  16. # return the number of entries pushed onto the project history queue
  17. callback null, result[0]
  18. queueRenameEntity: (project_id, projectHistoryId, entity_type, entity_id, user_id, projectUpdate, callback) ->
  19. projectUpdate =
  20. pathname: projectUpdate.pathname
  21. new_pathname: projectUpdate.newPathname
  22. meta:
  23. user_id: user_id
  24. ts: new Date()
  25. version: projectUpdate.version
  26. projectHistoryId: projectHistoryId
  27. projectUpdate[entity_type] = entity_id
  28. logger.log {project_id, projectUpdate}, "queue rename operation to project-history"
  29. jsonUpdate = JSON.stringify(projectUpdate)
  30. ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
  31. queueAddEntity: (project_id, projectHistoryId, entity_type, entitiy_id, user_id, projectUpdate, callback = (error) ->) ->
  32. projectUpdate =
  33. pathname: projectUpdate.pathname
  34. docLines: projectUpdate.docLines
  35. url: projectUpdate.url
  36. meta:
  37. user_id: user_id
  38. ts: new Date()
  39. version: projectUpdate.version
  40. projectHistoryId: projectHistoryId
  41. projectUpdate[entity_type] = entitiy_id
  42. logger.log {project_id, projectUpdate}, "queue add operation to project-history"
  43. jsonUpdate = JSON.stringify(projectUpdate)
  44. ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
  45. queueResyncProjectStructure: (project_id, projectHistoryId, docs, files, callback) ->
  46. logger.log {project_id, docs, files}, "queue project structure resync"
  47. projectUpdate =
  48. resyncProjectStructure: { docs, files }
  49. projectHistoryId: projectHistoryId
  50. meta:
  51. ts: new Date()
  52. jsonUpdate = JSON.stringify projectUpdate
  53. ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
  54. queueResyncDocContent: (project_id, projectHistoryId, doc_id, lines, version, pathname, callback) ->
  55. logger.log {project_id, doc_id, lines, version, pathname}, "queue doc content resync"
  56. projectUpdate =
  57. resyncDocContent:
  58. content: lines.join("\n"),
  59. version: version
  60. projectHistoryId: projectHistoryId
  61. path: pathname
  62. doc: doc_id
  63. meta:
  64. ts: new Date()
  65. jsonUpdate = JSON.stringify projectUpdate
  66. ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback