pinus-robot
Version:
pinus-robot is a simple tool to benchmark the socket.io server's performance.
113 lines • 6.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Actor = void 0;
const vm = require("vm");
const events_1 = require("events");
const monitor = require("../monitor/monitor");
const path = require("path");
const logging_1 = require("../common/logging");
class Actor extends events_1.EventEmitter {
constructor(conf, aid) {
super();
this.log = logging_1.logging;
this.id = aid;
if (conf.script) {
this.script = conf.script;
}
else {
if (path.isAbsolute(conf.scriptFile)) {
this.script = `require("${conf.scriptFile}").default(actor);`;
}
else {
this.script = `require("${path.join(process.cwd(), conf.scriptFile)}").default(actor);`;
}
}
console.log('runScript ', this.script);
this.on('start', (action, reqId) => {
monitor.beginTime(action, this.id, reqId);
});
this.on('end', (action, reqId) => {
monitor.endTime(action, this.id, reqId);
});
this.on('incr', function (action) {
monitor.incr(action);
});
this.on('decr', function (action) {
monitor.decr(action);
});
}
run() {
try {
let initSandbox = {
console: console,
require: require,
actor: this,
setTimeout: setTimeout,
clearTimeout: clearTimeout,
setInterval: setInterval,
clearInterval: clearInterval,
global: global,
process: process
};
let context = vm.createContext(initSandbox);
vm.runInContext(this.script, context);
}
catch (ex) {
this.emit('error', ex.stack);
}
}
/**
* clear data
*
*/
reset() {
monitor.clear();
}
/**
* wrap setTimeout
*
*@param {Function} fn
*@param {Number} time
*/
later(fn, time) {
if (time > 0 && typeof (fn) === 'function') {
return setTimeout(fn, time);
}
}
/**
* wrap setInterval
* when time is Array, the interval time is thd random number
* between then
*
*@param {Function} Fn
*@param {Number} time
*/
interval(Fn, time) {
let fn = arguments[0];
let self = this;
switch (typeof (time)) {
case 'number':
if (arguments[1] > 0)
return setInterval(fn, arguments[1]);
break;
case 'object':
let start = time[0], end = time[1];
let newTime = Math.round(Math.random() * (end - start) + start);
return setTimeout(function () { fn(), self.interval(fn, newTime); }, newTime);
default:
self.log.error('wrong argument');
return;
}
}
/**
*wrap clearTimeout
*
* @param {Number} timerId
*
*/
clean(timerId) {
clearTimeout(timerId);
}
}
exports.Actor = Actor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvYWdlbnQvYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUJBQTJCO0FBQzNCLG1DQUFzQztBQUN0Qyw4Q0FBZ0Q7QUFFaEQsNkJBQStCO0FBQy9CLCtDQUFvRDtBQVdwRCxNQUFhLEtBQU0sU0FBUSxxQkFBWTtJQUlyQyxZQUFZLElBQWMsRUFBRSxHQUFXO1FBQ3JDLEtBQUssRUFBRSxDQUFDO1FBRlYsUUFBRyxHQUFXLGlCQUFPLENBQUM7UUFHcEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDM0I7YUFDSTtZQUNKLElBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxJQUFJLENBQUMsVUFBVSxvQkFBb0IsQ0FBQzthQUM5RDtpQkFDSTtnQkFDSixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQzthQUN6RjtTQUNEO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxD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