UNPKG

pinus-robot

Version:

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

113 lines 6.89 kB
"use strict"; 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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