diff --git a/services/filestore/app/coffee/FileController.coffee b/services/filestore/app/coffee/FileController.coffee index e1c212711a..27ac078379 100644 --- a/services/filestore/app/coffee/FileController.coffee +++ b/services/filestore/app/coffee/FileController.coffee @@ -32,7 +32,7 @@ module.exports = FileController = logger.err err:err, key:key, bucket:bucket, format:format, style:style, "problem getting file" if err instanceof Errors.NotFoundError return res.send 404 - if !res.finished and res?.send? + else return res.send 500 else if req.query.cacheWarm logger.log key:key, bucket:bucket, format:format, style:style, "request is only for cache warm so not sending stream" diff --git a/services/filestore/app/coffee/HealthCheckController.coffee b/services/filestore/app/coffee/HealthCheckController.coffee index 25027a5bdd..db3f111c5e 100644 --- a/services/filestore/app/coffee/HealthCheckController.coffee +++ b/services/filestore/app/coffee/HealthCheckController.coffee @@ -7,21 +7,30 @@ fileController = require("./FileController") logger = require('logger-sharelatex') settings = require("settings-sharelatex") streamBuffers = require("stream-buffers") +_ = require('underscore') + checkCanStoreFiles = (callback)-> + callback = _.once(callback) req = {params:{}, query:{}, headers:{}} - res = {} req.params.project_id = settings.health_check.project_id req.params.file_id = settings.health_check.file_id myWritableStreamBuffer = new streamBuffers.WritableStreamBuffer(initialSize: 100) + res = { + send: (code) -> + if code != 200 + callback(new Error("non-200 code from getFile: #{code}")) + } + myWritableStreamBuffer.send = res.send keyBuilder.userFileKey req, res, -> fileController.getFile req, myWritableStreamBuffer myWritableStreamBuffer.on "close", -> if myWritableStreamBuffer.size() > 0 callback() else - logger.err "no data in write stream buffer for health check" - callback() + err = "no data in write stream buffer for health check" + logger.err {err,}, "error performing health check" + callback(err) checkFileConvert = (callback)-> imgPath = path.join(settings.path.uploadFolder, "/tiny.pdf") @@ -34,26 +43,13 @@ checkFileConvert = (callback)-> ], callback -isOk = true - -q = async.queue (task, callback)-> - task(callback) - - -runChecks = (callback)-> - async.parallel [checkFileConvert, checkCanStoreFiles], (err)-> - if err? - logger.err err:err, "Health check: error running" - isOk = false - else - isOk = true - callback() - module.exports = - check: (req, res)-> - if isOk - res.send 200 - else - res.send 500 - q.push runChecks # run in background 1 at a time + check: (req, res) -> + logger.log {}, "performing health check" + async.parallel [checkFileConvert, checkCanStoreFiles], (err)-> + if err? + logger.err err:err, "Health check: error running" + res.send 500 + else + res.send 200