summaryrefslogtreecommitdiff
path: root/includes/external/signal/node_modules/axios/lib/helpers/speedometer.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/signal/node_modules/axios/lib/helpers/speedometer.js')
-rw-r--r--includes/external/signal/node_modules/axios/lib/helpers/speedometer.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/includes/external/signal/node_modules/axios/lib/helpers/speedometer.js b/includes/external/signal/node_modules/axios/lib/helpers/speedometer.js
new file mode 100644
index 0000000..3b3c666
--- /dev/null
+++ b/includes/external/signal/node_modules/axios/lib/helpers/speedometer.js
@@ -0,0 +1,55 @@
+'use strict';
+
+/**
+ * Calculate data maxRate
+ * @param {Number} [samplesCount= 10]
+ * @param {Number} [min= 1000]
+ * @returns {Function}
+ */
+function speedometer(samplesCount, min) {
+ samplesCount = samplesCount || 10;
+ const bytes = new Array(samplesCount);
+ const timestamps = new Array(samplesCount);
+ let head = 0;
+ let tail = 0;
+ let firstSampleTS;
+
+ min = min !== undefined ? min : 1000;
+
+ return function push(chunkLength) {
+ const now = Date.now();
+
+ const startedAt = timestamps[tail];
+
+ if (!firstSampleTS) {
+ firstSampleTS = now;
+ }
+
+ bytes[head] = chunkLength;
+ timestamps[head] = now;
+
+ let i = tail;
+ let bytesCount = 0;
+
+ while (i !== head) {
+ bytesCount += bytes[i++];
+ i = i % samplesCount;
+ }
+
+ head = (head + 1) % samplesCount;
+
+ if (head === tail) {
+ tail = (tail + 1) % samplesCount;
+ }
+
+ if (now - firstSampleTS < min) {
+ return;
+ }
+
+ const passed = startedAt && now - startedAt;
+
+ return passed ? Math.round(bytesCount * 1000 / passed) : undefined;
+ };
+}
+
+export default speedometer;