From 83dd6fa16c77a50e4b9bc6d354c865b492eafc3f Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 23 May 2024 11:57:46 +0200 Subject: [PATCH] Add response time to load testing results --- lib/workers/index.js | 11 ++++++++- www/loadtest/main.js | 53 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/lib/workers/index.js b/lib/workers/index.js index 6db3f8bbd..8294e8cc4 100644 --- a/lib/workers/index.js +++ b/lib/workers/index.js @@ -264,9 +264,10 @@ Workers.initialize = function (Env, config, _cb) { }; nThen(function (w) { - var limit = Env.maxWorkers; + var limit = Env.maxWorkers || OS.cpus().length; var logged; + /* OS.cpus().forEach(function (cpu, index) { if (limit && index >= limit) { if (!logged) { @@ -282,6 +283,14 @@ Workers.initialize = function (Env, config, _cb) { return void cb(err); })); }); + */ + for (let i = 0; i { if (init) { return; } + console.warn(i, me.secret.channel); let min = Math.max(Env.offset, i-5); // XXX 5 users per pad for (let j = min; j { + let now = +new Date(); + Env.lag.push((now - t)); + }, err => { + Env.errors++; + console.error(err); + }); }); }); }); @@ -291,8 +301,23 @@ define([ let queries = h('span'); let freq = h('span'); + let freqr = h('span'); let time = h('span'); - let res = h('div', [queries, h('br'), time, h('br'), freq]); + let lag = h('span'); + let errors = h('span'); + let res = h('div', [ + queries, + h('br'), + time, + h('br'), + freq, + h('br'), + freqr, + h('br'), + lag, + h('br'), + errors + ]); let button = h('button.btn.btn-primary', 'Start load testing'); let buttonPatch = h('button.btn.btn-primary', {style:'display:none;'}, 'Start sending patches'); @@ -323,7 +348,7 @@ define([ if (started) { return; } spinner.spin(); started = true; - $(button).remove(); + //$(button).remove(); let users = Env.numberUsers = Number($(input).val()); Env.offset = Number($(inputOff).val()) || 0; Env.delay = Number($(inputFreq).val()) || 800; @@ -334,25 +359,43 @@ define([ $(buttonData).remove(); start(() => { spinner.done(); + started = false; UI.log('READY: you can now start sending patches'); $(buttonPatch).show(); }); }); let qIt, fIt; + let last = {}; $(buttonPatch).click(() => { startSendDataEvt.fire(); $(buttonPatch).remove(); $(buttonStopPatch).show(); Env.start = +new Date(); + last.t = +new Date(); + last.q = 0; qIt = setInterval(() => { $(queries).text('Queries: '+Env.queries); let q = Env.queries; let now = +new Date(); let diffTime = (now-Env.start)/1000; let f = Math.floor(q/diffTime); - $(freq).text('Queries/s: '+f); + const average = Math.round((Env.lag.length && Env.lag.reduce((a, b) => a + b, 0) / Env.lag.length)) || 0; + + $(freq).text('Queries/s (all): '+f); $(time).text('Time: '+Math.floor(diffTime)+'s'); + $(lag).text('Avg response time: '+average+'ms'); + $(errors).text('Errors: '+Env.errors); + Env.lag = []; }, 200); + fIt = setInterval(() => { + let q = Env.queries; + let now = +new Date(); + let fr = Math.floor(1000*(Env.queries-last.q)/(now-last.t)); + + last.t = +new Date(); + last.q = q; + $(freqr).text('Queries/s (recent): '+fr); + }, 1000); }); $(buttonStopPatch).click(() => { Env.stopPatch = true;