bitcore-wallet-service/bws.js

94 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2015-02-19 06:00:14 -08:00
#!/usr/bin/env node
2015-02-13 11:07:47 -08:00
2015-05-07 12:45:17 -07:00
var async = require('async');
2015-04-15 12:25:31 -07:00
var fs = require('fs');
2015-02-19 06:00:14 -08:00
var ExpressApp = require('./lib/expressapp');
2015-04-05 09:56:56 -07:00
var config = require('./config');
2015-04-18 02:55:24 -07:00
var log = require('npmlog');
log.debug = log.verbose;
log.disableColor();
2015-04-15 14:34:48 -07:00
2015-02-13 11:07:47 -08:00
2015-04-15 06:59:25 -07:00
var port = process.env.BWS_PORT || config.port || 3232;
2015-02-09 10:30:16 -08:00
2015-04-15 11:56:08 -07:00
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
2015-04-15 15:38:51 -07:00
var clusterInstances = config.clusterInstances || numCPUs;
2015-04-15 12:25:31 -07:00
var serverModule = config.https ? require('https') : require('http');
2015-04-15 15:38:51 -07:00
2015-04-15 12:25:31 -07:00
var serverOpts = {};
if (config.https) {
serverOpts.key = fs.readFileSync(config.privateKeyFile || './ssl/privatekey.pem');
serverOpts.cert = fs.readFileSync(config.certificateFile || './ssl/certificate.pem');
2016-08-15 17:34:44 -07:00
if (config.ciphers) {
serverOpts.ciphers = config.ciphers;
serverOpts.honorCipherOrder = true;
};
// This sets the intermediate CA certs only if they have all been designated in the config.js
if (config.CAinter1 && config.CAinter2 && config.CAroot) {
serverOpts.ca = [fs.readFileSync(config.CAinter1),
2016-02-21 06:41:05 -08:00
fs.readFileSync(config.CAinter2),
fs.readFileSync(config.CAroot)
];
};
2015-04-15 12:25:31 -07:00
}
2015-03-23 08:50:00 -07:00
2015-04-20 16:46:45 -07:00
if (config.cluster && !config.lockOpts.lockerServer)
throw 'When running in cluster mode, locker server need to be configured';
2015-04-15 15:38:51 -07:00
2015-05-07 10:16:24 -07:00
if (config.cluster && !config.messageBrokerOpts.messageBrokerServer)
throw 'When running in cluster mode, message broker server need to be configured';
2016-11-23 07:17:28 -08:00
var expressApp = new ExpressApp();
function startInstance(cb) {
var server = config.https ? serverModule.createServer(serverOpts, expressApp.app) : serverModule.Server(expressApp.app);
server.on('connection', function(socket) {
socket.setTimeout(300 * 1000);
})
expressApp.start(config, function(err) {
if (err) {
log.error('Could not start BWS instance', err);
2016-11-24 05:15:46 -08:00
return;
2016-11-23 07:17:28 -08:00
}
server.listen(port);
2016-11-24 05:15:46 -08:00
var instanceInfo = cluster.worker ? ' [Instance:' + cluster.worker.id + ']' : '';
log.info('BWS running ' + instanceInfo);
2016-11-23 07:17:28 -08:00
return;
2016-11-24 05:15:46 -08:00
});
2016-11-23 07:17:28 -08:00
};
2016-11-24 05:15:46 -08:00
if (config.cluster && cluster.isMaster) {
2016-11-23 07:17:28 -08:00
2016-11-24 05:15:46 -08:00
// Count the machine's CPUs
var instances = config.clusterInstances || require('os').cpus().length;
2016-11-23 07:17:28 -08:00
2016-11-24 05:15:46 -08:00
log.info('Starting ' + instances + ' instances');
2016-11-23 07:17:28 -08:00
2016-11-24 05:15:46 -08:00
// Create a worker for each CPU
for (var i = 0; i < instances; i += 1) {
cluster.fork();
2016-11-23 07:17:28 -08:00
}
2016-11-24 05:15:46 -08:00
// Listen for dying workers
cluster.on('exit', function(worker) {
// Replace the dead worker,
log.error('Worker ' + worker.id + ' died :(');
cluster.fork();
});
// Code to run if we're in a worker process
2016-11-23 07:17:28 -08:00
} else {
2016-11-24 05:15:46 -08:00
log.info('Listening on port: ' + port);
startInstance();
2016-11-23 07:17:28 -08:00
};