2013-07-11 12:14:49 -04:00
|
|
|
/*
|
2014-07-11 16:26:20 -04:00
|
|
|
NodeBB - A better forum platform for the modern web
|
|
|
|
|
https://github.com/NodeBB/NodeBB/
|
|
|
|
|
Copyright (C) 2013-2014 NodeBB Inc.
|
2013-07-11 12:14:49 -04:00
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
"use strict";
|
2014-04-23 21:20:40 -04:00
|
|
|
/*global require, global, process*/
|
2014-02-02 01:38:46 -05:00
|
|
|
|
|
|
|
|
var nconf = require('nconf');
|
|
|
|
|
nconf.argv().env();
|
|
|
|
|
|
|
|
|
|
var fs = require('fs'),
|
|
|
|
|
os = require('os'),
|
2014-11-29 21:54:58 -05:00
|
|
|
url = require('url'),
|
2014-11-14 15:19:26 -05:00
|
|
|
async = require('async'),
|
2014-02-02 01:38:46 -05:00
|
|
|
semver = require('semver'),
|
|
|
|
|
winston = require('winston'),
|
|
|
|
|
path = require('path'),
|
|
|
|
|
pkg = require('./package.json'),
|
|
|
|
|
utils = require('./public/src/utils.js');
|
|
|
|
|
|
2013-08-13 14:45:28 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
global.env = process.env.NODE_ENV || 'production';
|
2013-07-11 12:10:45 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
winston.remove(winston.transports.Console);
|
|
|
|
|
winston.add(winston.transports.Console, {
|
2014-10-26 18:46:50 -04:00
|
|
|
colorize: true,
|
2014-11-13 13:52:46 -05:00
|
|
|
timestamp: function() {
|
2014-11-13 16:47:38 -05:00
|
|
|
var date = new Date();
|
2014-11-14 16:16:06 -05:00
|
|
|
return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
|
2014-11-13 13:52:46 -05:00
|
|
|
},
|
2014-11-11 13:18:41 -05:00
|
|
|
level: global.env === 'production' ? 'info' : 'verbose'
|
2014-02-02 01:38:46 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if(os.platform() === 'linux') {
|
2013-12-07 16:51:47 -05:00
|
|
|
require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) {
|
2013-12-07 17:03:07 -05:00
|
|
|
if(err || !stdout) {
|
2013-12-08 14:49:47 -05:00
|
|
|
winston.warn('Couldn\'t find convert. Did you install imagemagick?');
|
2013-12-07 16:51:47 -05:00
|
|
|
}
|
|
|
|
|
});
|
2014-02-02 01:38:46 -05:00
|
|
|
}
|
2013-12-07 16:51:47 -05:00
|
|
|
|
2014-12-03 14:03:41 -05:00
|
|
|
if (!process.send) {
|
2014-10-17 01:47:13 -04:00
|
|
|
// If run using `node app`, log GNU copyright info along with server info
|
|
|
|
|
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 NodeBB Inc.');
|
|
|
|
|
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
|
|
|
|
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
|
|
|
|
winston.info('');
|
|
|
|
|
}
|
2013-09-10 16:26:26 -04:00
|
|
|
|
2014-02-14 11:49:16 -05:00
|
|
|
// Alternate configuration file support
|
2014-05-31 16:53:18 -04:00
|
|
|
var configFile = path.join(__dirname, '/config.json'),
|
2014-02-14 11:49:16 -05:00
|
|
|
configExists;
|
2014-05-31 16:53:18 -04:00
|
|
|
|
2014-02-14 11:49:16 -05:00
|
|
|
if (nconf.get('config')) {
|
2014-03-21 23:04:27 +00:00
|
|
|
configFile = path.resolve(__dirname, nconf.get('config'));
|
2014-02-14 11:49:16 -05:00
|
|
|
}
|
|
|
|
|
configExists = fs.existsSync(configFile);
|
2013-09-10 16:26:26 -04:00
|
|
|
|
2014-10-03 15:28:02 -04:00
|
|
|
if (!nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && !nconf.get('reset') && configExists) {
|
2014-02-02 01:38:46 -05:00
|
|
|
start();
|
2014-02-14 11:49:16 -05:00
|
|
|
} else if (nconf.get('setup') || nconf.get('install') || !configExists) {
|
2014-02-02 01:38:46 -05:00
|
|
|
setup();
|
|
|
|
|
} else if (nconf.get('upgrade')) {
|
|
|
|
|
upgrade();
|
2014-02-18 17:43:32 -05:00
|
|
|
} else if (nconf.get('reset')) {
|
2014-04-08 15:29:51 -04:00
|
|
|
reset();
|
2014-03-02 14:45:57 -05:00
|
|
|
}
|
2013-09-17 15:38:50 -04:00
|
|
|
|
2014-02-27 01:32:20 -05:00
|
|
|
function loadConfig() {
|
2014-02-02 01:38:46 -05:00
|
|
|
nconf.file({
|
2014-02-16 05:35:44 +00:00
|
|
|
file: configFile
|
2014-02-02 01:38:46 -05:00
|
|
|
});
|
2013-07-16 15:22:59 -04:00
|
|
|
|
2014-02-14 05:01:02 +00:00
|
|
|
nconf.defaults({
|
2014-04-08 16:52:50 -04:00
|
|
|
base_dir: __dirname,
|
|
|
|
|
themes_path: path.join(__dirname, 'node_modules'),
|
|
|
|
|
views_dir: path.join(__dirname, 'public/templates')
|
2014-02-14 05:01:02 +00:00
|
|
|
});
|
|
|
|
|
|
2014-12-03 14:03:41 -05:00
|
|
|
if (!nconf.get('isCluster')) {
|
|
|
|
|
nconf.set('isPrimary', 'true');
|
|
|
|
|
nconf.set('isCluster', 'false');
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 01:49:57 -05:00
|
|
|
// Ensure themes_path is a full filepath
|
|
|
|
|
nconf.set('themes_path', path.resolve(__dirname, nconf.get('themes_path')));
|
|
|
|
|
nconf.set('core_templates_path', path.join(__dirname, 'src/views'));
|
|
|
|
|
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function start() {
|
|
|
|
|
loadConfig();
|
|
|
|
|
|
2014-12-03 01:10:45 -05:00
|
|
|
// nconf defaults, if not set in config
|
|
|
|
|
if (!nconf.get('upload_path')) {
|
|
|
|
|
nconf.set('upload_path', '/public/uploads');
|
|
|
|
|
}
|
|
|
|
|
// Parse out the relative_url and other goodies from the configured URL
|
|
|
|
|
var urlObject = url.parse(nconf.get('url'));
|
|
|
|
|
var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : '';
|
|
|
|
|
nconf.set('use_port', !!urlObject.port);
|
|
|
|
|
nconf.set('relative_path', relativePath);
|
|
|
|
|
nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567);
|
2015-02-10 13:45:29 -05:00
|
|
|
nconf.set('upload_url', '/uploads/');
|
2014-12-03 01:10:45 -05:00
|
|
|
|
2014-12-03 14:03:41 -05:00
|
|
|
if (nconf.get('isPrimary') === 'true') {
|
2014-11-24 20:09:23 -05:00
|
|
|
winston.info('Time: %s', (new Date()).toString());
|
|
|
|
|
winston.info('Initializing NodeBB v%s', pkg.version);
|
2014-11-26 13:28:10 -05:00
|
|
|
winston.verbose('* using configuration stored in: %s', configFile);
|
2014-04-11 01:38:47 -04:00
|
|
|
|
2014-10-17 01:47:13 -04:00
|
|
|
var host = nconf.get(nconf.get('database') + ':host'),
|
|
|
|
|
storeLocation = host ? 'at ' + host + (host.indexOf('/') === -1 ? ':' + nconf.get(nconf.get('database') + ':port') : '') : '';
|
2014-01-05 23:57:43 -05:00
|
|
|
|
2014-11-26 13:28:10 -05:00
|
|
|
winston.verbose('* using %s store %s', nconf.get('database'), storeLocation);
|
|
|
|
|
winston.verbose('* using themes stored in: %s', nconf.get('themes_path'));
|
2014-02-02 01:38:46 -05:00
|
|
|
}
|
|
|
|
|
|
2014-11-27 15:36:05 -05:00
|
|
|
|
|
|
|
|
var webserver = require('./src/webserver');
|
|
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
require('./src/database').init(function(err) {
|
2014-07-05 00:11:21 -04:00
|
|
|
if (err) {
|
|
|
|
|
winston.error(err.stack);
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-07-05 00:19:19 -04:00
|
|
|
var meta = require('./src/meta');
|
2014-02-02 01:38:46 -05:00
|
|
|
meta.configs.init(function () {
|
2014-06-25 18:55:22 -04:00
|
|
|
var templates = require('templates.js'),
|
2014-02-02 01:38:46 -05:00
|
|
|
sockets = require('./src/socket.io'),
|
|
|
|
|
plugins = require('./src/plugins'),
|
2014-07-05 00:19:19 -04:00
|
|
|
upgrade = require('./src/upgrade');
|
2014-01-11 16:15:50 -05:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
templates.setGlobal('relative_path', nconf.get('relative_path'));
|
2013-12-03 14:21:08 -05:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
upgrade.check(function(schema_ok) {
|
|
|
|
|
if (schema_ok || nconf.get('check-schema') === false) {
|
2014-11-27 15:36:05 -05:00
|
|
|
webserver.init();
|
2014-02-02 01:38:46 -05:00
|
|
|
sockets.init(webserver.server);
|
2013-12-31 17:01:51 -05:00
|
|
|
|
2014-12-17 18:09:09 -05:00
|
|
|
if (nconf.get('isPrimary') === 'true' && !nconf.get('jobsDisabled')) {
|
2014-11-27 15:36:05 -05:00
|
|
|
require('./src/notifications').init();
|
|
|
|
|
require('./src/user').startJobs();
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-14 15:19:26 -05:00
|
|
|
async.waterfall([
|
2014-12-06 16:05:00 -05:00
|
|
|
async.apply(meta.themes.setupPaths),
|
2014-11-14 15:19:26 -05:00
|
|
|
async.apply(plugins.ready),
|
2014-11-14 15:31:45 -05:00
|
|
|
async.apply(meta.templates.compile),
|
2014-11-14 15:19:26 -05:00
|
|
|
async.apply(webserver.listen)
|
|
|
|
|
], function(err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
winston.error(err.stack);
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (process.send) {
|
|
|
|
|
process.send({
|
|
|
|
|
action: 'ready'
|
2014-08-25 11:56:48 -04:00
|
|
|
});
|
2014-11-14 15:19:26 -05:00
|
|
|
}
|
2014-02-02 01:38:46 -05:00
|
|
|
});
|
|
|
|
|
|
2014-03-02 13:56:46 -05:00
|
|
|
process.on('SIGTERM', shutdown);
|
|
|
|
|
process.on('SIGINT', shutdown);
|
|
|
|
|
process.on('SIGHUP', restart);
|
2014-09-04 17:09:57 -04:00
|
|
|
process.on('message', function(message) {
|
2014-09-04 17:39:53 -04:00
|
|
|
switch(message.action) {
|
2014-09-04 17:09:57 -04:00
|
|
|
case 'reload':
|
|
|
|
|
meta.reload();
|
|
|
|
|
break;
|
2014-09-04 17:39:53 -04:00
|
|
|
case 'js-propagate':
|
|
|
|
|
meta.js.cache = message.cache;
|
|
|
|
|
meta.js.map = message.map;
|
2014-12-01 14:21:03 -05:00
|
|
|
meta.js.hash = message.hash;
|
2014-12-03 14:03:41 -05:00
|
|
|
winston.verbose('[cluster] Client-side javascript and mapping propagated to worker %s', process.pid);
|
2014-09-04 17:39:53 -04:00
|
|
|
break;
|
2014-09-29 19:31:27 -04:00
|
|
|
case 'css-propagate':
|
|
|
|
|
meta.css.cache = message.cache;
|
|
|
|
|
meta.css.acpCache = message.acpCache;
|
2014-12-01 14:21:03 -05:00
|
|
|
meta.css.hash = message.hash;
|
2014-12-03 14:03:41 -05:00
|
|
|
winston.verbose('[cluster] Stylesheets propagated to worker %s', process.pid);
|
2014-09-29 19:31:27 -04:00
|
|
|
break;
|
2014-09-04 17:09:57 -04:00
|
|
|
}
|
2014-09-29 16:58:23 -04:00
|
|
|
});
|
2014-10-15 16:19:27 -04:00
|
|
|
|
2014-04-17 22:35:49 -04:00
|
|
|
process.on('uncaughtException', function(err) {
|
2014-10-15 16:19:27 -04:00
|
|
|
winston.error(err.stack);
|
2014-04-17 22:35:49 -04:00
|
|
|
console.log(err.stack);
|
|
|
|
|
|
2014-04-17 13:04:46 -04:00
|
|
|
meta.js.killMinifier();
|
2014-04-17 22:35:49 -04:00
|
|
|
shutdown(1);
|
2014-07-05 00:11:40 -04:00
|
|
|
});
|
2014-02-02 01:38:46 -05:00
|
|
|
} else {
|
|
|
|
|
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
|
2014-10-03 15:28:02 -04:00
|
|
|
winston.warn(' ./nodebb upgrade');
|
2014-12-03 14:03:41 -05:00
|
|
|
process.exit();
|
2014-02-02 01:38:46 -05:00
|
|
|
}
|
2013-11-13 12:46:55 -05:00
|
|
|
});
|
2013-09-17 15:38:50 -04:00
|
|
|
});
|
2014-02-02 01:38:46 -05:00
|
|
|
});
|
|
|
|
|
}
|
2013-05-27 14:02:57 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
function setup() {
|
2014-02-27 01:32:20 -05:00
|
|
|
loadConfig();
|
|
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
if (nconf.get('setup')) {
|
|
|
|
|
winston.info('NodeBB Setup Triggered via Command Line');
|
|
|
|
|
} else {
|
|
|
|
|
winston.warn('Configuration not found, starting NodeBB setup');
|
|
|
|
|
}
|
2013-11-03 11:53:44 -05:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
var install = require('./src/install');
|
2013-09-10 16:26:26 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
winston.info('Welcome to NodeBB!');
|
|
|
|
|
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
|
|
|
|
|
winston.info('Press enter to accept the default setting (shown in brackets).');
|
2013-08-23 13:14:36 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
install.setup(function (err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
winston.error('There was a problem completing NodeBB setup: ', err.message);
|
|
|
|
|
} else {
|
|
|
|
|
winston.info('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.');
|
|
|
|
|
}
|
2013-10-28 15:24:21 -04:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
process.exit();
|
|
|
|
|
});
|
|
|
|
|
}
|
2013-10-26 10:56:05 -06:00
|
|
|
|
2014-02-02 01:38:46 -05:00
|
|
|
function upgrade() {
|
2014-02-27 01:32:20 -05:00
|
|
|
loadConfig();
|
2014-02-02 01:38:46 -05:00
|
|
|
|
|
|
|
|
require('./src/database').init(function(err) {
|
2014-07-05 00:11:21 -04:00
|
|
|
if (err) {
|
|
|
|
|
winston.error(err.stack);
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-07-05 00:19:19 -04:00
|
|
|
require('./src/meta').configs.init(function () {
|
2014-02-02 01:38:46 -05:00
|
|
|
require('./src/upgrade').upgrade();
|
2013-10-26 10:56:05 -06:00
|
|
|
});
|
2014-02-02 01:38:46 -05:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-08 15:29:51 -04:00
|
|
|
function reset() {
|
|
|
|
|
loadConfig();
|
|
|
|
|
|
|
|
|
|
require('./src/database').init(function(err) {
|
|
|
|
|
if (err) {
|
2014-04-08 16:03:42 -04:00
|
|
|
winston.error(err.message);
|
2014-04-08 15:29:51 -04:00
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-04-08 16:03:42 -04:00
|
|
|
|
2014-12-23 00:53:20 -05:00
|
|
|
if (nconf.get('theme')) {
|
2014-04-08 16:03:42 -04:00
|
|
|
resetThemes();
|
2014-05-14 11:20:23 -04:00
|
|
|
} else if (nconf.get('plugin')) {
|
|
|
|
|
resetPlugin(nconf.get('plugin'));
|
2014-04-08 16:03:42 -04:00
|
|
|
} else if (nconf.get('plugins')) {
|
|
|
|
|
resetPlugins();
|
|
|
|
|
} else if (nconf.get('widgets')) {
|
|
|
|
|
resetWidgets();
|
|
|
|
|
} else if (nconf.get('settings')) {
|
|
|
|
|
resetSettings();
|
|
|
|
|
} else if (nconf.get('all')) {
|
|
|
|
|
require('async').series([resetWidgets, resetThemes, resetPlugins, resetSettings], function(err) {
|
|
|
|
|
if (!err) {
|
|
|
|
|
winston.info('[reset] Reset complete.');
|
|
|
|
|
} else {
|
2014-11-24 20:09:23 -05:00
|
|
|
winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err.message);
|
2014-04-08 16:03:42 -04:00
|
|
|
}
|
2014-04-08 15:29:51 -04:00
|
|
|
process.exit();
|
2014-04-08 16:03:42 -04:00
|
|
|
});
|
|
|
|
|
} else {
|
2014-05-14 11:20:23 -04:00
|
|
|
winston.warn('[reset] Nothing reset.');
|
2014-12-23 00:53:20 -05:00
|
|
|
winston.info('Use ./nodebb reset {theme|plugins|widgets|settings|all}');
|
2014-11-14 22:18:24 -05:00
|
|
|
winston.info(' or');
|
|
|
|
|
winston.info('Use ./nodebb reset plugin="nodebb-plugin-pluginName"');
|
2014-11-14 22:14:55 -05:00
|
|
|
process.exit();
|
2014-04-08 16:03:42 -04:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function resetSettings(callback) {
|
|
|
|
|
var meta = require('./src/meta');
|
|
|
|
|
meta.configs.set('allowLocalLogin', 1, function(err) {
|
2014-04-08 16:50:23 -04:00
|
|
|
winston.info('[reset] Settings reset to default');
|
2014-04-08 16:03:42 -04:00
|
|
|
if (typeof callback === 'function') {
|
|
|
|
|
callback(err);
|
|
|
|
|
} else {
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-04-08 15:29:51 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-04 22:47:35 -04:00
|
|
|
function resetThemes(callback) {
|
2014-04-08 16:03:42 -04:00
|
|
|
var meta = require('./src/meta');
|
2014-02-18 17:43:32 -05:00
|
|
|
|
2014-04-08 16:03:42 -04:00
|
|
|
meta.themes.set({
|
|
|
|
|
type: 'local',
|
|
|
|
|
id: 'nodebb-theme-vanilla'
|
|
|
|
|
}, function(err) {
|
|
|
|
|
winston.info('[reset] Theme reset to Vanilla');
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
|
|
callback(err);
|
|
|
|
|
} else {
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-04-04 22:47:35 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-14 11:20:23 -04:00
|
|
|
function resetPlugin(pluginId) {
|
|
|
|
|
var db = require('./src/database');
|
2014-12-30 22:06:48 -05:00
|
|
|
db.setRemove('plugins:active', pluginId, function(err) {
|
|
|
|
|
if (err) {
|
|
|
|
|
winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err.message);
|
2014-05-14 11:20:23 -04:00
|
|
|
} else {
|
2014-11-24 20:09:23 -05:00
|
|
|
winston.info('[reset] Plugin `%s` disabled', pluginId);
|
2014-05-14 11:20:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
process.exit();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-04 22:47:35 -04:00
|
|
|
function resetPlugins(callback) {
|
|
|
|
|
var db = require('./src/database');
|
2014-04-08 16:03:42 -04:00
|
|
|
db.delete('plugins:active', function(err) {
|
|
|
|
|
winston.info('[reset] All Plugins De-activated');
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
|
|
callback(err);
|
|
|
|
|
} else {
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-02-18 17:43:32 -05:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-04-07 17:52:48 -04:00
|
|
|
function resetWidgets(callback) {
|
2014-04-08 16:03:42 -04:00
|
|
|
require('./src/widgets').reset(function(err) {
|
|
|
|
|
winston.info('[reset] All Widgets moved to Draft Zone');
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
|
|
callback(err);
|
|
|
|
|
} else {
|
|
|
|
|
process.exit();
|
|
|
|
|
}
|
2014-04-07 17:52:48 -04:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2014-03-02 13:56:46 -05:00
|
|
|
function shutdown(code) {
|
|
|
|
|
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
2014-03-02 14:00:28 -05:00
|
|
|
require('./src/database').close();
|
2014-03-02 13:56:46 -05:00
|
|
|
winston.info('[app] Database connection closed.');
|
2014-08-25 11:56:48 -04:00
|
|
|
require('./src/webserver').server.close();
|
|
|
|
|
winston.info('[app] Web server closed to connections.');
|
2014-03-02 13:56:46 -05:00
|
|
|
|
|
|
|
|
winston.info('[app] Shutdown complete.');
|
2014-04-17 22:35:49 -04:00
|
|
|
process.exit(code || 0);
|
2014-03-02 13:56:46 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function restart() {
|
|
|
|
|
if (process.send) {
|
|
|
|
|
winston.info('[app] Restarting...');
|
2014-04-09 13:10:28 -04:00
|
|
|
process.send({
|
|
|
|
|
action: 'restart'
|
|
|
|
|
});
|
2014-03-02 13:56:46 -05:00
|
|
|
} else {
|
|
|
|
|
winston.error('[app] Could not restart server. Shutting down.');
|
2014-04-17 22:35:49 -04:00
|
|
|
shutdown(1);
|
2014-03-02 13:56:46 -05:00
|
|
|
}
|
2014-10-03 15:28:02 -04:00
|
|
|
}
|