diff --git a/src/app/monitoring/page.tsx b/src/app/monitoring/page.tsx index 5a86310..13f1e69 100644 --- a/src/app/monitoring/page.tsx +++ b/src/app/monitoring/page.tsx @@ -29,20 +29,13 @@ const networkChartConfig = { } satisfies ChartConfig; export default function MonitoringPage() { - const [data, setData] = useState< - { time: string; cpu: number; memory: number; in: number; out: number }[] - >([]); const isMobile = useIsMobile(); - const [liveData, setLiveData] = useState<{ - cpuUsage: number; - ramUsage: number; - }>(); - const [containerStats, setContainerStats] = useState< - (SimpleStats & { name: string })[] - >([]); + + // Metrics polling every 30 seconds + const { value: metrics } = useAsyncInterval([], getMetrics, 30000, []); // Live nodes polling every 3 seconds - const { value: liveNodes } = useAsyncInterval( + const { value: liveData } = useAsyncInterval( { cpuUsage: 0, ramUsage: 0 }, async () => { const nodes = await getLiveNodes(); @@ -55,27 +48,9 @@ export default function MonitoringPage() { [] ); - // Update liveData state - useEffect(() => { - setLiveData(liveNodes); - }, [liveNodes]); - - // Metrics polling every 30 seconds - const { value: metrics } = useAsyncInterval( - [] as typeof data, - getMetrics, - 30000, - [] - ); - - // Update data state - useEffect(() => { - setData(metrics); - }, [metrics]); - - // Container stats fetched once - const { value: containers } = useAsync( - [] as typeof containerStats, + // Container stats + const { value: containerStats } = useAsync( + [], async () => { const nodes = await getNodes(); const dockerNodes = await getDocker(nodes); @@ -95,10 +70,6 @@ export default function MonitoringPage() { [] ); - useEffect(() => { - setContainerStats(containers); - }, [containers]); - return ( @@ -185,7 +156,7 @@ export default function MonitoringPage() {
diff --git a/src/hooks/use-async.ts b/src/hooks/use-async.ts index 65ac907..260b37c 100644 --- a/src/hooks/use-async.ts +++ b/src/hooks/use-async.ts @@ -44,7 +44,7 @@ export function useAsyncInterval( useEffect(() => { let isMounted = true; - const iid = setInterval(() => { + const run = () => { setLoading(true); asyncFunction() .then((result) => { @@ -56,7 +56,11 @@ export function useAsyncInterval( .finally(() => { if (isMounted) setLoading(false); }); - }, interval); + }; + + const iid = setInterval(run, interval); + + run(); return () => { isMounted = false;