pinus-robot
Version:
pinus-robot is a simple tool to benchmark the socket.io server's performance.
150 lines • 9.57 kB
JavaScript
;
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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