HealthChecker.coffee 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. ObjectId = require("mongojs").ObjectId
  2. request = require("request")
  3. async = require("async")
  4. settings = require("settings-sharelatex")
  5. port = settings.internal.trackchanges.port
  6. logger = require "logger-sharelatex"
  7. LockManager = require "./LockManager"
  8. module.exports =
  9. check : (callback)->
  10. project_id = ObjectId(settings.trackchanges.healthCheck.project_id)
  11. url = "http://localhost:#{port}/project/#{project_id}"
  12. logger.log project_id:project_id, "running health check"
  13. jobs = [
  14. (cb)->
  15. request.get {url:"http://localhost:#{port}/check_lock", timeout:3000}, (err, res, body) ->
  16. if err?
  17. logger.err err:err, project_id:project_id, "error checking lock for health check"
  18. cb(err)
  19. else if res?.statusCode != 200
  20. cb("status code not 200, it's #{res.statusCode}")
  21. else
  22. cb()
  23. (cb)->
  24. request.post {url:"#{url}/flush", timeout:10000}, (err, res, body) ->
  25. if err?
  26. logger.err err:err, project_id:project_id, "error flushing for health check"
  27. cb(err)
  28. else if res?.statusCode != 204
  29. cb("status code not 204, it's #{res.statusCode}")
  30. else
  31. cb()
  32. (cb)->
  33. request.get {url:"#{url}/updates", timeout:10000}, (err, res, body)->
  34. if err?
  35. logger.err err:err, project_id:project_id, "error getting updates for health check"
  36. cb(err)
  37. else if res?.statusCode != 200
  38. cb("status code not 200, it's #{res.statusCode}")
  39. else
  40. cb()
  41. ]
  42. async.series jobs, callback
  43. checkLock: (callback) ->
  44. LockManager.healthCheck callback