From 32a7bd6543b4b72f8b5b7038a601fbb1fa4f70d3 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Sat, 14 Feb 2026 22:57:27 +0000 Subject: [PATCH] add breached status to summary header --- .../Components/v2/design-elements/StatusBox.tsx | 11 +++++++++++ .../v2/monitors/HeaderMonitorsSummary.tsx | 2 ++ client/src/Types/Monitor.ts | 1 + .../monitors/MongoMonitorsRepository.ts | 17 ++++++++++++++++- server/src/types/monitor.ts | 1 + 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/client/src/Components/v2/design-elements/StatusBox.tsx b/client/src/Components/v2/design-elements/StatusBox.tsx index 1be76988b..73a881736 100644 --- a/client/src/Components/v2/design-elements/StatusBox.tsx +++ b/client/src/Components/v2/design-elements/StatusBox.tsx @@ -139,6 +139,17 @@ export const InitializingStatusBox = ({ n }: { n: number }) => { /> ); }; +export const BreachedStatusBox = ({ n }: { n: number }) => { + const theme = useTheme(); + const { t } = useTranslation(); + return ( + + ); +}; export const TotalChecksBox = ({ n }: { n: number }) => { const theme = useTheme(); diff --git a/client/src/Components/v2/monitors/HeaderMonitorsSummary.tsx b/client/src/Components/v2/monitors/HeaderMonitorsSummary.tsx index b2a93a807..49a4fd471 100644 --- a/client/src/Components/v2/monitors/HeaderMonitorsSummary.tsx +++ b/client/src/Components/v2/monitors/HeaderMonitorsSummary.tsx @@ -3,6 +3,7 @@ import { DownStatusBox, PausedStatusBox, InitializingStatusBox, + BreachedStatusBox, } from "@/Components/v2/design-elements"; import Stack from "@mui/material/Stack"; @@ -22,6 +23,7 @@ export const HeaderMonitorsSummary = ({ summary }: MonitorsSummaryProps) => { > + diff --git a/client/src/Types/Monitor.ts b/client/src/Types/Monitor.ts index cf637c184..043076704 100644 --- a/client/src/Types/Monitor.ts +++ b/client/src/Types/Monitor.ts @@ -72,6 +72,7 @@ export interface MonitorsSummary { pausedMonitors: number; initializingMonitors: number; maintenanceMonitors: number; + breachedMonitors: number; } export interface MonitorsWithChecksResponse { diff --git a/server/src/repositories/monitors/MongoMonitorsRepository.ts b/server/src/repositories/monitors/MongoMonitorsRepository.ts index c942d749a..c6f3266a6 100644 --- a/server/src/repositories/monitors/MongoMonitorsRepository.ts +++ b/server/src/repositories/monitors/MongoMonitorsRepository.ts @@ -252,13 +252,28 @@ class MongoMonitorsRepository implements IMonitorsRepository { $cond: [{ $eq: ["$status", "maintenance"] }, 1, 0], }, }, + breachedMonitors: { + $sum: { + $cond: [{ $eq: ["$status", "breached"] }, 1, 0], + }, + }, }, }, { $project: { _id: 0 } }, ]; const [summary] = await MonitorModel.aggregate(pipeline); - return summary ?? { totalMonitors: 0, upMonitors: 0, downMonitors: 0, pausedMonitors: 0, initializingMonitors: 0, maintenanceMonitors: 0 }; + return ( + summary ?? { + totalMonitors: 0, + upMonitors: 0, + downMonitors: 0, + pausedMonitors: 0, + initializingMonitors: 0, + maintenanceMonitors: 0, + breachedMonitors: 0, + } + ); }; findGroupsByTeamId = async (teamId: string): Promise => { diff --git a/server/src/types/monitor.ts b/server/src/types/monitor.ts index 021172c3f..a196aaae6 100644 --- a/server/src/types/monitor.ts +++ b/server/src/types/monitor.ts @@ -55,6 +55,7 @@ export interface MonitorsSummary { pausedMonitors: number; initializingMonitors: number; maintenanceMonitors: number; + breachedMonitors: number; } export interface MonitorsWithChecksByTeamIdResult {