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 {