diff --git a/AppImage/components/storage-overview.tsx b/AppImage/components/storage-overview.tsx index c4f92e3..9a2c237 100644 --- a/AppImage/components/storage-overview.tsx +++ b/AppImage/components/storage-overview.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from "react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" -import { HardDrive, Database, AlertTriangle, CheckCircle2, XCircle, Square, Thermometer } from "lucide-react" +import { HardDrive, Database, AlertTriangle, CheckCircle2, XCircle, Square, Thermometer, Archive } from "lucide-react" import { Badge } from "@/components/ui/badge" import { Progress } from "@/components/ui/progress" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" @@ -397,7 +397,10 @@ export function StorageOverview() { const diskHealthBreakdown = getDiskHealthBreakdown() const diskTypesBreakdown = getDiskTypesBreakdown() - const totalProxmoxUsed = + const localStorageTypes = ["dir", "lvmthin", "lvm", "zfspool", "btrfs"] + const remoteStorageTypes = ["pbs", "nfs", "cifs", "smb", "glusterfs", "iscsi", "iscsidirect", "rbd", "cephfs"] + + const totalLocalUsed = proxmoxStorage?.storage .filter( (storage) => @@ -406,11 +409,12 @@ export function StorageOverview() { storage.status === "active" && storage.total > 0 && storage.used >= 0 && - storage.available >= 0, + storage.available >= 0 && + localStorageTypes.includes(storage.type.toLowerCase()), ) .reduce((sum, storage) => sum + storage.used, 0) || 0 - const totalProxmoxCapacity = + const totalLocalCapacity = proxmoxStorage?.storage .filter( (storage) => @@ -419,11 +423,52 @@ export function StorageOverview() { storage.status === "active" && storage.total > 0 && storage.used >= 0 && - storage.available >= 0, + storage.available >= 0 && + localStorageTypes.includes(storage.type.toLowerCase()), ) .reduce((sum, storage) => sum + storage.total, 0) || 0 - const usagePercent = totalProxmoxCapacity > 0 ? ((totalProxmoxUsed / totalProxmoxCapacity) * 100).toFixed(2) : "0.00" + const localUsagePercent = totalLocalCapacity > 0 ? ((totalLocalUsed / totalLocalCapacity) * 100).toFixed(2) : "0.00" + + const totalRemoteUsed = + proxmoxStorage?.storage + .filter( + (storage) => + storage && + storage.name && + storage.status === "active" && + storage.total > 0 && + storage.used >= 0 && + storage.available >= 0 && + remoteStorageTypes.includes(storage.type.toLowerCase()), + ) + .reduce((sum, storage) => sum + storage.used, 0) || 0 + + const totalRemoteCapacity = + proxmoxStorage?.storage + .filter( + (storage) => + storage && + storage.name && + storage.status === "active" && + storage.total > 0 && + storage.used >= 0 && + storage.available >= 0 && + remoteStorageTypes.includes(storage.type.toLowerCase()), + ) + .reduce((sum, storage) => sum + storage.total, 0) || 0 + + const remoteUsagePercent = + totalRemoteCapacity > 0 ? ((totalRemoteUsed / totalRemoteCapacity) * 100).toFixed(2) : "0.00" + + const remoteStorageCount = + proxmoxStorage?.storage.filter( + (storage) => + storage && + storage.name && + storage.status === "active" && + remoteStorageTypes.includes(storage.type.toLowerCase()), + ).length || 0 if (loading) { return ( @@ -458,64 +503,73 @@ export function StorageOverview() { - Used Storage + Local Storage -
{formatStorage(totalProxmoxUsed)}
-

{usagePercent}% used

-
-
- - {/* Disk Health */} - - - Disk Health - - - -
{storageData.disk_count} disks
-

- {diskHealthBreakdown.normal} normal - {diskHealthBreakdown.warning > 0 && ( - <> - {", "} - {diskHealthBreakdown.warning} warning - - )} - {diskHealthBreakdown.critical > 0 && ( - <> - {", "} - {diskHealthBreakdown.critical} critical - - )} +

{formatStorage(totalLocalUsed)}
+

+ {localUsagePercent}% of {formatStorage(totalLocalCapacity)}

- {/* Disk Types */} - Disk Types + Remote Storage + + + +
+ {remoteStorageCount > 0 ? formatStorage(totalRemoteUsed) : "None"} +
+

+ {remoteStorageCount > 0 + ? `${remoteUsagePercent}% of ${formatStorage(totalRemoteCapacity)}` + : "No remote storage"} +

+
+
+ + + + Physical Disks
{storageData.disk_count} disks
-

- {diskTypesBreakdown.nvme > 0 && {diskTypesBreakdown.nvme} NVMe} - {diskTypesBreakdown.ssd > 0 && ( - <> - {diskTypesBreakdown.nvme > 0 && ", "} - {diskTypesBreakdown.ssd} SSD - - )} - {diskTypesBreakdown.hdd > 0 && ( - <> - {(diskTypesBreakdown.nvme > 0 || diskTypesBreakdown.ssd > 0) && ", "} - {diskTypesBreakdown.hdd} HDD - - )} -

+
+

+ {diskTypesBreakdown.nvme > 0 && {diskTypesBreakdown.nvme} NVMe} + {diskTypesBreakdown.ssd > 0 && ( + <> + {diskTypesBreakdown.nvme > 0 && ", "} + {diskTypesBreakdown.ssd} SSD + + )} + {diskTypesBreakdown.hdd > 0 && ( + <> + {(diskTypesBreakdown.nvme > 0 || diskTypesBreakdown.ssd > 0) && ", "} + {diskTypesBreakdown.hdd} HDD + + )} +

+

+ {diskHealthBreakdown.normal} normal + {diskHealthBreakdown.warning > 0 && ( + <> + {", "} + {diskHealthBreakdown.warning} warning + + )} + {diskHealthBreakdown.critical > 0 && ( + <> + {", "} + {diskHealthBreakdown.critical} critical + + )} +

+
@@ -533,11 +587,7 @@ export function StorageOverview() { {proxmoxStorage.storage .filter( (storage) => - storage && - storage.name && - storage.total > 0 && - storage.used >= 0 && // Ensure used is not negative - storage.available >= 0, // Ensure available is not negative + storage && storage.name && storage.total > 0 && storage.used >= 0 && storage.available >= 0, ) .sort((a, b) => a.name.localeCompare(b.name)) .map((storage) => (