import Stack from "@mui/material/Stack"; import { StatBox } from "@/Components/design-elements"; import prettyMilliseconds from "pretty-ms"; import { useTheme } from "@mui/material/styles"; import type { MonitorStats, Monitor } from "@/Types/Monitor"; import { getStatusPalette } from "@/Utils/MonitorUtils"; import { useTranslation } from "react-i18next"; import { formatMs } from "@/Utils/TimeUtils"; interface MonitorStatBoxesProps { monitor?: Monitor; monitorStats: MonitorStats | null; certificateExpiry?: string; } export const MonitorStatBoxes = ({ monitor, monitorStats, certificateExpiry, }: MonitorStatBoxesProps) => { const theme = useTheme(); const { t } = useTranslation(); if (!monitorStats || !monitor) { return null; } const timeOfLastFailure = monitorStats?.timeOfLastFailure || 0; const timeSinceLastFailure = timeOfLastFailure > 0 ? Date.now() - timeOfLastFailure : 0; // Determine time since last check const timeOfLastCheck = monitorStats?.lastCheckTimestamp || 0; const timeSinceLastCheck = Date.now() - timeOfLastCheck || 0; const options = { secondsDecimalDigits: 0, millisecondsDecimalDigits: 0, }; const streakTime = prettyMilliseconds(timeSinceLastFailure, options); const lastCheckTime = prettyMilliseconds(timeSinceLastCheck, options); const isActive = monitor?.status === "up" || monitor?.status === "paused" || monitor?.status === "maintenance" || monitor?.status === "initializing" || monitor?.status === "breached"; const palette = getStatusPalette(monitor?.status); return ( {monitor?.type === "http" && ( )} ); };