diff --git a/services/clsi/app.js b/services/clsi/app.js index 930ebc3e1c..aee8d44832 100644 --- a/services/clsi/app.js +++ b/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}`) diff --git a/services/clsi/config/settings.defaults.js b/services/clsi/config/settings.defaults.js index 72c3471ba9..a0ad8433aa 100644 --- a/services/clsi/config/settings.defaults.js +++ b/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'),