RealTimeRedisManager.coffee 991 B

1234567891011121314151617181920212223242526272829
  1. Settings = require('settings-sharelatex')
  2. rclient = require("redis-sharelatex").createClient(Settings.redis.documentupdater)
  3. Keys = Settings.redis.documentupdater.key_schema
  4. logger = require('logger-sharelatex')
  5. MAX_OPS_PER_ITERATION = 8 # process a limited number of ops for safety
  6. module.exports = RealTimeRedisManager =
  7. getPendingUpdatesForDoc : (doc_id, callback)->
  8. multi = rclient.multi()
  9. multi.lrange Keys.pendingUpdates({doc_id}), 0, (MAX_OPS_PER_ITERATION-1)
  10. multi.ltrim Keys.pendingUpdates({doc_id}), MAX_OPS_PER_ITERATION, -1
  11. multi.exec (error, replys) ->
  12. return callback(error) if error?
  13. jsonUpdates = replys[0]
  14. updates = []
  15. for jsonUpdate in jsonUpdates
  16. try
  17. update = JSON.parse jsonUpdate
  18. catch e
  19. return callback e
  20. updates.push update
  21. callback error, updates
  22. getUpdatesLength: (doc_id, callback)->
  23. rclient.llen Keys.pendingUpdates({doc_id}), callback
  24. sendData: (data) ->
  25. rclient.publish "applied-ops", JSON.stringify(data)