diff --git a/services/docstore/app.coffee b/services/docstore/app.coffee index 3a6b06f7a8..4fb4b1089c 100644 --- a/services/docstore/app.coffee +++ b/services/docstore/app.coffee @@ -25,46 +25,7 @@ app.del '/project/:project_id/doc/:doc_id', HttpController.deleteDoc app.post '/project/:project_id/archive', HttpController.archiveAllDocs app.post '/project/:project_id/unarchive', HttpController.unArchiveAllDocs - -ObjectId = require("mongojs").ObjectId -request = require("request") -async = require("async") -_ = require("underscore") -crypto = require("crypto") - -app.get "/health_check", (req, res)-> - doc_id = ObjectId() - project_id = ObjectId() - url = "http://localhost:#{port}/project/#{project_id}/doc/#{doc_id}" - lines = ["smoke test - delete me", "#{crypto.randomBytes(32).toString("hex")}"] - logger.log lines:lines, url:url, doc_id:doc_id, project_id:project_id, "running health check" - jobs = [ - (cb)-> - opts = - url:url - json: {lines: lines} - request.post(opts, cb) - (cb)-> - request.get {url:url, json:true}, (err, res, body)-> - if res.statusCode != 200 - cb("status code not 200, its #{res.statusCode}") - else if _.isEqual(body.lines, lines) and body._id == doc_id.toString() - cb() - else - cb("lines not equal ") - (cb)-> - request.del url, cb - ] - async.series jobs, (err)-> - if err? - logger.err err:err, "error running health check" - res.send 500 - else - res.send() - - - - +app.get "/health_check", HttpController.healthCheck app.get '/status', (req, res)-> res.send('docstore is alive') diff --git a/services/docstore/app/coffee/HealthChecker.coffee b/services/docstore/app/coffee/HealthChecker.coffee new file mode 100644 index 0000000000..793193d68b --- /dev/null +++ b/services/docstore/app/coffee/HealthChecker.coffee @@ -0,0 +1,35 @@ +ObjectId = require("mongojs").ObjectId +request = require("request") +async = require("async") +_ = require("underscore") +crypto = require("crypto") +settings = require("settings-sharelatex") +port = settings.internal.docstore.port +logger = require "logger-sharelatex" + + +module.exports = + check : (callback)-> + doc_id = ObjectId() + project_id = ObjectId(settings.docstore.healthCheck.project_id) + url = "http://localhost:#{port}/project/#{project_id}/doc/#{doc_id}" + lines = ["smoke test - delete me", "#{crypto.randomBytes(32).toString("hex")}"] + logger.log lines:lines, url:url, doc_id:doc_id, project_id:project_id, "running health check" + jobs = [ + (cb)-> + opts = + url:url + json: {lines: lines} + request.post(opts, cb) + (cb)-> + request.get {url:url, json:true}, (err, res, body)-> + if res.statusCode != 200 + cb("status code not 200, its #{res.statusCode}") + else if _.isEqual(body.lines, lines) and body._id == doc_id.toString() + cb() + else + cb("health check lines not equal #{body.lines} != #{lines}") + (cb)-> + request.del url, cb + ] + async.series jobs, callback diff --git a/services/docstore/app/coffee/HttpController.coffee b/services/docstore/app/coffee/HttpController.coffee index 3b99b090d2..7d6ada30c8 100644 --- a/services/docstore/app/coffee/HttpController.coffee +++ b/services/docstore/app/coffee/HttpController.coffee @@ -1,6 +1,8 @@ DocManager = require "./DocManager" logger = require "logger-sharelatex" DocArchive = require "./DocArchiveManager" +HealthChecker = require "./HealthChecker" + module.exports = HttpController = getDoc: (req, res, next = (error) ->) -> @@ -94,3 +96,11 @@ module.exports = HttpController = return next(error) if error? res.send 200 + healthCheck: (req, res)-> + HealthChecker.check (err)-> + if err? + logger.err err:err, "error performing health check" + res.send 500 + else + res.send 200 + diff --git a/services/docstore/config/settings.defaults.coffee b/services/docstore/config/settings.defaults.coffee index e7b4046b64..da76fec12f 100644 --- a/services/docstore/config/settings.defaults.coffee +++ b/services/docstore/config/settings.defaults.coffee @@ -10,7 +10,9 @@ module.exports = mongo: url: 'mongodb://127.0.0.1/sharelatex' - #docstore: + docstore: + healthCheck: + project_id: "5620bece05509b0a7a3cbc61" # s3: # key: "" # secret: ""