diff --git a/www/common/outer/async-store.js b/www/common/outer/async-store.js index e5b19ca80..122fea929 100644 --- a/www/common/outer/async-store.js +++ b/www/common/outer/async-store.js @@ -789,7 +789,8 @@ define([ ownedPads.forEach(function (c) { var w = waitFor(); - sem.take(function (give) { + sem.take(function (_give) { + var give = _give(); var otherOwners = false; nThen(function (_w) { // Don't check server metadata for blobs diff --git a/www/loadtest/main.js b/www/loadtest/main.js index e2f909de8..d43bf9f20 100644 --- a/www/loadtest/main.js +++ b/www/loadtest/main.js @@ -29,7 +29,8 @@ define([ let Env = { users: {}, - channels: {} + channels: {}, + queries: 0 }; let startSendDataEvt = Util.mkEvent(true); @@ -153,7 +154,9 @@ define([ // * RPC commands? let setRandomInterval = f => { - let rdm = 300 + Math.floor(1000 * Math.random()); + let delay = (Env.delay - 300)*2; + let rdm = 300 + Math.floor(delay * Math.random()); + if (Env.stopPatch) { return; } setTimeout(function () { f(); setRandomInterval(f); @@ -183,7 +186,7 @@ define([ makeData(i, w()); }).nThen(w => { if (init) { return; } - let min = Math.max(0, 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 { - for (let i=0; i { + Env.queries++; + if (Env.maxQ && Env.queries >= Env.maxQ) { + Env.stopPatch = true; + $(buttonStopPatch).click(); + } + }; + let started = false; $(button).click(() => { if (started) { return; } spinner.spin(); started = true; $(button).remove(); - let users = Number($(input).val()); + let users = Env.numberUsers = Number($(input).val()); + Env.offset = Number($(inputOff).val()) || 0; + Env.delay = Number($(inputFreq).val()) || 800; + Env.maxQ = Number($(inputMax).val()) || 0; if (typeof(users) !== "number" || !users) { return void console.error('Not a valid number'); } $(buttonData).remove(); - start(users, () => { + start(() => { spinner.done(); UI.log('READY: you can now start sending patches'); $(buttonPatch).show(); }); }); + let qIt, fIt; $(buttonPatch).click(() => { startSendDataEvt.fire(); $(buttonPatch).remove(); + $(buttonStopPatch).show(); + Env.start = +new Date(); + 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); + $(time).text('Time: '+Math.floor(diffTime)+'s'); + }, 200); + }); + $(buttonStopPatch).click(() => { + Env.stopPatch = true; + clearInterval(qIt); + clearInterval(fIt); + $(buttonStopPatch).remove(); }); let startedData = false; $(buttonData).click(() => {