Add response time to load testing results

This commit is contained in:
yflory 2024-05-23 11:57:46 +02:00
parent a8e03cef9d
commit 83dd6fa16c
2 changed files with 58 additions and 6 deletions

View file

@ -264,9 +264,10 @@ Workers.initialize = function (Env, config, _cb) {
}; };
nThen(function (w) { nThen(function (w) {
var limit = Env.maxWorkers; var limit = Env.maxWorkers || OS.cpus().length;
var logged; var logged;
/*
OS.cpus().forEach(function (cpu, index) { OS.cpus().forEach(function (cpu, index) {
if (limit && index >= limit) { if (limit && index >= limit) {
if (!logged) { if (!logged) {
@ -282,6 +283,14 @@ Workers.initialize = function (Env, config, _cb) {
return void cb(err); return void cb(err);
})); }));
}); });
*/
for (let i = 0; i<limit; i++) {
initWorker(fork(DB_PATH), w(function (err) {
if (!err) { return; }
w.abort();
return void cb(err);
}));
}
}).nThen(function () { }).nThen(function () {
Env.computeIndex = function (Env, channel, cb) { Env.computeIndex = function (Env, channel, cb) {
Env.store.getWeakLock(channel, function (next) { Env.store.getWeakLock(channel, function (next) {

View file

@ -30,7 +30,9 @@ define([
let Env = { let Env = {
users: {}, users: {},
channels: {}, channels: {},
queries: 0 queries: 0,
lag: [],
errors: 0
}; };
let startSendDataEvt = Util.mkEvent(true); let startSendDataEvt = Util.mkEvent(true);
@ -186,6 +188,7 @@ define([
makeData(i, w()); makeData(i, w());
}).nThen(w => { }).nThen(w => {
if (init) { return; } if (init) { return; }
console.warn(i, me.secret.channel);
let min = Math.max(Env.offset, i-5); // XXX 5 users per pad let min = Math.max(Env.offset, i-5); // XXX 5 users per pad
for (let j = min; j<i; j++) { for (let j = min; j<i; j++) {
myPads.push(j); myPads.push(j);
@ -208,7 +211,14 @@ define([
console.log('Send patch', channel, i%50); console.log('Send patch', channel, i%50);
chanObj.total = i+1; chanObj.total = i+1;
Env.incQueries(); Env.incQueries();
wc.bcast(m); let t = +new Date();
wc.bcast(m).then(() => {
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 queries = h('span');
let freq = h('span'); let freq = h('span');
let freqr = h('span');
let time = 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 button = h('button.btn.btn-primary', 'Start load testing');
let buttonPatch = h('button.btn.btn-primary', {style:'display:none;'}, 'Start sending patches'); let buttonPatch = h('button.btn.btn-primary', {style:'display:none;'}, 'Start sending patches');
@ -323,7 +348,7 @@ define([
if (started) { return; } if (started) { return; }
spinner.spin(); spinner.spin();
started = true; started = true;
$(button).remove(); //$(button).remove();
let users = Env.numberUsers = Number($(input).val()); let users = Env.numberUsers = Number($(input).val());
Env.offset = Number($(inputOff).val()) || 0; Env.offset = Number($(inputOff).val()) || 0;
Env.delay = Number($(inputFreq).val()) || 800; Env.delay = Number($(inputFreq).val()) || 800;
@ -334,25 +359,43 @@ define([
$(buttonData).remove(); $(buttonData).remove();
start(() => { start(() => {
spinner.done(); spinner.done();
started = false;
UI.log('READY: you can now start sending patches'); UI.log('READY: you can now start sending patches');
$(buttonPatch).show(); $(buttonPatch).show();
}); });
}); });
let qIt, fIt; let qIt, fIt;
let last = {};
$(buttonPatch).click(() => { $(buttonPatch).click(() => {
startSendDataEvt.fire(); startSendDataEvt.fire();
$(buttonPatch).remove(); $(buttonPatch).remove();
$(buttonStopPatch).show(); $(buttonStopPatch).show();
Env.start = +new Date(); Env.start = +new Date();
last.t = +new Date();
last.q = 0;
qIt = setInterval(() => { qIt = setInterval(() => {
$(queries).text('Queries: '+Env.queries); $(queries).text('Queries: '+Env.queries);
let q = Env.queries; let q = Env.queries;
let now = +new Date(); let now = +new Date();
let diffTime = (now-Env.start)/1000; let diffTime = (now-Env.start)/1000;
let f = Math.floor(q/diffTime); 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'); $(time).text('Time: '+Math.floor(diffTime)+'s');
$(lag).text('Avg response time: '+average+'ms');
$(errors).text('Errors: '+Env.errors);
Env.lag = [];
}, 200); }, 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(() => { $(buttonStopPatch).click(() => {
Env.stopPatch = true; Env.stopPatch = true;