From 6e30b385e8e44f7317c5167d630c5fb8f5cb68e6 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Tue, 29 Aug 2017 10:36:45 +0300 Subject: [PATCH] add assigned field --- config/default.toml | 2 ++ lib/errors.js | 17 +++++++++++++++++ lib/maildrop.js | 2 ++ package.json | 1 + server.js | 6 ++++++ worker.js | 22 +++++++++++++++------- 6 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 lib/errors.js diff --git a/config/default.toml b/config/default.toml index 1296efbd..b5b1add6 100644 --- a/config/default.toml +++ b/config/default.toml @@ -25,6 +25,8 @@ maxForwards=2000 # If usernames are not email addresses then use this domain as hostname part #emailDomain="mydomain.info" +bugsnagCode="" + [dbs] # @include "dbs.toml" diff --git a/lib/errors.js b/lib/errors.js new file mode 100644 index 00000000..da126f1b --- /dev/null +++ b/lib/errors.js @@ -0,0 +1,17 @@ +/* eslint global-require: 0 */ +'use strict'; + +const config = require('wild-config'); +let bugsnag; + +if (config.bugsnagCode) { + bugsnag = require('bugsnag'); + bugsnag.register(config.bugsnagCode); + bugsnag.notify(new Error('Non-fatal')); +} + +module.exports.notify = (...args) => { + if (bugsnag) { + bugsnag.notify(...args); + } +}; diff --git a/lib/maildrop.js b/lib/maildrop.js index 39422e97..2462fd96 100644 --- a/lib/maildrop.js +++ b/lib/maildrop.js @@ -219,6 +219,8 @@ module.exports = (options, callback) => { domain: recipientDomain, sendingZone: deliveryZone, + assigned: 'no', + // actual recipient address recipient: recipient.to, http: recipient.http, diff --git a/package.json b/package.json index f8191bc0..bcee6691 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dependencies": { "addressparser": "^1.0.1", "bcryptjs": "^2.4.3", + "bugsnag": "^1.12.0", "generate-password": "^1.3.0", "he": "^1.1.1", "html-to-text": "^3.3.0", diff --git a/server.js b/server.js index 75b79100..074b5481 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,7 @@ process.env.UV_THREADPOOL_SIZE = 16; const config = require('wild-config'); +const errors = require('./lib/errors'); const fs = require('fs'); const log = require('npmlog'); const packageData = require('./package.json'); @@ -74,3 +75,8 @@ if (!config.processes || config.processes <= 1) { require('./worker.js'); } } + +process.on('unhandledRejection', err => { + log.error('App', 'Unhandled rejection: %s' + ((err && err.stack) || err)); + errors.notify(err); +}); diff --git a/worker.js b/worker.js index af13ed3d..7684808c 100644 --- a/worker.js +++ b/worker.js @@ -7,6 +7,7 @@ const pop3 = require('./pop3'); const lmtp = require('./lmtp'); const api = require('./api'); const db = require('./lib/db'); +const errors = require('./lib/errors'); // preload certificate files require('./lib/certs'); @@ -15,32 +16,37 @@ require('./lib/certs'); db.connect(err => { if (err) { log.error('Db', 'Failed to setup database connection'); - return process.exit(1); + errors.notify(err); + return setTimeout(() => process.exit(1), 3000); } // Start IMAP server imap(err => { if (err) { log.error('App', 'Failed to start IMAP server. %s', err.message); - return process.exit(1); + errors.notify(err); + return setTimeout(() => process.exit(1), 3000); } // Start POP3 server pop3(err => { if (err) { log.error('App', 'Failed to start POP3 server'); - return process.exit(1); + errors.notify(err); + return setTimeout(() => process.exit(1), 3000); } // Start LMTP maildrop server lmtp(err => { if (err) { log.error('App', 'Failed to start LMTP server'); - return process.exit(1); + errors.notify(err); + return setTimeout(() => process.exit(1), 3000); } // Start HTTP API server api(err => { if (err) { log.error('App', 'Failed to start API server'); - return process.exit(1); + errors.notify(err); + return setTimeout(() => process.exit(1), 3000); } log.info('App', 'All servers started, ready to process some mail'); @@ -52,7 +58,8 @@ db.connect(err => { log.info('App', 'Changed group to "%s" (%s)', config.group, process.getgid()); } catch (E) { log.error('App', 'Failed to change group to "%s" (%s)', config.group, E.message); - return process.exit(1); + errors.notify(E); + return setTimeout(() => process.exit(1), 3000); } } if (config.user) { @@ -61,7 +68,8 @@ db.connect(err => { log.info('App', 'Changed user to "%s" (%s)', config.user, process.getuid()); } catch (E) { log.error('App', 'Failed to change user to "%s" (%s)', config.user, E.message); - return process.exit(1); + errors.notify(E); + return setTimeout(() => process.exit(1), 3000); } } });