UNPKG

pinus-robot

Version:

pinus-robot is a simple tool to benchmark the socket.io server's performance.

150 lines 9.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.abort = exports.load = exports.set = exports.localrun = exports.sshrun = exports.prepare = exports.run = void 0; const cp = require("child_process"); const fs = require("fs"); const vm = require("vm"); function run(main, message, clients) { if (!clients) { clients = ['127.0.0.1']; prepare(main, message, clients); } else { prepare(main, message, clients); } } exports.run = run; function prepare(main, message, clients) { let count = parseInt(message.agent, 10) || 1; for (let ipindex in clients) { for (let i = 0; i < count; i++) { let cmd = `"${process.execPath}" ${main}`; let ip = clients[ipindex]; if (ip === '127.0.0.1') { localrun(cmd); } else { sshrun(cmd, ip); } } } } exports.prepare = prepare; function sshrun(cmd, host, callback) { let hosts = [host]; log('Executing ' + cmd.yellow + ' on ' + hosts.join(', ').blue); let wait = 0; let data = []; if (hosts.length > 1) { starter.parallelRunning = true; } hosts.forEach(function (host) { wait += 1; spawnProcess('ssh', [host, cmd], function (err, out) { if (!err) { data.push({ host: host, out: out }); } done(err); }); }); let error; function done(err) { error = error || err; if (--wait === 0) { starter.parallelRunning = false; if (error) { abort('FAILED TO RUN, return code: ' + error); } else if (callback) { callback(data); } } } } exports.sshrun = sshrun; function localrun(cmd, callback) { log('Executing ' + cmd.green + ' locally'); spawnProcess(cmd, ['', ''], function (err, data) { if (err) { abort('FAILED TO RUN, return code: ' + err); } else { if (callback) callback(data); } }); } exports.localrun = localrun; let starter = new class { }; function set(key, def) { if (typeof def === 'function') { starter.__defineGetter__(key, def); } else { starter.__defineGetter__(key, function () { return def; }); } } exports.set = set; function load(file) { if (!file) throw new Error('File not specified'); log('Executing compile ' + file); let code = fs.readFileSync(file).toString(); vm.runInNewContext(code, starter); } exports.load = load; function abort(msg) { log(msg.red); // process.exit(1); } exports.abort = abort; let log = console.log; /** *begin notify to run agent * * */ function addBeauty(prefix, buf) { let out = prefix + ' ' + buf .toString() .replace(/\s+$/, '') .replace(/\n/g, '\n' + prefix); return out.green; } function spawnProcess(command, options, callback) { let child = null; if (!!options[0]) { child = cp.spawn(command, options); } else { child = cp.exec(command, options); } let prefix = command === 'ssh' ? '[' + options[0] + '] ' : ''; prefix = prefix.grey; // child.stderr.on('data', function (chunk) { // log(addBeauty(chunk)); // }); let res = []; child.stdout.on('data', function (chunk) { res.push(chunk.toString()); log(addBeauty(chunk)); }); function addBeauty(buf) { return prefix + buf .toString() .replace(/\s+$/, '') .replace(/\n/g, '\n' + prefix); } child.on('exit', function (code) { if (callback) { callback(code === 0 ? null : code, res && res.join('\n')); } }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9tYXN0ZXIvc3RhcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvQ0FBcUM7QUFDckMseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUV6QixTQUFnQixHQUFHLENBQUMsSUFBWSxFQUFFLE9BQVksRUFBRSxPQUFtQjtJQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ1YsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkM7U0FBTTtRQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ25DO0FBQ0wsQ0FBQztBQVBELGtCQU9DO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVksRUFBRSxPQUF1QixFQUFFLE9BQW1CO0lBQzlFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxLQUFLLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsSUFBSSxFQUFFLEtBQUssV0FBVyxFQUFFO2dCQUNwQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDakI7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNuQjtTQUNKO0tBQ0o7QUFDTCxDQUFDO0FBYkQsMEJBYUM7QUFF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