v-daemon
Version:
Daemon script for v-spot-client
263 lines (208 loc) • 15.8 kB
JavaScript
/**
* Daemonize v script
* @function vDaemon
* @param {...string} filename - Script file path to daemonize
* @param {Object} object - Optional settings
* @returns {Promise}
*/
;
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
/** @lends vDaemon */
var vDaemon = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(filenames, options) {
var _this = this;
var close = function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return client.disconnect();
case 2:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function close() {
return _ref3.apply(this, arguments);
};
}();
var args,
_options,
_options$protocol,
protocol,
_options$hostname,
hostname,
port,
connector,
quiet,
verbose,
_options$retryInterva,
retryInterval,
_options$retryMax,
retryMax,
client,
subjects,
_iteratorNormalCompletion,
_didIteratorError,
_iteratorError,
_iterator,
_step,
filename,
subject,
instance,
url,
_args3 = arguments;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
args = argx(_args3);
options = args.pop('object') || {};
filenames = args.remain();
debug('filenames', filenames);
_options = options, _options$protocol = _options.protocol, protocol = _options$protocol === undefined ? Defaults.PROTOCOL : _options$protocol, _options$hostname = _options.hostname, hostname = _options$hostname === undefined ? Defaults.HOSTNAME : _options$hostname, port = _options.port, connector = _options.connector, quiet = _options.quiet, verbose = _options.verbose, _options$retryInterva = _options.retryInterval, retryInterval = _options$retryInterva === undefined ? 3 * 1000 : _options$retryInterva, _options$retryMax = _options.retryMax, retryMax = _options$retryMax === undefined ? 25 : _options$retryMax;
client = clientFor(connector || 'ws');
subjects = [];
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context3.prev = 10;
_context3.t0 = _getIterator3.default;
_context3.next = 14;
return aglob(filenames);
case 14:
_context3.t1 = _context3.sent;
_iterator = (0, _context3.t0)(_context3.t1);
case 16:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context3.next = 25;
break;
}
filename = _step.value;
subject = options.id || path.basename(filename);
instance = subjectFromFile(filename, {
subject: subject,
verbose: verbose,
prefix: '[v-daemon]'
});
client.load(instance, subject);
subjects.push(subject);
case 22:
_iteratorNormalCompletion = true;
_context3.next = 16;
break;
case 25:
_context3.next = 31;
break;
case 27:
_context3.prev = 27;
_context3.t2 = _context3['catch'](10);
_didIteratorError = true;
_iteratorError = _context3.t2;
case 31:
_context3.prev = 31;
_context3.prev = 32;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 34:
_context3.prev = 34;
if (!_didIteratorError) {
_context3.next = 37;
break;
}
throw _iteratorError;
case 37:
return _context3.finish(34);
case 38:
return _context3.finish(31);
case 39:
url = formatUrl({ protocol: protocol, hostname: hostname, port: port });
debug('url', url);
_context3.next = 43;
return client.connect(url);
case 43:
client.on('error', function (e) {
return debug('error', e);
});
client.on('gone', (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var i;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
console.warn('[v-daemon] Client seems to be gone. Trying to reconnect...');
i = 0;
case 2:
if (!(i < retryMax)) {
_context.next = 18;
break;
}
_context.next = 5;
return asleep(retryInterval);
case 5:
_context.prev = 5;
_context.next = 8;
return client.connect(url);
case 8:
console.log('[v-daemon] Successfully reconnect to', url);
return _context.abrupt('return');
case 12:
_context.prev = 12;
_context.t0 = _context['catch'](5);
console.warn('[v-daemon] Failed to connect to', url);
case 15:
i++;
_context.next = 2;
break;
case 18:
throw new Error('[v-daemon] Failed to reconnect');
case 19:
case 'end':
return _context.stop();
}
}
}, _callee, _this, [[5, 12]]);
})));
!quiet && console.log('\n[v-daemon] V-spot client is connected\n \nSpot:\n ' + protocol + '://' + hostname + (port ? ':' + port : '') + '\n\nSubject:\n' + subjects.map(function (line) {
return ' ' + line;
}).join(EOL) + '\n\n ');
return _context3.abrupt('return', close);
case 47:
case 'end':
return _context3.stop();
}
}
}, _callee3, this, [[10, 27, 31, 39], [32,, 34, 38]]);
}));
return function vDaemon(_x, _x2) {
return _ref.apply(this, arguments);
};
}();
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var argx = require('argx');
var aglob = require('aglob');
var path = require('path');
var asleep = require('asleep');
var _require = require('url'),
formatUrl = _require.format;
var _require2 = require('os'),
EOL = _require2.EOL;
var _require3 = require('shiba-daemon-util'),
subjectFromFile = _require3.subjectFromFile;
var _require4 = require('v-connector'),
clientFor = _require4.clientFor;
var debug = require('debug')('v:daemon');
var _require5 = require('v-constants'),
Defaults = _require5.Defaults;
module.exports = vDaemon;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZEYWVtb24uanMiXSwibmFtZXMiOlsiZmlsZW5hbWVzIiwib3B0aW9ucyIsImNsaWVudCIsImRpc2Nvbm5lY3QiLCJjbG9zZSIsImFyZ3MiLCJhcmd4IiwicG9wIiwicmVtYWluIiwiZGVidWciLCJwcm90b2NvbCIsIkRlZmF1bHRzIiwiUFJPVE9DT0wiLCJob3N0bmFtZSIsIkhPU1ROQU1FIiwicG9ydCIsImNvbm5lY3RvciIsInF1aWV0IiwidmVyYm9zZSIsInJldHJ5SW50ZXJ2YWwiLCJyZXRyeU1heCIsImNsaWVudEZvciIsInN1YmplY3RzIiwiYWdsb2IiLCJmaWxlbmFtZSIsInN1YmplY3QiLCJpZCIsInBhdGgiLCJiYXNlbmFtZSIsImluc3RhbmNlIiwic3ViamVjdEZyb21GaWxlIiwicHJlZml4IiwibG9hZCIsInB1c2giLCJ1cmwiLCJmb3JtYXRVcmwiLCJjb25uZWN0Iiwib24iLCJlIiwiY29uc29sZSIsIndhcm4iLCJpIiwiYXNsZWVwIiwibG9nIiwiRXJyb3IiLCJtYXAiLCJsaW5lIiwiam9pbiIsIkVPTCIsInZEYWVtb24iLCJyZXF1aXJlIiwiZm9ybWF0IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFPQTs7Ozs7Ozs7Ozs7Ozs7QUFhQTs7c0ZBQ0Esa0JBQXdCQSxTQUF4QixFQUFtQ0MsT0FBbkM7QUFBQTs7QUFBQTtBQUFBLDJGQW9FRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFDUUMsT0FBT0MsVUFBUCxFQURSOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE9BcEVGOztBQUFBLHNCQW9FaUJDLEtBcEVqQjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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TUcsUUFKTixJQUlpQkUsT0FBTyxNQUFNQSxJQUFiLEdBQW9CLEVBSnJDLHVCQU9WTyxTQUFTdUIsR0FBVCxDQUFhLFVBQUNDLElBQUQ7QUFBQSw0QkFBZUEsSUFBZjtBQUFBLGFBQWIsRUFBb0NDLElBQXBDLENBQXlDQyxHQUF6QyxDQVBVLFlBQVY7O0FBekRGLDhDQXdFUzVDLEtBeEVUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7O2tCQUFlNkMsTzs7Ozs7OztBQVpmLElBQU0zQyxPQUFPNEMsUUFBUSxNQUFSLENBQWI7QUFDQSxJQUFNM0IsUUFBUTJCLFFBQVEsT0FBUixDQUFkO0FBQ0EsSUFBTXZCLE9BQU91QixRQUFRLE1BQVIsQ0FBYjtBQUNBLElBQU1SLFNBQVNRLFFBQVEsUUFBUixDQUFmOztlQUM0QkEsUUFBUSxLQUFSLEM7SUFBYmYsUyxZQUFSZ0IsTTs7Z0JBQ09ELFFBQVEsSUFBUixDO0lBQVBGLEcsYUFBQUEsRzs7Z0JBQ21CRSxRQUFRLG1CQUFSLEM7SUFBbkJwQixlLGFBQUFBLGU7O2dCQUNhb0IsUUFBUSxhQUFSLEM7SUFBYjdCLFMsYUFBQUEsUzs7QUFDUCxJQUFNWixRQUFReUMsUUFBUSxPQUFSLEVBQWlCLFVBQWpCLENBQWQ7O2dCQUNtQkEsUUFBUSxhQUFSLEM7SUFBWnZDLFEsYUFBQUEsUTs7QUErRVB5QyxPQUFPQyxPQUFQLEdBQWlCSixPQUFqQiIsImZpbGUiOiJ2RGFlbW9uLmpzIiwic291cmNlUm9vdCI6ImxpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGFlbW9uaXplIHYgc2NyaXB0XG4gKiBAZnVuY3Rpb24gdkRhZW1vblxuICogQHBhcmFtIHsuLi5zdHJpbmd9IGZpbGVuYW1lIC0gU2NyaXB0IGZpbGUgcGF0aCB0byBkYWVtb25pemVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgLSBPcHRpb25hbCBzZXR0aW5nc1xuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhcmd4ID0gcmVxdWlyZSgnYXJneCcpXG5jb25zdCBhZ2xvYiA9IHJlcXVpcmUoJ2FnbG9iJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGFzbGVlcCA9IHJlcXVpcmUoJ2FzbGVlcCcpXG5jb25zdCB7Zm9ybWF0OiBmb3JtYXRVcmx9ID0gcmVxdWlyZSgndXJsJylcbmNvbnN0IHtFT0x9ID0gcmVxdWlyZSgnb3MnKVxuY29uc3Qge3N1YmplY3RGcm9tRmlsZX0gPSByZXF1aXJlKCdzaGliYS1kYWVtb24tdXRpbCcpXG5jb25zdCB7Y2xpZW50Rm9yfSA9IHJlcXVpcmUoJ3YtY29ubmVjdG9yJylcbmNvbnN0IGRlYnVnID0gcmVxdWlyZSgnZGVidWcnKSgndjpkYWVtb24nKVxuY29uc3Qge0RlZmF1bHRzfSA9IHJlcXVpcmUoJ3YtY29uc3RhbnRzJylcblxuLyoqIEBsZW5kcyB2RGFlbW9uICovXG5hc3luYyBmdW5jdGlvbiB2RGFlbW9uIChmaWxlbmFtZXMsIG9wdGlvbnMpIHtcblxuICAvLyBQYXJzZSB2YXJpYWRpYyBhcmd1bWVudHNcbiAge1xuICAgIGNvbnN0IGFyZ3MgPSBhcmd4KGFyZ3VtZW50cylcbiAgICBvcHRpb25zID0gYXJncy5wb3AoJ29iamVjdCcpIHx8IHt9XG4gICAgZmlsZW5hbWVzID0gYXJncy5yZW1haW4oKVxuXG4gICAgZGVidWcoJ2ZpbGVuYW1lcycsIGZpbGVuYW1lcylcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBwcm90b2NvbCA9IERlZmF1bHRzLlBST1RPQ09MLFxuICAgIGhvc3RuYW1lID0gRGVmYXVsdHMuSE9TVE5BTUUsXG4gICAgcG9ydCxcbiAgICBjb25uZWN0b3IsXG4gICAgcXVpZXQsXG4gICAgdmVyYm9zZSxcbiAgICByZXRyeUludGVydmFsID0gMyAqIDEwMDAsXG4gICAgcmV0cnlNYXggPSAyNVxuICB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IGNsaWVudCA9IGNsaWVudEZvcihjb25uZWN0b3IgfHwgJ3dzJylcblxuICBjb25zdCBzdWJqZWN0cyA9IFtdXG4gIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgYXdhaXQgYWdsb2IoZmlsZW5hbWVzKSkge1xuICAgIGNvbnN0IHN1YmplY3QgPSBvcHRpb25zLmlkIHx8IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpXG4gICAgY29uc3QgaW5zdGFuY2UgPSBzdWJqZWN0RnJvbUZpbGUoZmlsZW5hbWUsIHtcbiAgICAgIHN1YmplY3QsXG4gICAgICB2ZXJib3NlLFxuICAgICAgcHJlZml4OiAnW3YtZGFlbW9uXSdcbiAgICB9KVxuICAgIGNsaWVudC5sb2FkKGluc3RhbmNlLCBzdWJqZWN0KVxuICAgIHN1YmplY3RzLnB1c2goc3ViamVjdClcbiAgfVxuXG4gIGNvbnN0IHVybCA9IGZvcm1hdFVybCh7cHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0fSlcbiAgZGVidWcoJ3VybCcsIHVybClcblxuICBhd2FpdCBjbGllbnQuY29ubmVjdCh1cmwpXG5cbiAgY2xpZW50Lm9uKCdlcnJvcicsIChlKSA9PiBkZWJ1ZygnZXJyb3InLCBlKSlcbiAgY2xpZW50Lm9uKCdnb25lJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihgW3YtZGFlbW9uXSBDbGllbnQgc2VlbXMgdG8gYmUgZ29uZS4gVHJ5aW5nIHRvIHJlY29ubmVjdC4uLmApXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXRyeU1heDsgaSsrKSB7XG4gICAgICBhd2FpdCBhc2xlZXAocmV0cnlJbnRlcnZhbClcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHVybClcbiAgICAgICAgY29uc29sZS5sb2coYFt2LWRhZW1vbl0gU3VjY2Vzc2Z1bGx5IHJlY29ubmVjdCB0b2AsIHVybClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgW3YtZGFlbW9uXSBGYWlsZWQgdG8gY29ubmVjdCB0b2AsIHVybClcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbdi1kYWVtb25dIEZhaWxlZCB0byByZWNvbm5lY3RgKVxuICB9KVxuXG4gICFxdWlldCAmJiBjb25zb2xlLmxvZyhgXG5bdi1kYWVtb25dIFYtc3BvdCBjbGllbnQgaXMgY29ubmVjdGVkXG4gIFxuU3BvdDpcbiAgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31cblxuU3ViamVjdDpcbiR7c3ViamVjdHMubWFwKChsaW5lKSA9PiBgICAke2xpbmV9YCkuam9pbihFT0wpfVxuXG4gIGApXG5cbiAgYXN5bmMgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgIGF3YWl0IGNsaWVudC5kaXNjb25uZWN0KClcbiAgfVxuXG4gIHJldHVybiBjbG9zZVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gdkRhZW1vblxuIl19