Explorar o código

Merge pull request #207 from overleaf/bg-add-exception-handler

add uncaughtException handler
Brian Gough %!s(int64=5) %!d(string=hai) anos
pai
achega
58614fdf2a
Modificáronse 2 ficheiros con 17 adicións e 0 borrados
  1. 15 0
      services/clsi/app.js
  2. 2 0
      services/clsi/config/settings.defaults.js

+ 15 - 0
services/clsi/app.js

@@ -213,6 +213,12 @@ app.get('/oops', function (req, res, next) {
   return res.send('error\n')
 })
 
+app.get('/oops-internal', function (req, res, next) {
+  setTimeout(function () {
+    throw new Error('Test error')
+  }, 1)
+})
+
 app.get('/status', (req, res, next) => res.send('CLSI is alive\n'))
 
 Settings.processTooOld = false
@@ -339,6 +345,15 @@ const loadHttpPort = Settings.internal.load_balancer_agent.local_port
 
 if (!module.parent) {
   // Called directly
+
+  // handle uncaught exceptions when running in production
+  if (Settings.catchErrors) {
+    process.removeAllListeners('uncaughtException')
+    process.on('uncaughtException', (error) =>
+      logger.error({ err: error }, 'uncaughtException')
+    )
+  }
+
   app.listen(port, host, (error) => {
     if (error) {
       logger.fatal({ error }, `Error starting CLSI on ${host}:${port}`)

+ 2 - 0
services/clsi/config/settings.defaults.js

@@ -25,6 +25,8 @@ module.exports = {
   processLifespanLimitMs:
     parseInt(process.env.PROCESS_LIFE_SPAN_LIMIT_MS) || 60 * 60 * 24 * 1000 * 2,
 
+  catchErrors: process.env.CATCH_ERRORS === 'true',
+
   path: {
     compilesDir: Path.resolve(__dirname, '../compiles'),
     outputDir: Path.resolve(__dirname, '../output'),