TrackChangesManager.coffee 1.6 KB

12345678910111213141516171819202122232425262728293031323334
  1. settings = require "settings-sharelatex"
  2. request = require "request"
  3. logger = require "logger-sharelatex"
  4. WebRedisManager = require "./WebRedisManager"
  5. module.exports = TrackChangesManager =
  6. flushDocChanges: (project_id, doc_id, callback = (error) ->) ->
  7. if !settings.apis?.trackchanges?
  8. logger.warn doc_id: doc_id, "track changes API is not configured, so not flushing"
  9. return callback()
  10. url = "#{settings.apis.trackchanges.url}/project/#{project_id}/doc/#{doc_id}/flush"
  11. logger.log project_id: project_id, doc_id: doc_id, url: url, "flushing doc in track changes api"
  12. request.post url, (error, res, body)->
  13. if error?
  14. return callback(error)
  15. else if res.statusCode >= 200 and res.statusCode < 300
  16. return callback(null)
  17. else
  18. error = new Error("track changes api returned a failure status code: #{res.statusCode}")
  19. return callback(error)
  20. FLUSH_EVERY_N_OPS: 50
  21. pushUncompressedHistoryOp: (project_id, doc_id, op, callback = (error) ->) ->
  22. WebRedisManager.pushUncompressedHistoryOp project_id, doc_id, op, (error, length) ->
  23. return callback(error) if error?
  24. if length > 0 and length % TrackChangesManager.FLUSH_EVERY_N_OPS == 0
  25. # Do this in the background since it uses HTTP and so may be too
  26. # slow to wait for when processing a doc update.
  27. logger.log length: length, doc_id: doc_id, project_id: project_id, "flushing track changes api"
  28. TrackChangesManager.flushDocChanges project_id, doc_id, (error) ->
  29. if error?
  30. logger.error err: error, doc_id: doc_id, project_id: project_id, "error flushing doc to track changes api"
  31. callback()