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;
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 (
<DashboardLayout
title="Monitoring"
@@ -169,13 +140,13 @@ export default function MonitoringPage() {
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-6">
<GradientAreaChart
title="CPU Usage"
data={data}
data={metrics}
config={cpuChartConfig}
max={100}
/>
<GradientAreaChart
title="Memory Usage"
data={data}
data={metrics}
config={memoryChartConfig}
max={100}
/>
@@ -185,7 +156,7 @@ export default function MonitoringPage() {
<div className="mb-6">
<GradientAreaChart
title="Network I/O"
data={data}
data={metrics}
config={networkChartConfig}
/>
</div>
+6 -2
View File
@@ -44,7 +44,7 @@ export function useAsyncInterval<T>(
useEffect(() => {
let isMounted = true;
const iid = setInterval(() => {
const run = () => {
setLoading(true);
asyncFunction()
.then((result) => {
@@ -56,7 +56,11 @@ export function useAsyncInterval<T>(
.finally(() => {
if (isMounted) setLoading(false);
});
}, interval);
};
const iid = setInterval(run, interval);
run();
return () => {
isMounted = false;