Small fix in monitoring and useAsync

This commit is contained in:
2026-01-03 04:06:31 +01:00
parent 6914b97faf
commit 5e84c05bc7
2 changed files with 16 additions and 41 deletions
+10 -39
View File
@@ -29,20 +29,13 @@ const networkChartConfig = {
} satisfies ChartConfig; } satisfies ChartConfig;
export default function MonitoringPage() { export default function MonitoringPage() {
const [data, setData] = useState<
{ time: string; cpu: number; memory: number; in: number; out: number }[]
>([]);
const isMobile = useIsMobile(); const isMobile = useIsMobile();
const [liveData, setLiveData] = useState<{
cpuUsage: number; // Metrics polling every 30 seconds
ramUsage: number; const { value: metrics } = useAsyncInterval([], getMetrics, 30000, []);
}>();
const [containerStats, setContainerStats] = useState<
(SimpleStats & { name: string })[]
>([]);
// Live nodes polling every 3 seconds // Live nodes polling every 3 seconds
const { value: liveNodes } = useAsyncInterval( const { value: liveData } = useAsyncInterval(
{ cpuUsage: 0, ramUsage: 0 }, { cpuUsage: 0, ramUsage: 0 },
async () => { async () => {
const nodes = await getLiveNodes(); const nodes = await getLiveNodes();
@@ -55,27 +48,9 @@ export default function MonitoringPage() {
[] []
); );
// Update liveData state // Container stats
useEffect(() => { const { value: containerStats } = useAsync(
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,
async () => { async () => {
const nodes = await getNodes(); const nodes = await getNodes();
const dockerNodes = await getDocker(nodes); const dockerNodes = await getDocker(nodes);
@@ -95,10 +70,6 @@ export default function MonitoringPage() {
[] []
); );
useEffect(() => {
setContainerStats(containers);
}, [containers]);
return ( return (
<DashboardLayout <DashboardLayout
title="Monitoring" title="Monitoring"
@@ -169,13 +140,13 @@ export default function MonitoringPage() {
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-6"> <div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-6">
<GradientAreaChart <GradientAreaChart
title="CPU Usage" title="CPU Usage"
data={data} data={metrics}
config={cpuChartConfig} config={cpuChartConfig}
max={100} max={100}
/> />
<GradientAreaChart <GradientAreaChart
title="Memory Usage" title="Memory Usage"
data={data} data={metrics}
config={memoryChartConfig} config={memoryChartConfig}
max={100} max={100}
/> />
@@ -185,7 +156,7 @@ export default function MonitoringPage() {
<div className="mb-6"> <div className="mb-6">
<GradientAreaChart <GradientAreaChart
title="Network I/O" title="Network I/O"
data={data} data={metrics}
config={networkChartConfig} config={networkChartConfig}
/> />
</div> </div>
+6 -2
View File
@@ -44,7 +44,7 @@ export function useAsyncInterval<T>(
useEffect(() => { useEffect(() => {
let isMounted = true; let isMounted = true;
const iid = setInterval(() => { const run = () => {
setLoading(true); setLoading(true);
asyncFunction() asyncFunction()
.then((result) => { .then((result) => {
@@ -56,7 +56,11 @@ export function useAsyncInterval<T>(
.finally(() => { .finally(() => {
if (isMounted) setLoading(false); if (isMounted) setLoading(false);
}); });
}, interval); };
const iid = setInterval(run, interval);
run();
return () => { return () => {
isMounted = false; isMounted = false;