| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- Mocha = require "mocha"
- Base = require("mocha/lib/reporters/base")
- RedisWrapper = require("../../infrastructure/RedisWrapper")
- rclient = RedisWrapper.client("health_check")
- settings = require("settings-sharelatex")
- logger = require "logger-sharelatex"
- domain = require "domain"
- UserGetter = require("../User/UserGetter")
- module.exports = HealthCheckController =
- check: (req, res, next = (error) ->) ->
- d = domain.create()
- d.on "error", (error) ->
- logger.err err: error, "error in mocha"
- d.run () ->
- mocha = new Mocha(reporter: Reporter(res), timeout: 10000)
- mocha.addFile("test/smoke/js/SmokeTests.js")
- mocha.run () ->
- # TODO: combine this with the smoke-test-sharelatex module
- # we need to clean up all references to the smokeTest module
- # so it can be garbage collected. The only reference should
- # be in its parent, when it is loaded by mocha.addFile.
- path = require.resolve(__dirname + "/../../../../test/smoke/js/SmokeTests.js")
- smokeTestModule = require.cache[path]
- if smokeTestModule?
- parent = smokeTestModule.parent
- while (idx = parent.children.indexOf(smokeTestModule)) != -1
- parent.children.splice(idx, 1)
- else
- logger.warn {path}, "smokeTestModule not defined"
- # remove the smokeTest from the module cache
- delete require.cache[path]
- checkRedis: (req, res, next)->
- rclient.healthCheck (error) ->
- if error?
- logger.err {err: error}, "failed redis health check"
- res.sendStatus 500
- else
- res.sendStatus 200
- checkMongo: (req, res, next)->
- logger.log "running mongo health check"
- UserGetter.getUserEmail settings.smokeTest.userId, (err, email)->
- if err?
- logger.err err:err, "mongo health check failed, error present"
- return res.sendStatus 500
- else if !email?
- logger.err err:err, "mongo health check failed, no emai present in find result"
- return res.sendStatus 500
- else
- logger.log email:email, "mongo health check passed"
- res.sendStatus 200
-
- Reporter = (res) ->
- (runner) ->
- Base.call(this, runner)
- tests = []
- passes = []
- failures = []
- runner.on 'test end', (test) -> tests.push(test)
- runner.on 'pass', (test) -> passes.push(test)
- runner.on 'fail', (test) -> failures.push(test)
- runner.on 'end', () =>
- clean = (test) ->
- title: test.fullTitle()
- duration: test.duration
- err: test.err
- timedOut: test.timedOut
- results = {
- stats: @stats
- failures: failures.map(clean)
- passes: passes.map(clean)
- }
- res.contentType("application/json")
- if failures.length > 0
- logger.err failures:failures, "health check failed"
- res.status(500).send(JSON.stringify(results, null, 2))
- else
- res.status(200).send(JSON.stringify(results, null, 2))
|