From 11c95f885d680c86952de924ea78c4f4af6fa146 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Mon, 26 Jan 2026 03:19:33 +0000 Subject: [PATCH] bucket date --- .../src/Components/v2/monitors/MonitorStatBoxes.tsx | 2 +- .../v2/monitors/charts/HistogramDetails.tsx | 2 +- .../v2/monitors/charts/HistogramStatus.tsx | 12 ++++++------ client/src/Pages/Uptime/Details/index.tsx | 6 +++++- client/src/Pages/Uptime/Monitors/index.tsx | 8 ++++++-- client/src/Types/Check.ts | 2 +- .../src/repositories/checks/MongoChecksRepistory.ts | 3 +++ server/src/types/check.ts | 2 +- 8 files changed, 24 insertions(+), 13 deletions(-) diff --git a/client/src/Components/v2/monitors/MonitorStatBoxes.tsx b/client/src/Components/v2/monitors/MonitorStatBoxes.tsx index 4b3a49fe9..65be06f3b 100644 --- a/client/src/Components/v2/monitors/MonitorStatBoxes.tsx +++ b/client/src/Components/v2/monitors/MonitorStatBoxes.tsx @@ -28,7 +28,7 @@ export const MonitorStatBoxes = ({ const timeSinceLastFailure = timeOfLastFailure > 0 ? Date.now() - timeOfLastFailure - : Date.now() - new Date(monitorStats?.createdAt); + : Date.now() - new Date(monitorStats?.createdAt || 0).getTime(); // Determine time since last check const timeOfLastCheck = monitorStats?.lastCheckTimestamp || 0; diff --git a/client/src/Components/v2/monitors/charts/HistogramDetails.tsx b/client/src/Components/v2/monitors/charts/HistogramDetails.tsx index 63b81cb71..8858a9784 100644 --- a/client/src/Components/v2/monitors/charts/HistogramDetails.tsx +++ b/client/src/Components/v2/monitors/charts/HistogramDetails.tsx @@ -131,7 +131,7 @@ export const HistogramDetails = ({ ( { fontSize={11} fill={theme.palette.text.secondary} > - {formatDateWithTz(p1._id, dateFormat, uiTimezone)} + {formatDateWithTz(p1.bucketDate, dateFormat, uiTimezone)} { fontSize={11} fill={theme.palette.text.secondary} > - {formatDateWithTz(p2._id, dateFormat, uiTimezone)} + {formatDateWithTz(p2.bucketDate, dateFormat, uiTimezone)} ); @@ -78,8 +78,8 @@ export const HistogramStatus = ({ const titleText = t("common.charts.labels.averageResponseTime"); const fmt = range === "30d" ? "MMM D, YYYY" : "ddd, MMM D, YYYY, h:mm A"; let dateLabel = ""; - if (d?._id) { - const base = new Date(d._id); + if (d?.bucketDate) { + const base = new Date(d.bucketDate); const midBucket = range === "30d" ? new Date(base.getTime() + 12 * 60 * 60 * 1000) : base; dateLabel = formatDateWithTz(midBucket.toISOString(), fmt, uiTimezone); @@ -151,11 +151,11 @@ export const HistogramStatus = ({ maxBarSize={7} background={{ fill: "transparent" }} > - {checks?.map((groupedCheck) => { + {checks?.map((groupedCheck, index) => { const fillColor = getResponseTimeColor(groupedCheck.avgResponseTime); return ( ); diff --git a/client/src/Pages/Uptime/Details/index.tsx b/client/src/Pages/Uptime/Details/index.tsx index 85207e195..a148e38fa 100644 --- a/client/src/Pages/Uptime/Details/index.tsx +++ b/client/src/Pages/Uptime/Details/index.tsx @@ -53,7 +53,11 @@ const UptimeDetailsPage = () => { isLoading: monitorIsLoading, error: monitorError, refetch: refetchMonitor, - } = useGet(monitorDetailsUrl); + } = useGet( + monitorDetailsUrl, + {}, + { refreshInterval: 10000, keepPreviousData: true } + ); const monitorData = monitorDetailsData?.monitorData; const monitor = monitorData?.monitor; diff --git a/client/src/Pages/Uptime/Monitors/index.tsx b/client/src/Pages/Uptime/Monitors/index.tsx index 5b05817bb..e3e90429a 100644 --- a/client/src/Pages/Uptime/Monitors/index.tsx +++ b/client/src/Pages/Uptime/Monitors/index.tsx @@ -88,7 +88,11 @@ const UptimeMonitorsPage = () => { data: monitors, isLoading: monitorsLoading, error, - } = useGet("/monitors/team?type=http&type=ping&type=port&type=docker"); + } = useGet( + "/monitors/team?type=http&type=ping&type=port&type=docker", + {}, + { keepPreviousData: true } + ); const { data: monitorsWithChecksData, @@ -98,7 +102,7 @@ const UptimeMonitorsPage = () => { } = useGet( monitorsWithChecksUrl, {}, - { refreshInterval: 5000 } + { refreshInterval: 5000, keepPreviousData: true } ); const { monitors: monitorsWithChecks, summary, count } = monitorsWithChecksData ?? {}; diff --git a/client/src/Types/Check.ts b/client/src/Types/Check.ts index 4e4fcc03b..0aa953dbb 100644 --- a/client/src/Types/Check.ts +++ b/client/src/Types/Check.ts @@ -128,7 +128,7 @@ export interface Check { } export interface GroupedCheck { - _id: string; + bucketDate: string; avgResponseTime: number; totalChecks: number; } diff --git a/server/src/repositories/checks/MongoChecksRepistory.ts b/server/src/repositories/checks/MongoChecksRepistory.ts index b9cf2041f..0783c0040 100644 --- a/server/src/repositories/checks/MongoChecksRepistory.ts +++ b/server/src/repositories/checks/MongoChecksRepistory.ts @@ -483,6 +483,7 @@ class MongoChecksRepository implements IChecksRepository { }, }, { $sort: { _id: 1 } }, + { $project: { bucketDate: "$_id", avgResponseTime: 1, totalChecks: 1, _id: 0 } }, ], groupedUpChecks: [ { $match: { status: true } }, @@ -496,6 +497,7 @@ class MongoChecksRepository implements IChecksRepository { }, }, { $sort: { _id: 1 } }, + { $project: { bucketDate: "$_id", avgResponseTime: 1, totalChecks: 1, _id: 0 } }, ], groupedDownChecks: [ { $match: { status: false } }, @@ -509,6 +511,7 @@ class MongoChecksRepository implements IChecksRepository { }, }, { $sort: { _id: 1 } }, + { $project: { bucketDate: "$_id", avgResponseTime: 1, totalChecks: 1, _id: 0 } }, ], }, }, diff --git a/server/src/types/check.ts b/server/src/types/check.ts index 3195cc06a..ee40ff6dc 100644 --- a/server/src/types/check.ts +++ b/server/src/types/check.ts @@ -157,7 +157,7 @@ export interface HardwareChecksResult { } export interface GroupedCheck { - _id: string; + bucketDate: string; avgResponseTime: number; totalChecks: number; }