import { useState } from "react"; import { useQuery } from "@tanstack/react-query"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { serverService } from "@/services/serverService"; import { Loader2, Cpu, HardDrive, Network, MemoryStick } from "lucide-react"; import { formatChartData } from "./charts/dataUtils"; import { TimeRangeSelector } from "./charts/TimeRangeSelector"; import { CPUChart } from "./charts/CPUChart"; import { MemoryChart } from "./charts/MemoryChart"; import { DiskChart } from "./charts/DiskChart"; import { NetworkChart } from "./charts/NetworkChart"; interface ServerMetricsChartsProps { serverId: string; } type TimeRange = '60m' | '1d' | '7d' | '1m' | '3m'; export const ServerMetricsCharts = ({ serverId }: ServerMetricsChartsProps) => { const [timeRange, setTimeRange] = useState("1d"); const { data: metrics = [], isLoading, error } = useQuery({ queryKey: ['server-metrics', serverId, timeRange], queryFn: () => serverService.getServerMetrics(serverId, timeRange), enabled: !!serverId, refetchInterval: timeRange === '60m' ? 60000 : timeRange === '1d' ? 120000 : 300000, // Increased intervals staleTime: timeRange === '60m' ? 30000 : timeRange === '1d' ? 60000 : 120000, // Increased stale time gcTime: 10 * 60 * 1000, // 10 minutes cache refetchOnWindowFocus: false, // Prevent refetch on window focus }); const chartData = formatChartData(metrics, timeRange); if (isLoading) { return (
Loading server metrics...
); } if (error) { return (

Error loading server metrics: {error.message}

); } if (chartData.length === 0) { return (

No server metrics data available for {timeRange}

); } // Calculate latest data for each chart const latestData = chartData[chartData.length - 1]; return (

Server Metrics

({chartData.length} data points • {timeRange})
CPU Memory Disk Network
); };