UNPKG

whistle

Version:

HTTP, HTTP2, HTTPS, Websocket debugging proxy

118 lines (115 loc) 3.89 kB
var now = Date.now(); var preData = { now: now, totalHttpRequests: 0, totalWsRequests: 0, totalTunnelRequests: 0, totalAllHttpRequests: 0, totalAllWsRequests: 0 }; var memUsage = process.memoryUsage(); var maxCpuElap = 0; var procData = { memUsage: memUsage, uptime: 0, cpuPercent: '0.0%', startupTime: now, updateTime: now, httpRequests: 0, allHttpRequests: 0, wsRequests: 0, allWsRequests: 0, tunnelRequests: 0, totalHttpRequests: 0, totalWsRequests: 0, totalTunnelRequests: 0, totalAllHttpRequests: 0, totalAllWsRequests: 0, httpQps: 0, tunnelQps: 0, wsQps: 0, totalQps: 0, maxQps: 0, maxAllQps: 0, maxRss: memUsage.rss, maxCpu: 0, maxQpsTime: now, maxAllQpsTime: now, maxRssTime: now, maxCpuTime: now }; var startTime = typeof process.hrtime === 'function' && process.hrtime(); var startUsage = typeof process.cpuUsage === 'function' && process.cpuUsage(); var proxy; function secNSec2ms(secNSec) { if (Array.isArray(secNSec)) { return secNSec[0] * 1000 + secNSec[1] / 1000000; } return secNSec / 1000; } if (startTime !== false && startUsage !== false) { setInterval(function () { var elapTime = process.hrtime(startTime); var elapUsage = process.cpuUsage(startUsage); startTime = process.hrtime(); startUsage = process.cpuUsage(); var elapTimeMS = secNSec2ms(elapTime) || 1; var elapUserMS = secNSec2ms(elapUsage.user); var elapSystMS = secNSec2ms(elapUsage.system); var cpuElap = (100 * (elapUserMS + elapSystMS)) / elapTimeMS; var curTime = Date.now(); procData.cpuPercent = cpuElap.toFixed(1) + '%'; procData.memUsage = process.memoryUsage(); procData.updateTime = curTime; if (cpuElap > maxCpuElap) { maxCpuElap = cpuElap; procData.maxCpu = cpuElap.toFixed(1) + '%'; procData.maxCpuTime = curTime; } if (procData.memUsage.rss > procData.maxRss) { procData.maxRss = procData.memUsage.rss; process.maxRssTime = curTime; } proxy && proxy.emit('perfDataChange', procData); }, 3000); setInterval(function () { var curTime = Date.now(); var costTime = curTime - preData.now || 1; var newHttpReqs = procData.totalHttpRequests - preData.totalHttpRequests; var newTunnelReqs = procData.totalTunnelRequests - preData.totalTunnelRequests; var newWsReqs = procData.totalWsRequests - preData.totalWsRequests; var newHttpUIReqs = procData.totalAllHttpRequests - preData.totalAllHttpRequests; var newWsUIReqs = procData.totalAllWsRequests - preData.totalAllWsRequests; preData.now = curTime; preData.totalHttpRequests = procData.totalHttpRequests; preData.totalTunnelRequests = procData.totalTunnelRequests; preData.totalWsRequests = procData.totalWsRequests; preData.totalAllHttpRequests = procData.totalAllHttpRequests; preData.totalAllWsRequests = procData.totalAllWsRequests; procData.uptime = curTime - now; procData.httpQps = Math.floor((newHttpReqs * 100000) / costTime); procData.tunnelQps = Math.floor((newTunnelReqs * 100000) / costTime); procData.wsQps = Math.floor((newWsReqs * 100000) / costTime); procData.allHttpQps = Math.floor((newHttpUIReqs * 100000) / costTime); procData.allWsQps = Math.floor((newWsUIReqs * 100000) / costTime); var totalQps = procData.httpQps + procData.tunnelQps + procData.wsQps; var totalAllQps = procData.allHttpQps + procData.allWsQps + procData.tunnelQps; procData.totalQps = totalQps; procData.totalAllQps = totalAllQps; if (procData.maxQps < totalQps) { procData.maxQps = totalQps; procData.maxQpsTime = curTime; } if (procData.maxAllQps < totalAllQps) { procData.maxAllQps = totalAllQps; procData.maxAllQpsTime = curTime; } }, 1000); } exports.procData = procData; exports.setProxy = function (p) { proxy = p; };