Files
checkcle/application/src/components/servers/charts/hooks/useServerHistoryData.ts
T
2025-07-21 22:18:27 +07:00

49 lines
1.7 KiB
TypeScript

import { useState, useMemo } from "react";
import { useQuery } from "@tanstack/react-query";
import { serverService } from "@/services/serverService";
import { formatChartData } from "../dataUtils";
type TimeRange = '60m' | '1d' | '7d' | '1m' | '3m';
export const useServerHistoryData = (serverId: string) => {
const [timeRange, setTimeRange] = useState<TimeRange>("60m");
const {
data: metrics = [],
isLoading,
error,
isFetching
} = useQuery({
queryKey: ['server-metrics-history', serverId, timeRange],
queryFn: async () => {
// console.log('useServerHistoryData: Fetching metrics for serverId:', serverId, 'timeRange:', timeRange);
const result = await serverService.getServerMetrics(serverId, timeRange);
// console.log('useServerHistoryData: Raw metrics result for timeRange', timeRange, ':', result?.length || 0, 'records');
return result || [];
},
enabled: !!serverId,
refetchInterval: timeRange === '60m' ? 60000 : timeRange === '1d' ? 120000 : 300000, // Significantly increased intervals
staleTime: timeRange === '60m' ? 30000 : timeRange === '1d' ? 60000 : 120000, // Increased stale time
retry: 1, // Reduced retries to prevent excessive requests
retryDelay: 2000, // Slower retry
gcTime: 10 * 60 * 1000, // 10 minutes cache
refetchOnWindowFocus: false, // Prevent refetch on window focus
refetchOnMount: false, // Prevent refetch on mount if data exists
});
// Memoize chart data formatting to prevent unnecessary recalculations
const chartData = useMemo(() => {
return formatChartData(metrics, timeRange);
}, [metrics, timeRange]);
return {
timeRange,
setTimeRange,
metrics,
chartData,
isLoading,
error,
isFetching
};
};