HealthCheckController.coffee 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. Mocha = require "mocha"
  2. Base = require("mocha/lib/reporters/base")
  3. redis = require("redis-sharelatex")
  4. settings = require("settings-sharelatex")
  5. redisCheck = redis.activeHealthCheckRedis(settings.redis.web)
  6. logger = require "logger-sharelatex"
  7. domain = require "domain"
  8. module.exports = HealthCheckController =
  9. check: (req, res, next = (error) ->) ->
  10. d = domain.create()
  11. d.on "error", (error) ->
  12. logger.err err: error, "error in mocha"
  13. d.run () ->
  14. mocha = new Mocha(reporter: Reporter(res), timeout: 10000)
  15. mocha.addFile("test/smoke/js/SmokeTests.js")
  16. mocha.run () ->
  17. path = require.resolve(__dirname + "/../../../../test/smoke/js/SmokeTests.js")
  18. delete require.cache[path]
  19. checkRedis: (req, res, next)->
  20. if redisCheck.isAlive()
  21. res.send 200
  22. else
  23. res.send 500
  24. Reporter = (res) ->
  25. (runner) ->
  26. Base.call(this, runner)
  27. tests = []
  28. passes = []
  29. failures = []
  30. runner.on 'test end', (test) -> tests.push(test)
  31. runner.on 'pass', (test) -> passes.push(test)
  32. runner.on 'fail', (test) -> failures.push(test)
  33. runner.on 'end', () =>
  34. clean = (test) ->
  35. title: test.fullTitle()
  36. duration: test.duration
  37. err: test.err
  38. timedOut: test.timedOut
  39. results = {
  40. stats: @stats
  41. failures: failures.map(clean)
  42. passes: passes.map(clean)
  43. }
  44. res.contentType("application/json")
  45. if failures.length > 0
  46. res.send 500, JSON.stringify(results, null, 2)
  47. else
  48. res.send 200, JSON.stringify(results, null, 2)