'use strict'; /** * Distributed timers as a service * Exports a default server instance. If executed directly, the server will be started automoaticall and configured to auto rebalance on `SIGINT` and `SIGTERM` * @module skyring * @author Eric Satterwhite * @since 1.0.0 * @requires http * @requires debug * @requires keef * @requires skyring/lib/server **/ const conf = require('./conf') , Server = require('./lib/server') , Transports = require('./lib/transports') , Transport = require('./lib/transports/transport') , debug = require('debug')('skyring:main') ; module.exports = Server; module.exports.Transport = Transport; module.exports.Transports = Transports if(require.main === module){ process.title = 'skyring'; process.chdir(__dirname); const server = new Server(); server.listen(conf.get('port'), (err) => { /* istanbul ignore if */ if(err) { process.exitCode = 1; console.error(err); throw err; } debug('server listening', conf.get('port')); }); function onSignal() { server.close(()=>{ debug('shutting down'); }); } process.once('SIGINT', onSignal); process.once('SIGTERM', onSignal); } /** * Configuration options for skyring. See {@link module:keef} on ways to pass configuration * @module skyring/conf * @author Eric Satterwhite * @since 1.0.0 * @property {String|String[]} [seeds=127.0.0.1:3455,127.0.0.1:3456] A list of seed nodes to use for bootstrapping a ring cluster * @property {Object} channel * @property {String} [channel.host=127.0.0.1] hostname or ip addres for tchannel to listen on * @property {Number} [channel.port=3455] Port number for tchannel to bind to * @property {Number} [PORT=3000] The port number for the http API server to bind to * @property {Object} nats Nats queue specific configuration * @property {String|String[]} [nats.hosts=127.0.0.1:4222] host:port of instances of a nats cluster. One is usually enough. * @property {Object} [options.storage] Storage config options for level db * @property {String[]} [options.storage.backend=memdown] a requireable module name, or absolute path to a leveldb compatible backend * `leveldown` and `memdown` are installed by default * @property {String} options.storage.path A directory path to a leveldb instance. One will be created if it doesn't already exist. * @param {String[]|Function[]} [optsion.transport] an array of custom transport functions, or requireable paths that resolve to functions. All transport function must be named functions * If the backend is memdown, this is optional and randomly generated per timer instance **/