| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- Settings = require('settings-sharelatex')
- projectHistoryKeys = Settings.redis?.project_history?.key_schema
- rclient = require("redis-sharelatex").createClient(Settings.redis.documentupdater)
- logger = require('logger-sharelatex')
- module.exports = ProjectHistoryRedisManager =
- queueOps: (project_id, ops..., callback = (error, projectUpdateCount) ->) ->
- multi = rclient.multi()
- # Push the ops onto the project history queue
- multi.rpush projectHistoryKeys.projectHistoryOps({project_id}), ops...
- # To record the age of the oldest op on the queue set a timestamp if not
- # already present (SETNX).
- multi.setnx projectHistoryKeys.projectHistoryFirstOpTimestamp({project_id}), Date.now()
- multi.exec (error, result) ->
- return callback(error) if error?
- # return the number of entries pushed onto the project history queue
- callback null, result[0]
- queueRenameEntity: (project_id, projectHistoryId, entity_type, entity_id, user_id, projectUpdate, callback) ->
- projectUpdate =
- pathname: projectUpdate.pathname
- new_pathname: projectUpdate.newPathname
- meta:
- user_id: user_id
- ts: new Date()
- version: projectUpdate.version
- projectHistoryId: projectHistoryId
- projectUpdate[entity_type] = entity_id
- logger.log {project_id, projectUpdate}, "queue rename operation to project-history"
- jsonUpdate = JSON.stringify(projectUpdate)
- ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
- queueAddEntity: (project_id, projectHistoryId, entity_type, entitiy_id, user_id, projectUpdate, callback = (error) ->) ->
- projectUpdate =
- pathname: projectUpdate.pathname
- docLines: projectUpdate.docLines
- url: projectUpdate.url
- meta:
- user_id: user_id
- ts: new Date()
- version: projectUpdate.version
- projectHistoryId: projectHistoryId
- projectUpdate[entity_type] = entitiy_id
- logger.log {project_id, projectUpdate}, "queue add operation to project-history"
- jsonUpdate = JSON.stringify(projectUpdate)
- ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
- queueResyncProjectStructure: (project_id, projectHistoryId, docs, files, callback) ->
- logger.log {project_id, docs, files}, "queue project structure resync"
- projectUpdate =
- resyncProjectStructure: { docs, files }
- projectHistoryId: projectHistoryId
- meta:
- ts: new Date()
- jsonUpdate = JSON.stringify projectUpdate
- ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
- queueResyncDocContent: (project_id, projectHistoryId, doc_id, lines, version, pathname, callback) ->
- logger.log {project_id, doc_id, lines, version, pathname}, "queue doc content resync"
- projectUpdate =
- resyncDocContent:
- content: lines.join("\n"),
- version: version
- projectHistoryId: projectHistoryId
- path: pathname
- doc: doc_id
- meta:
- ts: new Date()
- jsonUpdate = JSON.stringify projectUpdate
- ProjectHistoryRedisManager.queueOps project_id, jsonUpdate, callback
|