Fixed the processing to be done in backend now.

This commit is contained in:
Owaise committed 2025-08-09 12:14:25 +05:30
1 parent 765a1a24ed
commit f5d0b74ccf
5 files changed
+144 -80

No files matched your search

+52 -3
View File
@@ -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";