UNPKG

v-daemon

Version:
263 lines (208 loc) 15.8 kB
/** * Daemonize v script * @function vDaemon * @param {...string} filename - Script file path to daemonize * @param {Object} object - Optional settings * @returns {Promise} */ 'use strict'; 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