import { useMemo } from "react"; import { Group, Stack, Text, UnstyledButton } from "@mantine/core"; import { useLingui } from "@lingui/react/macro"; import { useNavigate } from "@tanstack/react-router"; import { useClientErrorGroups, useRollupRange, useTelemetryRuntimeStatus, } from "@/features/telemetry/queries"; import { isoDay, lastNDays } from "@/features/telemetry/range"; interface StatProps { value: string | number; label: string; alert?: boolean; onClick: () => void; } const Stat = ({ value, label, alert, onClick }: StatProps) => ( {value} {label} ); export const StatusStrip = () => { const { t } = useLingui(); const navigate = useNavigate(); const today = useMemo(() => isoDay(new Date()), []); const month = useMemo(() => lastNDays(30), []); const { data: status } = useTelemetryRuntimeStatus(); const { data: errorGroups } = useClientErrorGroups({ from: month.from, to: month.to }); const { data: rollups } = useRollupRange({ metrics: ["server_fn.count"], from: today, to: today, }); const callsToday = useMemo( () => (rollups ?? []).reduce((sum, row) => sum + row.value, 0), [rollups] ); const openErrors = errorGroups?.length ?? 0; return ( navigate({ to: "/admin/telemetry/players" })} /> 0} onClick={() => navigate({ to: "/admin/telemetry/errors" })} /> navigate({ to: "/admin/telemetry/usage" })} /> ); }; export default StatusStrip;