Implement metrics
This commit is contained in:
39
metrics/metrics.js
Normal file
39
metrics/metrics.js
Normal file
@@ -0,0 +1,39 @@
|
||||
const { CircularBuffer } = require("./circularBuffer");
|
||||
|
||||
class Metric {
|
||||
constructor(barName, multibar, bufferSize) {
|
||||
this.multibar = multibar;
|
||||
this.pbar = multibar.create(0, 0);
|
||||
this.pbar.update(0, { name: barName });
|
||||
this.buffer = new CircularBuffer(bufferSize);
|
||||
this.maxRate = 0;
|
||||
setInterval(this.UpdateBar.bind(this), 100);
|
||||
}
|
||||
|
||||
AddEvent() {
|
||||
const timestamp = Date.now();
|
||||
this.buffer.push({ timestamp, count: 1 });
|
||||
}
|
||||
|
||||
GetRate() {
|
||||
const entries = this.buffer.toArray();
|
||||
const currentTime = Date.now();
|
||||
|
||||
const interval = entries.length > 1 ? currentTime - entries[0].timestamp : 1;
|
||||
|
||||
const totalRX = entries.reduce((sum, entry) => sum + entry.count, 0);
|
||||
return Math.round((totalRX / interval) * 100000) / 100;
|
||||
}
|
||||
|
||||
UpdateBar() {
|
||||
const eps = this.GetRate();
|
||||
if (eps > this.maxRate) {
|
||||
this.pbar.total = eps;
|
||||
this.maxRate = eps;
|
||||
}
|
||||
this.pbar.update(eps);
|
||||
this.multibar.update();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { Metric };
|
Reference in New Issue
Block a user