HealthCheckController.coffee 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. fs = require("fs-extra")
  2. path = require("path")
  3. async = require("async")
  4. fileConverter = require("./FileConverter")
  5. keyBuilder = require("./KeyBuilder")
  6. fileController = require("./FileController")
  7. logger = require('logger-sharelatex')
  8. settings = require("settings-sharelatex")
  9. streamBuffers = require("stream-buffers")
  10. _ = require('underscore')
  11. checkCanStoreFiles = (callback)->
  12. callback = _.once(callback)
  13. req = {params:{}, query:{}, headers:{}}
  14. req.params.project_id = settings.health_check.project_id
  15. req.params.file_id = settings.health_check.file_id
  16. myWritableStreamBuffer = new streamBuffers.WritableStreamBuffer(initialSize: 100)
  17. res = {
  18. send: (code) ->
  19. if code != 200
  20. callback(new Error("non-200 code from getFile: #{code}"))
  21. }
  22. myWritableStreamBuffer.send = res.send
  23. keyBuilder.userFileKey req, res, ->
  24. fileController.getFile req, myWritableStreamBuffer
  25. myWritableStreamBuffer.on "close", ->
  26. if myWritableStreamBuffer.size() > 0
  27. callback()
  28. else
  29. err = "no data in write stream buffer for health check"
  30. logger.err {err,}, "error performing health check"
  31. callback(err)
  32. checkFileConvert = (callback)->
  33. if !settings.enableConversions
  34. return callback()
  35. imgPath = path.join(settings.path.uploadFolder, "/tiny.pdf")
  36. async.waterfall [
  37. (cb)->
  38. fs.copy("./tiny.pdf", imgPath, cb)
  39. (cb)-> fileConverter.thumbnail imgPath, cb
  40. (resultPath, cb)-> fs.unlink resultPath, cb
  41. (cb)-> fs.unlink imgPath, cb
  42. ], callback
  43. module.exports =
  44. check: (req, res) ->
  45. logger.log {}, "performing health check"
  46. async.parallel [checkFileConvert, checkCanStoreFiles], (err)->
  47. if err?
  48. logger.err err:err, "Health check: error running"
  49. res.send 500
  50. else
  51. res.send 200