-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeasurement.js
53 lines (44 loc) · 1.35 KB
/
measurement.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function GetPingData(measurement) {
if (measurement.type !== 'ping') {
throw new Error('Measurement is not a ping measurement');
}
let pingData = {};
pingData.max = measurement.max;
pingData.min = measurement.min;
pingData.avg = measurement.avg;
}
function getAveragePing(measurements) {
let total = 0;
for (const measurement of measurements) {
total += measurement.avg;
}
return total / measurements.length;
}
function getNumberOfMeasurementsByPing(measurements, bucketSize) {
let buckets = {};
for (const measurement of measurements) {
let bucket = Math.floor(measurement.avg / bucketSize);
if (buckets[bucket] === undefined) {
buckets[bucket] = 0;
}
buckets[bucket]++;
}
return buckets;
}
function getMeanPing(measurements) {
let total = 0;
for (const bucket in measurements) {
total += bucket * measurements[bucket];
}
return total / measurements.length;
}
function getMedianPing(measurements) {
let sortedMeasurements = measurements.sort((a, b) => a.avg - b.avg);
let middle = Math.floor(sortedMeasurements.length / 2);
if (sortedMeasurements.length % 2) {
return sortedMeasurements[middle].avg;
}
else {
return (sortedMeasurements[middle - 1].avg + sortedMeasurements[middle].avg) / 2.0;
}
}