diff --git a/config/default.toml b/config/default.toml index 8df7f198..44b5e960 100644 --- a/config/default.toml +++ b/config/default.toml @@ -1,4 +1,12 @@ +# If you start out as a root user (eg. if you want to use ports lower than 1000) +# then you can downgrade the user once all services are up and running +#user="nobody" +#group="nogroup" + +# Process title visible in monitorin logs and process listing +title="mailtrain" + [log] level="silly" diff --git a/index.js b/index.js index 5cf353b2..ac13fec3 100644 --- a/index.js +++ b/index.js @@ -8,10 +8,18 @@ let config = require('config'); let log = require('npmlog'); let app = require('./app'); let http = require('http'); +let sender = require('./services/sender'); +let importer = require('./services/importer'); // eslint-disable-line global-require +let verpServer = require('./services/verp-server'); // eslint-disable-line global-require +let testServer = require('./services/test-server'); // eslint-disable-line global-require let port = config.www.port; let host = config.www.host; +if (config.title) { + process.title = config.title; +} + log.level = config.log.level; app.set('port', port); @@ -54,9 +62,30 @@ server.on('listening', () => { let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; log.info('Express', 'WWW server listening on %s', bind); - // start sending loop - require('./services/sender'); // eslint-disable-line global-require - require('./services/importer'); // eslint-disable-line global-require - require('./services/verp-server'); // eslint-disable-line global-require - require('./services/test-server'); // eslint-disable-line global-require + // start additional services + testServer(() => { + verpServer(() => { + importer(() => { + sender(() => { + log.info('Service', 'All services started'); + if (config.group) { + try { + process.setgid(config.group); + log.info('Service', 'Changed group to "%s" (%s)', config.group, process.getgid()); + } catch (E) { + log.info('Service', 'Failed changed group to "%s"', config.group); + } + } + if (config.user) { + try { + process.setuid(config.user); + log.info('Service', 'Changed user to "%s" (%s)', config.user, process.getuid()); + } catch (E) { + log.info('Service', 'Failed changed user to "%s"', config.user); + } + } + }); + }); + }); + }); }); diff --git a/public/javascript/tables.js b/public/javascript/tables.js index 65dcf5e3..da363f75 100644 --- a/public/javascript/tables.js +++ b/public/javascript/tables.js @@ -102,3 +102,10 @@ $('.fm-birthday-generic.date').datepicker({ weekStart: 1, autoclose: true }); + +$('.page-refresh').each(function () { + var interval = Number($(this).data('interval')) || 60; + setTimeout(function () { + window.location.reload(); + }, interval * 1000); +}); diff --git a/services/importer.js b/services/importer.js index 9c1e8925..7f18d82a 100644 --- a/services/importer.js +++ b/services/importer.js @@ -234,4 +234,7 @@ let importLoop = () => { getNext(); }; -importLoop(); +module.exports = callback => { + importLoop(); + setImmediate(callback); +}; diff --git a/services/sender.js b/services/sender.js index 36d9195d..3388a80e 100644 --- a/services/sender.js +++ b/services/sender.js @@ -294,4 +294,7 @@ let sendLoop = () => { }); }; -sendLoop(); +module.exports = callback => { + sendLoop(); + setImmediate(callback); +}; diff --git a/services/test-server.js b/services/test-server.js index a9bbed01..337b9292 100644 --- a/services/test-server.js +++ b/services/test-server.js @@ -96,8 +96,13 @@ server.on('error', err => { log.error('TESTSERV', err.stack); }); -if (config.testserver.enabled) { - server.listen(config.testserver.port, config.testserver.host, () => { - log.info('TESTSERV', 'Server listening on port %s', config.testserver.port); - }); -} +module.exports = callback => { + if (config.testserver.enabled) { + server.listen(config.testserver.port, config.testserver.host, () => { + log.info('TESTSERV', 'Server listening on port %s', config.testserver.port); + setImmediate(callback); + }); + } else { + setImmediate(callback); + } +}; diff --git a/services/verp-server.js b/services/verp-server.js index 511d5c9e..1476da7a 100644 --- a/services/verp-server.js +++ b/services/verp-server.js @@ -96,8 +96,13 @@ server.on('error', err => { log.error('VERP', err.stack); }); -if (config.verp.enabled) { - server.listen(config.verp.port, () => { - log.info('VERP', 'Server listening on port %s', config.verp.port); - }); -} +module.exports = callback => { + if (config.verp.enabled) { + server.listen(config.verp.port, () => { + log.info('VERP', 'Server listening on port %s', config.verp.port); + setImmediate(callback); + }); + } else { + setImmediate(callback); + } +}; diff --git a/views/campaigns/view.hbs b/views/campaigns/view.hbs index 2b5694d9..621b35f0 100644 --- a/views/campaigns/view.hbs +++ b/views/campaigns/view.hbs @@ -99,6 +99,8 @@ {{/if}} {{#if isSending}} + +