From 941e194df31a15354709e10bcd07fe7bf5ee913a Mon Sep 17 00:00:00 2001 From: MacRimi Date: Thu, 27 Nov 2025 17:50:26 +0100 Subject: [PATCH] Update system-overview.tsx --- AppImage/components/system-overview.tsx | 69 +++++++++++++++++-------- 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/AppImage/components/system-overview.tsx b/AppImage/components/system-overview.tsx index 1714735..be1a259 100644 --- a/AppImage/components/system-overview.tsx +++ b/AppImage/components/system-overview.tsx @@ -4,7 +4,7 @@ import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle } from "./ui/card" import { Progress } from "./ui/progress" import { Badge } from "./ui/badge" -import { Cpu, MemoryStick, Thermometer, Server, Zap, AlertCircle, HardDrive, Network } from 'lucide-react' +import { Cpu, MemoryStick, Thermometer, Server, Zap, AlertCircle, HardDrive, Network } from "lucide-react" import { NodeMetricsCharts } from "./node-metrics-charts" import { NetworkTrafficChart } from "./network-traffic-chart" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select" @@ -97,14 +97,21 @@ interface ProxmoxStorageData { }> } -const fetchSystemData = async (): Promise => { - try { - const data = await fetchApi("/api/system") - return data - } catch (error) { - console.error("[v0] Failed to fetch system data:", error) - return null +const fetchSystemData = async (retries = 3, delayMs = 500): Promise => { + for (let attempt = 0; attempt < retries; attempt++) { + try { + const data = await fetchApi("/api/system") + return data + } catch (error) { + if (attempt === retries - 1) { + console.error("[v0] Failed to fetch system data after retries:", error) + return null + } + // Wait before retry + await new Promise((resolve) => setTimeout(resolve, delayMs)) + } } + return null } const fetchVMData = async (): Promise => { @@ -503,7 +510,9 @@ export function SystemOverview() {
Total Node Capacity: - {formatNetworkTraffic(totalCapacity, "Bytes")} + + {formatNetworkTraffic(totalCapacity, "Bytes")} +
- Used: {formatNetworkTraffic(totalUsed, "Bytes")} + Used:{" "} + + {formatNetworkTraffic(totalUsed, "Bytes")} + - Free: {formatNetworkTraffic(totalAvailable, "Bytes")} + Free:{" "} + + {formatNetworkTraffic(totalAvailable, "Bytes")} +
{totalPercent.toFixed(1)}% @@ -542,7 +557,9 @@ export function SystemOverview() {
VM/LXC Storage
Used: - {formatNetworkTraffic(vmLxcStorageUsed, "Bytes")} + + {formatNetworkTraffic(vmLxcStorageUsed, "Bytes")} +
Available: @@ -553,7 +570,8 @@ export function SystemOverview() {
- {formatNetworkTraffic(vmLxcStorageUsed, "Bytes")} / {formatNetworkTraffic(vmLxcStorageTotal, "Bytes")} + {formatNetworkTraffic(vmLxcStorageUsed, "Bytes")} /{" "} + {formatNetworkTraffic(vmLxcStorageTotal, "Bytes")} {vmLxcStoragePercent.toFixed(1)}%
@@ -575,7 +593,9 @@ export function SystemOverview() {
Local Storage (System)
Used: - {formatNetworkTraffic(localStorage.used, "Bytes")} + + {formatNetworkTraffic(localStorage.used, "Bytes")} +
Available: @@ -586,7 +606,8 @@ export function SystemOverview() {
- {formatNetworkTraffic(localStorage.used, "Bytes")} / {formatNetworkTraffic(localStorage.total, "Bytes")} + {formatNetworkTraffic(localStorage.used, "Bytes")} /{" "} + {formatNetworkTraffic(localStorage.total, "Bytes")} {localStorage.percent.toFixed(1)}%
@@ -674,25 +695,31 @@ export function SystemOverview() {
Received: - ↓ {networkUnit === "Bytes" + ↓{" "} + {networkUnit === "Bytes" ? `${networkTotals.received.toFixed(2)} GB` - : formatNetworkTraffic(networkTotals.received * 1024 * 1024 * 1024, 'Bits')} + : formatNetworkTraffic(networkTotals.received * 1024 * 1024 * 1024, "Bits")} ({getTimeframeLabel(networkTimeframe)})
Sent: - ↑ {networkUnit === "Bytes" - ? `${networkTotals.sent.toFixed(2)} GB` - : formatNetworkTraffic(networkTotals.sent * 1024 * 1024 * 1024, 'Bits')} + ↑{" "} + {networkUnit === "Bytes" + ? `${networkTotals.sent.toFixed(2)} GB` + : formatNetworkTraffic(networkTotals.sent * 1024 * 1024 * 1024, "Bits")} ({getTimeframeLabel(networkTimeframe)})
- +
) : (