UNPKG

pinus-robot

Version:

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

164 lines 14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Server = void 0; const __ = require("underscore"); const _nodeclient = require("./nodeclient.js"); const _wc = require("./webclient.js"); const logging_1 = require("../common/logging"); const stat = require("../monitor/stat"); const starter = require("./starter"); const io = require('socket.io'); let STATUS_INTERVAL = 60 * 1000; // 60 seconds let HEARTBEAT_INTERVAL = 30 * 1000; // 30 seconds let STATUS_IDLE = 0; let STATUS_READY = 1; let STATUS_RUNNING = 2; let STATUS_DISCONN = 3; /** * * robot master instance * * @param {Object} conf * * conf.main client run file */ class Server { constructor(conf) { this.nodes = {}; this.web_clients = {}; this.runconfig = { maxuser: 1, agent: 1 }; this.status = STATUS_RUNNING; this.log = logging_1.logging; this.conf = conf || {}; setInterval(() => { this.log.info('Nodes: ' + __(this.nodes).size() + ', ' + 'WebClients: ' + __(this.web_clients).size()); }, STATUS_INTERVAL); } listen(port) { const server = require('http').createServer(); this.io = io(server); server.listen(port); this.register(); } // Registers new Node with Server, announces to WebClients announce_node(socket, message) { let rserver = this, nodeId = message.nodeId; if (!!rserver.nodes[nodeId]) { this.log.warn('Warning: Node \'' + nodeId + '\' already exists, delete old items '); socket.emit('node_already_exists'); delete rserver.nodes[nodeId]; } else { this.log.warn('reg: Node \'' + nodeId + '\' '); } let node = new _nodeclient.NodeClient(nodeId, socket, this); rserver.nodes[nodeId] = node; __(rserver.web_clients).each(function (web_client) { web_client.add_node(node); }); socket.on('disconnect', function () { delete rserver.nodes[nodeId]; __(rserver.web_clients).each(function (web_client) { web_client.remove_node(node); }); if (__.size(rserver.nodes) <= 0) { rserver.status = STATUS_IDLE; } stat.clear(nodeId); }); socket.on('report', function (message) { stat.merge(nodeId, message); }); /* temporary code */ socket.on('error', function (message) { __(rserver.web_clients).each(function (web_client) { web_client.error_node(node, message); }); }); socket.on('crash', function (message) { __(rserver.web_clients).each(function (web_client) { web_client.error_node(node, message); }); rserver.status = STATUS_READY; }); /* temporary code */ } // Registers new WebClient with Server announce_web_client(socket) { let rserver = this; let web_client = new _wc.WebClient(socket, rserver); rserver.web_clients[web_client.id] = web_client; __(rserver.nodes).each(function (node, nlabel) { web_client.add_node(node); }); setInterval(function () { rserver.io.sockets.in('web_clients').emit('statusreport', { status: rserver.status }); }, STATUS_INTERVAL / 10); socket.on('webreport', function (message) { if (rserver.status === STATUS_RUNNING) { socket.emit('webreport', rserver.runconfig.agent, rserver.runconfig.maxuser, stat.getTimeData(), stat.getCountData()); } }); socket.on('detailreport', function (message) { if (rserver.status === STATUS_RUNNING) { socket.emit('detailreport', stat.getDetails()); } }); socket.on('disconnect', function () { delete rserver.web_clients[web_client.id]; }); } // Register announcement, disconnect callbacks register() { let rserver = this; // rserver.io.set('log level', 1); rserver.io.sockets.on('connection', function (socket) { socket.on('announce_node', function (message) { rserver.log.info('Registering new node ' + JSON.stringify(message)); rserver.announce_node(socket, message); }); socket.on('announce_web_client', function (message) { rserver.log.info('Registering new web_client'); rserver.announce_web_client(socket); socket.on('run', function (msg) { stat.clear(); msg.agent = __.size(rserver.nodes); console.log('server begin notify client to run machine...'); rserver.runconfig = msg; let i = 0; __.each(rserver.nodes, function (ele) { // console.log(i++); msg.index = i++; ele.socket.emit('run', msg); }); // rserver.io.sockets.in('nodes').emit('run',msg); rserver.status = STATUS_RUNNING; return; }); socket.on('ready', function (msg) { console.log('server begin ready client ...'); rserver.io.sockets.in('nodes').emit('disconnect', {}); stat.clear(); rserver.status = STATUS_READY; rserver.runconfig = msg; starter.run(rserver.conf.mainFile, msg, rserver.conf.clients); return; }); socket.on('exit4reready', function () { __.each(rserver.nodes, function (obj) { obj.socket.emit('exit4reready'); }); rserver.nodes = {}; return; }); }); }); // Broadcast heartbeat to all clients setInterval(function () { rserver.io.sockets.emit('heartbeat'); }, HEARTBEAT_INTERVAL); } } exports.Server = Server; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL21hc3Rlci9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBQ2pDLCtDQUFnRDtBQUNoRCxzQ0FBdUM7QUFDdkMsK0NBQW9EO0FBQ3BELHdDQUF5QztBQUN6QyxxQ0FBc0M7QUFDdEMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWhDLElBQUksZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0FBQzlDLElBQUksa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGFBQWE7QUFDakQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNyQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBVXZCOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLE1BQU07SUFRZixZQUFZLElBQWU7UUFOM0IsVUFBSyxHQUEyQixFQUFFLENBQUM7UUFDbkMsZ0JBQVcsR0FBc0MsRUFBRSxDQUFDO1FBRXBELGNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JDLFdBQU0sR0FBVyxjQUFjLENBQUM7UUFHNUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBTyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQWUsQ0FBQztRQUNwQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSTtnQkFDbEQsY0FBYyxHQUFHLEVBQUUsQ0FBQyxJ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