diff --git a/AppImage/components/hardware.tsx b/AppImage/components/hardware.tsx index 12faa29..f39aeff 100644 --- a/AppImage/components/hardware.tsx +++ b/AppImage/components/hardware.tsx @@ -64,11 +64,6 @@ export default function Hardware() { const [selectedDisk, setSelectedDisk] = useState(null) const [selectedNetwork, setSelectedNetwork] = useState(null) - const { data: realtimeGPUData } = useSWR(selectedGPU ? `/api/gpu/${selectedGPU.slot}/realtime` : null, fetcher, { - refreshInterval: 2000, // Update every 2 seconds - revalidateOnFocus: false, - }) - const findPCIDeviceForGPU = (gpu: GPU): PCIDevice | null => { if (!hardwareData?.pci_devices || !gpu.slot) return null @@ -89,24 +84,20 @@ export default function Hardware() { return pciDevice || null } - const hasRealtimeData = (gpu: GPU, realtimeData?: any): boolean => { - const combinedData = { ...gpu, ...realtimeData } + const hasRealtimeData = (gpu: GPU): boolean => { return !!( - (combinedData.temperature !== undefined && combinedData.temperature > 0) || - combinedData.utilization_gpu !== undefined || - combinedData.memory_total || - combinedData.power_draw || - // Intel GPU specific fields - combinedData.engine_render !== undefined || - combinedData.engine_blitter !== undefined || - combinedData.engine_video !== undefined || - combinedData.engine_video_enhance !== undefined || - combinedData.clock_graphics || - combinedData.clock_memory || - // AMD GPU specific fields - combinedData.utilization_memory !== undefined || - // NVIDIA GPU specific fields - combinedData.processes !== undefined + (gpu.temperature !== undefined && gpu.temperature > 0) || + (gpu.utilization_gpu !== undefined && gpu.utilization_gpu > 0) || + gpu.memory_total || + gpu.power_draw || + gpu.engine_render !== undefined || + gpu.engine_blitter !== undefined || + gpu.engine_video !== undefined || + gpu.engine_video_enhance !== undefined || + gpu.clock_graphics || + gpu.clock_memory || + gpu.utilization_memory !== undefined || + (gpu.processes !== undefined && gpu.processes.length > 0) ) } @@ -413,211 +404,215 @@ export default function Hardware() { )} - {/* GPU Detail Modal - Two different modals based on data availability */} - setSelectedGPU(null)}> + setSelectedGPU(null)}> {selectedGPU && + hasRealtimeData(selectedGPU) && (() => { const pciDevice = findPCIDeviceForGPU(selectedGPU) - const combinedGPU = { ...selectedGPU, ...realtimeGPUData } - const hasRealtime = hasRealtimeData(selectedGPU, realtimeGPUData) - if (hasRealtime) { - return ( - <> - - {selectedGPU.name} - Real-Time GPU Monitoring - + return ( + <> + + {selectedGPU.name} + Real-Time GPU Monitoring + -
- {/* Basic Information */} -
-

Basic Information

-
-
- Vendor - {selectedGPU.vendor} -
-
- Type - {selectedGPU.type} -
-
- PCI Slot - {pciDevice?.slot || selectedGPU.slot} -
- {(pciDevice?.driver || selectedGPU.pci_driver) && ( -
- Driver - - {pciDevice?.driver || selectedGPU.pci_driver} - -
- )} - {(pciDevice?.kernel_module || selectedGPU.pci_kernel_module) && ( -
- Kernel Module - - {pciDevice?.kernel_module || selectedGPU.pci_kernel_module} - -
- )} +
+ {/* Basic Information */} +
+

Basic Information

+
+
+ Vendor + {selectedGPU.vendor}
+
+ Type + {selectedGPU.type} +
+
+ PCI Slot + {pciDevice?.slot || selectedGPU.slot} +
+ {(pciDevice?.driver || selectedGPU.pci_driver) && ( +
+ Driver + + {pciDevice?.driver || selectedGPU.pci_driver} + +
+ )} + {(pciDevice?.kernel_module || selectedGPU.pci_kernel_module) && ( +
+ Kernel Module + + {pciDevice?.kernel_module || selectedGPU.pci_kernel_module} + +
+ )}
+
- {/* Real-Time Metrics */} + {/* Real-Time Metrics */} +
+

Real-Time Metrics

+
+ {selectedGPU.temperature !== undefined && selectedGPU.temperature > 0 && ( +
+
+ Temperature + {selectedGPU.temperature}°C +
+ +
+ )} + {selectedGPU.utilization_gpu !== undefined && ( +
+
+ GPU Utilization + {selectedGPU.utilization_gpu}% +
+ +
+ )} + {selectedGPU.clock_graphics && ( +
+ Graphics Clock + {selectedGPU.clock_graphics} +
+ )} + {selectedGPU.clock_memory && ( +
+ Memory Clock + {selectedGPU.clock_memory} +
+ )} + {selectedGPU.power_draw && selectedGPU.power_draw !== "N/A" && ( +
+ Power Draw + {selectedGPU.power_draw} +
+ )} + {selectedGPU.power_limit && ( +
+ Power Limit + {selectedGPU.power_limit} +
+ )} +
+
+ + {/* Engine Utilization (Intel/AMD) */} + {(selectedGPU.engine_render !== undefined || + selectedGPU.engine_blitter !== undefined || + selectedGPU.engine_video !== undefined || + selectedGPU.engine_video_enhance !== undefined) && (
-

Real-Time Metrics

+

Engine Utilization

- {combinedGPU.temperature !== undefined && combinedGPU.temperature > 0 && ( + {selectedGPU.engine_render !== undefined && (
- Temperature - - {combinedGPU.temperature}°C + Render/3D + {selectedGPU.engine_render.toFixed(2)}% +
+ +
+ )} + {selectedGPU.engine_blitter !== undefined && ( +
+
+ Blitter + {selectedGPU.engine_blitter.toFixed(2)}% +
+ +
+ )} + {selectedGPU.engine_video !== undefined && ( +
+
+ Video + {selectedGPU.engine_video.toFixed(2)}% +
+ +
+ )} + {selectedGPU.engine_video_enhance !== undefined && ( +
+
+ VideoEnhance + + {selectedGPU.engine_video_enhance.toFixed(2)}%
- -
- )} - {combinedGPU.utilization_gpu !== undefined && ( -
-
- GPU Utilization - {combinedGPU.utilization_gpu}% -
- -
- )} - {combinedGPU.clock_graphics && ( -
- Graphics Clock - {combinedGPU.clock_graphics} -
- )} - {combinedGPU.clock_memory && ( -
- Memory Clock - {combinedGPU.clock_memory} -
- )} - {combinedGPU.power_draw && combinedGPU.power_draw !== "N/A" && ( -
- Power Draw - {combinedGPU.power_draw} -
- )} - {combinedGPU.power_limit && ( -
- Power Limit - {combinedGPU.power_limit} +
)}
+ )} - {/* Engine Utilization (Intel/AMD) */} - {(combinedGPU.engine_render !== undefined || - combinedGPU.engine_blitter !== undefined || - combinedGPU.engine_video !== undefined || - combinedGPU.engine_video_enhance !== undefined) && ( -
-

Engine Utilization

-
- {combinedGPU.engine_render !== undefined && ( -
-
- Render/3D - {combinedGPU.engine_render.toFixed(2)}% -
- -
- )} - {combinedGPU.engine_blitter !== undefined && ( -
-
- Blitter - {combinedGPU.engine_blitter.toFixed(2)}% -
- -
- )} - {combinedGPU.engine_video !== undefined && ( -
-
- Video - {combinedGPU.engine_video.toFixed(2)}% -
- -
- )} - {combinedGPU.engine_video_enhance !== undefined && ( -
-
- VideoEnhance - - {combinedGPU.engine_video_enhance.toFixed(2)}% - -
- -
- )} + {/* Memory Info */} + {selectedGPU.memory_total && ( +
+

Memory

+
+
+ Total + {selectedGPU.memory_total}
+
+ Used + {selectedGPU.memory_used} +
+
+ Free + {selectedGPU.memory_free} +
+ {selectedGPU.utilization_memory !== undefined && ( +
+
+ Memory Utilization + {selectedGPU.utilization_memory}% +
+ +
+ )}
- )} +
+ )} - {/* Memory Info */} - {combinedGPU.memory_total && ( + {/* Running Processes (NVIDIA) */} + {selectedGPU.processes && selectedGPU.processes.length > 0 && ( +
+

Running Processes

-

Memory

-
-
- Total - {combinedGPU.memory_total} -
-
- Used - {combinedGPU.memory_used} -
-
- Free - {combinedGPU.memory_free} -
- {combinedGPU.utilization_memory !== undefined && ( -
-
- Memory Utilization - {combinedGPU.utilization_memory}% -
- + {selectedGPU.processes.map((proc: any, idx: number) => ( +
+
+ PID: {proc.pid} + {proc.memory}
- )} -
+

{proc.name}

+
+ ))}
- )} +
+ )} +
+ + ) + })()} + +
- {/* Running Processes (NVIDIA) */} - {combinedGPU.processes && combinedGPU.processes.length > 0 && ( -
-

Running Processes

-
- {combinedGPU.processes.map((proc: any, idx: number) => ( -
-
- PID: {proc.pid} - {proc.memory} -
-

{proc.name}

-
- ))} -
-
- )} - - - ) - } + setSelectedGPU(null)}> + + {selectedGPU && + !hasRealtimeData(selectedGPU) && + (() => { + const pciDevice = findPCIDeviceForGPU(selectedGPU) return ( <> @@ -627,7 +622,7 @@ export default function Hardware() {
- {/* Basic PCI Device Information - Same format as PCI Device modal */} + {/* Basic PCI Device Information */}
Device Type @@ -651,7 +646,9 @@ export default function Hardware() {
Class - {pciDevice?.class || selectedGPU.pci_class || "N/A"} + + {pciDevice?.class || selectedGPU.pci_class || "VGA compatible controller"} +
{(pciDevice?.driver || selectedGPU.pci_driver) && (