Fixed the processing to be done in backend now.
This commit is contained in:
1 parent
765a1a24ed
commit
f5d0b74ccf
5 files changed
+144
-80
No files matched your search
@@ -326,10 +326,53 @@ class MonitorModule {
|
||||
}
|
||||
};
|
||||
|
||||
processNetworkRates = (checks) => {
|
||||
if (!Array.isArray(checks) || checks.length === 0) return [];
|
||||
|
||||
const sorted = [...checks].sort((a, b) => new Date(a._id) - new Date(b._id));
|
||||
const lastSeen = {};
|
||||
|
||||
for (const check of sorted) {
|
||||
if (!Array.isArray(check.net)) {
|
||||
check.net = [];
|
||||
continue;
|
||||
}
|
||||
|
||||
const newNet = [];
|
||||
|
||||
for (const iface of check.net) {
|
||||
const prev = lastSeen[iface.name];
|
||||
const t1 = new Date(check._id);
|
||||
|
||||
if (prev) {
|
||||
const t0 = new Date(prev._id);
|
||||
const dt = (t1 - t0) / 1000;
|
||||
|
||||
if (dt > 0) {
|
||||
newNet.push({
|
||||
name: iface.name,
|
||||
avgBytesRecv: (iface.avgBytesRecv - prev.avgBytesRecv),
|
||||
avgPacketsRecv: (iface.avgPacketsRecv - prev.avgPacketsRecv),
|
||||
avgErrOut: iface.avgErrOut - prev.avgErrOut,
|
||||
avgDropOut: iface.avgDropOut,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
lastSeen[iface.name] = { ...iface, _id: check._id };
|
||||
}
|
||||
|
||||
check.net = newNet;
|
||||
}
|
||||
|
||||
return sorted;
|
||||
};
|
||||
|
||||
getHardwareDetailsById = async ({ monitorId, dateRange }) => {
|
||||
try {
|
||||
const monitor = await this.Monitor.findById(monitorId);
|
||||
const dates = this.getDateRange(dateRange);
|
||||
|
||||
const formatLookup = {
|
||||
recent: "%Y-%m-%dT%H:%M:00Z",
|
||||
day: "%Y-%m-%dT%H:00:00Z",
|
||||
@@ -337,13 +380,19 @@ class MonitorModule {
|
||||
month: "%Y-%m-%dT00:00:00Z",
|
||||
};
|
||||
const dateString = formatLookup[dateRange];
|
||||
|
||||
const hardwareStats = await this.HardwareCheck.aggregate(buildHardwareDetailsPipeline(monitor, dates, dateString));
|
||||
|
||||
const monitorStats = {
|
||||
const stats = hardwareStats[0];
|
||||
if (stats && stats.checks) {
|
||||
// Replace net with per-second rates
|
||||
stats.checks = this.processNetworkRates(stats.checks);
|
||||
}
|
||||
|
||||
return {
|
||||
...monitor.toObject(),
|
||||
stats: hardwareStats[0],
|
||||
stats,
|
||||
};
|
||||
return monitorStats;
|
||||
} catch (error) {
|
||||
error.service = SERVICE_NAME;
|
||||
error.method = "getHardwareDetailsById";
|
||||
|
||||
Reference in new issue
Block a user