From f3ec84d36fd89fc2450fce7d8f2f7b3ec833f300 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 5 Nov 2024 14:09:32 +0800 Subject: [PATCH] Refactor for robustness --- Server/db/mongo/modules/monitorModule.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Server/db/mongo/modules/monitorModule.js b/Server/db/mongo/modules/monitorModule.js index 4d7bd7208..63236993a 100644 --- a/Server/db/mongo/modules/monitorModule.js +++ b/Server/db/mongo/modules/monitorModule.js @@ -211,10 +211,16 @@ const processChecksForDisplay = (normalizeData, checks, numToDisplay, normalize) */ const groupChecksByTime = (checks, dateRange) => { return checks.reduce((acc, check) => { + // Validate the date + const checkDate = new Date(check.createdAt); + if (isNaN(checkDate.getTime()) || checkDate.getTime() === 0) { + return acc; + } + const time = dateRange === "day" - ? new Date(check.createdAt).setMinutes(0, 0, 0) - : new Date(check.createdAt).toISOString().split("T")[0]; + ? checkDate.setMinutes(0, 0, 0) + : checkDate.toISOString().split("T")[0]; if (!acc[time]) { acc[time] = { time, checks: [] }; @@ -231,13 +237,21 @@ const groupChecksByTime = (checks, dateRange) => { */ const calculateGroupStats = (group) => { const totalChecks = group.checks.length; + + const checksWithResponseTime = group.checks.filter( + (check) => typeof check.responseTime === "number" && !isNaN(check.responseTime) + ); + return { time: group.time, uptimePercentage: getUptimePercentage(group.checks), totalChecks, totalIncidents: group.checks.filter((check) => !check.status).length, avgResponseTime: - group.checks.reduce((sum, check) => sum + check.responseTime, 0) / totalChecks, + checksWithResponseTime.length > 0 + ? checksWithResponseTime.reduce((sum, check) => sum + check.responseTime, 0) / + checksWithResponseTime.length + : 0, }; };