ping.html: add mdev, limit

This commit is contained in:
ed 2025-01-31 19:16:44 +00:00
parent 7de9d15aef
commit 910797ccb6

View file

@ -55,6 +55,10 @@ input {
<td>interval (msec):</td> <td>interval (msec):</td>
<td><input id="delay" type="text" value="1000" size="7" /></td> <td><input id="delay" type="text" value="1000" size="7" /></td>
</tr> </tr>
<tr>
<td>num pings:</td>
<td><input id="more" type="text" value="100" size="7" /></td>
</tr>
<tr> <tr>
<td>&nbsp;</td> <td>&nbsp;</td>
<td><input id="start" type="button" value="start" onclick="okgo();return false" /></td> <td><input id="start" type="button" value="start" onclick="okgo();return false" /></td>
@ -65,14 +69,14 @@ input {
<td>avg</td> <td>avg</td>
<td>med</td> <td>med</td>
<td>max</td> <td>max</td>
<td>jitter</td> <td>mdev</td>
</tr> </tr>
<tr> <tr>
<td id="min">x</td> <td id="min">x</td>
<td id="avg">x</td> <td id="avg">x</td>
<td id="med">x</td> <td id="med">x</td>
<td id="max">x</td> <td id="max">x</td>
<td id="jit">x</td> <td id="mdv">x</td>
</tr> </tr>
</table> </table>
<div id="log"> <div id="log">
@ -92,11 +96,16 @@ var log = [],
srt = [], srt = [],
delay, delay,
t0 = -1, t0 = -1,
nbad = 0,
min = 9999999,
max = 0,
sum = 0,
sum2 = 0,
omin = ebi('min'), omin = ebi('min'),
omax = ebi('max'), omax = ebi('max'),
oavg = ebi('avg'), oavg = ebi('avg'),
omed = ebi('med'), omed = ebi('med'),
ojit = ebi('jit'), omdv = ebi('mdv'),
olog = ebi('log'); olog = ebi('log');
function insert(t, v) { function insert(t, v) {
@ -110,12 +119,24 @@ function insert(t, v) {
} }
t.splice(lo, 0, v); t.splice(lo, 0, v);
} }
function f2f(val, nd) {
val = (parseFloat(val) * Math.pow(10, nd)).toFixed(0).split('.')[0];
return nd ? (val.slice(0, -nd) || '0') + '.' + val.slice(-nd) : val;
}
function okgo() { function okgo() {
if (t0 < 0) if (t0 < 0)
ping(); ping();
} }
function ping() { function ping() {
var xh, var xh,
more = parseInt(ebi('more').value) - 1,
stats = [omin.innerHTML, omed.innerHTML, omax.innerHTML, omdv.innerHTML];
if (more < 0)
return;
if (more > 499)
more = 499;
delay = parseInt(ebi('delay').value); delay = parseInt(ebi('delay').value);
if (delay < 100) if (delay < 100)
@ -138,40 +159,39 @@ function ping() {
ok = rsp.indexOf('o7') === 0; ok = rsp.indexOf('o7') === 0;
if (!ok) if (!ok)
alert("ping response invalid or corrupted: " + xh.resp); nbad++;
sum += t;
sum2 += t * t;
log.push(t); log.push(t);
insert(srt, t); insert(srt, t);
var min = 9999999, if (min > t)
avg = 0, min = t;
max = 0;
for (var a=0; a<log.length; a++) { if (max < t)
min = Math.min(min, log[a]); max = t;
max = Math.max(max, log[a]);
avg += log[a]; var avg = sum / log.length,
} smean = sum2 / log.length,
avg /= log.length; med = srt[Math.floor(srt.length/2)],
var med = srt[Math.floor(srt.length/2)], mdev = Math.sqrt(smean-(avg*avg));
jofs = Math.floor((5*srt.length)/6),
jit = '?';
if (jofs < srt.length) {
jit = srt[jofs] - med;
jit = Math.round((jit / med) * 100) + '%';
}
omin.innerHTML = min; omin.innerHTML = min;
omax.innerHTML = max; omax.innerHTML = max;
oavg.innerHTML = Math.round(avg); oavg.innerHTML = Math.round(avg);
omed.innerHTML = med; omed.innerHTML = med;
olog.innerHTML = log.join(', ') + '<br /><br />' + srt.join(', '); omdv.innerHTML = f2f(mdev, 2);
olog.innerHTML = log.join(', ') + '<br /><br />' + srt.join(', ') + (
nbad ? "<br /><br />invalid/corrupted ping responses: " + nbad : '');
setTimeout(ping, delay); setTimeout(ping, delay);
}; };
t0 = new Date().getTime(); t0 = new Date().getTime();
stats.push(t0); stats.push(t0);
xh.open("GET", "/?setck=a=x&ping="+stats.join(","), true); xh.open("GET", "/?setck=a=x&ping="+stats.join(","), true);
xh.send(); xh.send();
ebi('more').value = more;
olog.innerHTML += '<br /><br />ping...'; olog.innerHTML += '<br /><br />ping...';
} }
</script> </script>