From 6c9da364d0be3c9457978bc5594efd12390881e1 Mon Sep 17 00:00:00 2001 From: MacRimi Date: Tue, 14 Oct 2025 00:03:22 +0200 Subject: [PATCH] Update storage-metrics.tsx --- AppImage/components/storage-metrics.tsx | 199 +++++++++++++++++++++++- 1 file changed, 192 insertions(+), 7 deletions(-) diff --git a/AppImage/components/storage-metrics.tsx b/AppImage/components/storage-metrics.tsx index 50d1c11..d447f87 100644 --- a/AppImage/components/storage-metrics.tsx +++ b/AppImage/components/storage-metrics.tsx @@ -40,13 +40,15 @@ interface DiskInfo { ssd_life_left?: number wear_leveling_count?: number media_wearout_indicator?: number -} - -interface DiskGroup { - type: string - disks: DiskInfo[] - avgTemp: number - status: "safe" | "warning" | "critical" + model?: string + serial?: string + power_on_hours?: number + power_cycles?: number + smart_status?: string + reallocated_sectors?: number + pending_sectors?: number + crc_errors?: number + rotation_rate?: number } const fetchStorageData = async (): Promise => { @@ -118,6 +120,187 @@ const groupDisksByType = (disks: DiskInfo[]): DiskGroup[] => { }) } +interface DiskGroup { + type: string + disks: DiskInfo[] + avgTemp: number + status: "safe" | "warning" | "critical" +} + +function DiskDetailsModal({ disk }: { disk: DiskInfo }) { + const getHealthColor = (health: string) => { + if (health === "healthy") return "bg-green-500/10 text-green-500 border-green-500/20" + if (health === "warning") return "bg-yellow-500/10 text-yellow-500 border-yellow-500/20" + return "bg-red-500/10 text-red-500 border-red-500/20" + } + + const getLifeColor = (life: number) => { + if (life >= 80) return "text-green-500" + if (life >= 50) return "text-yellow-500" + return "text-red-500" + } + + return ( + + + + + + + + + Disk Details: {disk.name} + + Complete SMART information and health status + + +
+ {/* Basic Info */} +
+
+
Model
+
{disk.model || "Unknown"}
+
+
+
Serial Number
+
{disk.serial || "Unknown"}
+
+
+
Capacity
+
{disk.total?.toFixed(1) || "N/A"}G
+
+
+
Health Status
+ + {disk.health === "healthy" ? "Healthy" : disk.health} + +
+
+ + {/* SSD/NVMe Wear Indicators */} + {(disk.disk_type === "SSD" || disk.disk_type === "NVMe") && ( +
+

+ + Indicadores de desgaste y salud +

+
+ {disk.ssd_life_left !== undefined && ( +
+
Vida útil restante
+
+ + {disk.ssd_life_left}% +
+
+ )} + {disk.disk_type === "NVMe" && disk.percentage_used !== undefined && ( +
+
Percentage Used
+
+ + + {disk.percentage_used}% + +
+
+ )} + {disk.wear_leveling_count !== undefined && disk.wear_leveling_count > 0 && ( +
+
Wear Leveling Count
+
+ {disk.wear_leveling_count}% +
+
+ )} + {disk.media_wearout_indicator !== undefined && disk.media_wearout_indicator > 0 && ( +
+
Media Wearout Indicator
+
+ {disk.media_wearout_indicator}% +
+
+ )} +
+
+ )} + + {/* SMART Attributes */} +
+

SMART Attributes

+
+
+
Temperature
+
+ {disk.temperature}°C +
+
+
+
Power On Hours
+
+ {disk.power_on_hours ? `${disk.power_on_hours}h (${Math.floor(disk.power_on_hours / 24)}d)` : "N/A"} +
+
+
+
Rotation Rate
+
+ {disk.rotation_rate === 0 || disk.disk_type === "SSD" || disk.disk_type === "NVMe" + ? "SSD" + : disk.rotation_rate + ? `${disk.rotation_rate} RPM` + : "N/A"} +
+
+
+
Power Cycles
+
{disk.power_cycles || "N/A"}
+
+
+
SMART Status
+
+ {disk.smart_status === "passed" ? "Passed" : disk.smart_status || "Unknown"} +
+
+
+
Reallocated Sectors
+
0 ? "text-red-500" : ""}`} + > + {disk.reallocated_sectors || 0} +
+
+
+
Pending Sectors
+
0 ? "text-yellow-500" : ""}`} + > + {disk.pending_sectors || 0} +
+
+
+
CRC Errors
+
0 ? "text-yellow-500" : ""}`}> + {disk.crc_errors || 0} +
+
+
+
+
+
+
+ ) +} + function TemperatureThresholdsModal() { return ( @@ -492,6 +675,8 @@ export function StorageMetrics() { )} {disk.health} + + ))}