import { Server } from '@/types/server'; import { useQuery } from '@tanstack/react-query'; import { Metric, MetricsFilter } from '@/types/metric'; import { ResourceUsageChart } from '@/pages/monitoring/components/resource-usage-chart'; import { kbToGb, mbToGb } from '@/lib/utils'; import { Skeleton } from '@/components/ui/skeleton'; export default function MetricsCards({ server, filter, metric }: { server: Server; filter?: MetricsFilter; metric?: string }) { if (!filter) { filter = { period: '10m', }; } const query = useQuery({ queryKey: ['metrics', server.id, filter.period, filter.from, filter.to], queryFn: async () => { const response = await fetch(route('monitoring.json', { server: server.id, ...filter })); if (!response.ok) { throw new Error('Failed to fetch metrics'); } return response.json(); }, refetchInterval: 60000, retry: false, }); return (
{query.isLoading && ( <> {metric ? ( ) : ( <> )} )} {query.data && ( <> {(!metric || metric === 'load') && ( )} {(!metric || metric === 'memory') && ( { return `${kbToGb(value as string)} GB`; }} single={metric !== undefined} /> )} {(!metric || metric === 'disk') && ( { return `${mbToGb(value as string)} GB`; }} single={metric !== undefined} /> )} )}
); }