HealthCheckController.coffee 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. module.exports = HealthCheckController =
  7. check: (req, res, next = (error) ->) ->
  8. mocha = new Mocha(reporter: Reporter(res), timeout: 10000)
  9. mocha.addFile("test/smoke/js/SmokeTests.js")
  10. mocha.run () ->
  11. path = require.resolve(__dirname + "/../../../../test/smoke/js/SmokeTests.js")
  12. delete require.cache[path]
  13. checkRedis: (req, res, next)->
  14. if redisCheck.isAlive()
  15. res.send 200
  16. else
  17. res.send 500
  18. Reporter = (res) ->
  19. (runner) ->
  20. Base.call(this, runner)
  21. tests = []
  22. passes = []
  23. failures = []
  24. runner.on 'test end', (test) -> tests.push(test)
  25. runner.on 'pass', (test) -> passes.push(test)
  26. runner.on 'fail', (test) -> failures.push(test)
  27. runner.on 'end', () =>
  28. clean = (test) ->
  29. title: test.fullTitle()
  30. duration: test.duration
  31. err: test.err
  32. timedOut: test.timedOut
  33. results = {
  34. stats: @stats
  35. failures: failures.map(clean)
  36. passes: passes.map(clean)
  37. }
  38. res.contentType("application/json")
  39. if failures.length > 0
  40. res.send 500, JSON.stringify(results, null, 2)
  41. else
  42. res.send 200, JSON.stringify(results, null, 2)