From e620010f1079a95b60e1ff7d1845c6f741da79ca Mon Sep 17 00:00:00 2001 From: MacRimi Date: Wed, 22 Oct 2025 19:50:26 +0200 Subject: [PATCH] Update AppImage --- AppImage/components/network-metrics.tsx | 197 ++++++++++++-------- AppImage/components/node-metrics-charts.tsx | 13 ++ AppImage/components/storage-overview.tsx | 10 +- 3 files changed, 136 insertions(+), 84 deletions(-) diff --git a/AppImage/components/network-metrics.tsx b/AppImage/components/network-metrics.tsx index a82bbe1..b972d8b 100644 --- a/AppImage/components/network-metrics.tsx +++ b/AppImage/components/network-metrics.tsx @@ -215,15 +215,15 @@ export function NetworkMetrics() {
- Received: + Received: ↓ {trafficInFormatted}
- Sent: + Sent: ↑ {trafficOutFormatted}
-

Total data transferred

+

Total data transferred

@@ -250,91 +250,130 @@ export function NetworkMetrics() { + {/* Firewall Status card */} - - - - Physical Interfaces - - {networkData.physical_active_count ?? 0}/{networkData.physical_total_count ?? 0} Active - - + + Firewall Status + -
- {networkData.physical_interfaces.map((interface_, index) => { - const typeBadge = getInterfaceTypeBadge(interface_.type) +
Active
+ + Protected + +

System protected

+ + - return ( -
setSelectedInterface(interface_)} - > - {/* First row: Icon, Name, Type Badge, Status */} -
- -
-
{interface_.name}
- - {typeBadge.label} - -
- - {interface_.status.toUpperCase()} - -
- - {/* Second row: Details - Responsive layout */} -
-
-
IP Address
-
- {interface_.addresses.length > 0 ? interface_.addresses[0].ip : "N/A"} -
-
- -
-
Speed
-
- - {formatSpeed(interface_.speed)} -
-
- -
-
Traffic
-
- ↓ {formatBytes(interface_.bytes_recv)} - {" / "} - ↑ {formatBytes(interface_.bytes_sent)} -
-
- - {interface_.mac_address && ( -
-
MAC
-
- {interface_.mac_address} -
-
- )} -
-
- ) - })} + {/* Network Health card */} + + + Network Health + + + + + {healthStatus} + +
+
+ Packet Loss: + {avgPacketLoss}% +
+
+ Errors: + {totalErrors} +
+ {/* Physical Interfaces section */} + + + + + Physical Interfaces + + {networkData.physical_active_count ?? 0}/{networkData.physical_total_count ?? 0} Active + + + + +
+ {networkData.physical_interfaces.map((interface_, index) => { + const typeBadge = getInterfaceTypeBadge(interface_.type) + + return ( +
setSelectedInterface(interface_)} + > + {/* First row: Icon, Name, Type Badge, Status */} +
+ +
+
{interface_.name}
+ + {typeBadge.label} + +
+ + {interface_.status.toUpperCase()} + +
+ + {/* Second row: Details - Responsive layout */} +
+
+
IP Address
+
+ {interface_.addresses.length > 0 ? interface_.addresses[0].ip : "N/A"} +
+
+ +
+
Speed
+
+ + {formatSpeed(interface_.speed)} +
+
+ +
+
Traffic
+
+ ↓ {formatBytes(interface_.bytes_recv)} + {" / "} + ↑ {formatBytes(interface_.bytes_sent)} +
+
+ + {interface_.mac_address && ( +
+
MAC
+
+ {interface_.mac_address} +
+
+ )} +
+
+ ) + })} +
+
+
+ {networkData.bridge_interfaces && networkData.bridge_interfaces.length > 0 && ( diff --git a/AppImage/components/node-metrics-charts.tsx b/AppImage/components/node-metrics-charts.tsx index f42148a..dcb2a3e 100644 --- a/AppImage/components/node-metrics-charts.tsx +++ b/AppImage/components/node-metrics-charts.tsx @@ -43,14 +43,22 @@ export function NodeMetricsCharts() { typeof window !== "undefined" ? `${window.location.protocol}//${window.location.hostname}:8008` : "" const apiUrl = `${baseUrl}/api/node/metrics?timeframe=${timeframe}` + console.log("[v0] Fetching node metrics from:", apiUrl) + const response = await fetch(apiUrl) + console.log("[v0] Response status:", response.status) + console.log("[v0] Response ok:", response.ok) + if (!response.ok) { const errorData = await response.json() + console.log("[v0] Error response data:", errorData) throw new Error(errorData.error || "Failed to fetch node metrics") } const result = await response.json() + console.log("[v0] Node metrics result:", result) + console.log("[v0] Data points received:", result.data?.length || 0) const transformedData = result.data.map((item: any) => { const date = new Date(item.time * 1000) @@ -94,9 +102,14 @@ export function NodeMetricsCharts() { } }) + console.log("[v0] Transformed data sample:", transformedData[0]) + console.log("[v0] Total transformed data points:", transformedData.length) + setData(transformedData) } catch (err: any) { console.error("[v0] Error fetching node metrics:", err) + console.error("[v0] Error message:", err.message) + console.error("[v0] Error stack:", err.stack) setError(err.message || "Error loading metrics") } finally { setLoading(false) diff --git a/AppImage/components/storage-overview.tsx b/AppImage/components/storage-overview.tsx index 3ae6985..b6029dd 100644 --- a/AppImage/components/storage-overview.tsx +++ b/AppImage/components/storage-overview.tsx @@ -427,14 +427,14 @@ export function StorageOverview() { return (
{/* Storage Summary */} -
+
Total Storage -
{storageData.total.toFixed(1)} TB
+
{storageData.total.toFixed(1)} TB

{storageData.disk_count} physical disks

@@ -445,7 +445,7 @@ export function StorageOverview() { -
{formatStorage(totalProxmoxUsed)}
+
{formatStorage(totalProxmoxUsed)}

{usagePercent}% used

@@ -457,7 +457,7 @@ export function StorageOverview() { -
{storageData.disk_count} disks
+
{storageData.disk_count} disks

{diskHealthBreakdown.normal} normal {diskHealthBreakdown.warning > 0 && ( @@ -483,7 +483,7 @@ export function StorageOverview() { -

{storageData.disk_count} disks
+
{storageData.disk_count} disks

{diskTypesBreakdown.nvme > 0 && {diskTypesBreakdown.nvme} NVMe} {diskTypesBreakdown.ssd > 0 && (