MCPcopy
hub / github.com/axios/axios / speedometer

Function speedometer

lib/helpers/speedometer.js:9–53  ·  view source on GitHub ↗

* Calculate data maxRate * @param {Number} [samplesCount= 10] * @param {Number} [min= 1000] * @returns {Function}

(samplesCount, min)

Source from the content-addressed store, hash-verified

7 * @returns {Function}
8 */
9function speedometer(samplesCount, min) {
10 samplesCount = samplesCount || 10;
11 const bytes = new Array(samplesCount);
12 const timestamps = new Array(samplesCount);
13 let head = 0;
14 let tail = 0;
15 let firstSampleTS;
16
17 min = min !== undefined ? min : 1000;
18
19 return function push(chunkLength) {
20 const now = Date.now();
21
22 const startedAt = timestamps[tail];
23
24 if (!firstSampleTS) {
25 firstSampleTS = now;
26 }
27
28 bytes[head] = chunkLength;
29 timestamps[head] = now;
30
31 let i = tail;
32 let bytesCount = 0;
33
34 while (i !== head) {
35 bytesCount += bytes[i++];
36 i = i % samplesCount;
37 }
38
39 head = (head + 1) % samplesCount;
40
41 if (head === tail) {
42 tail = (tail + 1) % samplesCount;
43 }
44
45 if (now - firstSampleTS < min) {
46 return;
47 }
48
49 const passed = startedAt && now - startedAt;
50
51 return passed ? Math.round((bytesCount * 1000) / passed) : undefined;
52 };
53}
54
55export default speedometer;

Callers 1

progressEventReducerFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected