Update AppImage

This commit is contained in:
MacRimi
2025-10-06 19:08:21 +02:00
parent 5807c4d97f
commit 7a0c2dc261
2 changed files with 46 additions and 54 deletions

View File

@@ -16,7 +16,6 @@ import {
Cpu, Cpu,
MemoryStick, MemoryStick,
Cpu as Gpu, Cpu as Gpu,
Info,
} from "lucide-react" } from "lucide-react"
import useSWR from "swr" import useSWR from "swr"
import { useState } from "react" import { useState } from "react"
@@ -320,11 +319,6 @@ export default function Hardware() {
</div> </div>
)} )}
</div> </div>
<div className="mt-3 flex items-center gap-1 text-xs text-muted-foreground">
<Info className="h-3 w-3" />
<span>Click for detailed information</span>
</div>
</div> </div>
))} ))}
</div> </div>
@@ -357,6 +351,24 @@ export default function Hardware() {
<span className="text-sm text-muted-foreground">PCI Slot</span> <span className="text-sm text-muted-foreground">PCI Slot</span>
<span className="font-mono text-sm">{selectedGPU.slot}</span> <span className="font-mono text-sm">{selectedGPU.slot}</span>
</div> </div>
{selectedGPU.pci_class && (
<div className="flex justify-between border-b border-border/50 pb-2">
<span className="text-sm text-muted-foreground">Class</span>
<span className="font-mono text-sm">{selectedGPU.pci_class}</span>
</div>
)}
{selectedGPU.pci_driver && (
<div className="flex justify-between border-b border-border/50 pb-2">
<span className="text-sm text-muted-foreground">Driver</span>
<span className="font-mono text-sm text-green-500">{selectedGPU.pci_driver}</span>
</div>
)}
{selectedGPU.pci_kernel_module && (
<div className="flex justify-between border-b border-border/50 pb-2">
<span className="text-sm text-muted-foreground">Kernel Module</span>
<span className="font-mono text-sm">{selectedGPU.pci_kernel_module}</span>
</div>
)}
{selectedGPU.driver_version && ( {selectedGPU.driver_version && (
<div className="flex justify-between border-b border-border/50 pb-2"> <div className="flex justify-between border-b border-border/50 pb-2">
<span className="text-sm text-muted-foreground">Driver Version</span> <span className="text-sm text-muted-foreground">Driver Version</span>

View File

@@ -1696,6 +1696,29 @@ def get_gpu_info():
'type': 'Discrete' if vendor in ['NVIDIA', 'AMD'] else 'Integrated' 'type': 'Discrete' if vendor in ['NVIDIA', 'AMD'] else 'Integrated'
} }
try:
# Get detailed PCI info for this slot
pci_result = subprocess.run(['lspci', '-vmm', '-s', slot], capture_output=True, text=True, timeout=2)
if pci_result.returncode == 0:
for pci_line in pci_result.stdout.split('\n'):
if ':' in pci_line:
key, value = pci_line.split(':', 1)
key = key.strip()
value = value.strip()
if key == 'Class':
gpu['pci_class'] = value
# Get driver and kernel module info
driver_result = subprocess.run(['lspci', '-k', '-s', slot], capture_output=True, text=True, timeout=2)
if driver_result.returncode == 0:
for driver_line in driver_result.stdout.split('\n'):
if 'Kernel driver in use:' in driver_line:
gpu['pci_driver'] = driver_line.split(':', 1)[1].strip()
elif 'Kernel modules:' in driver_line:
gpu['pci_kernel_module'] = driver_line.split(':', 1)[1].strip()
except Exception as e:
print(f"[v0] Error getting PCI info for GPU {slot}: {e}")
detailed_info = get_detailed_gpu_info(gpu) detailed_info = get_detailed_gpu_info(gpu)
gpu.update(detailed_info) gpu.update(detailed_info)
@@ -1738,8 +1761,8 @@ def get_gpu_info():
('i915' in current_adapter.lower() and gpu['vendor'] == 'Intel')): ('i915' in current_adapter.lower() and gpu['vendor'] == 'Intel')):
# Parse temperature (only if not already set by nvidia-smi) # Parse temperature (only if not already set by nvidia-smi)
if 'temperature' not in gpu or gpu['temperature'] is None:
if '°C' in value_part or 'C' in value_part: if '°C' in value_part or 'C' in value_part:
if 'temperature' not in gpu or gpu['temperature'] is None:
temp_match = re.search(r'([+-]?[\d.]+)\s*°?C', value_part) temp_match = re.search(r'([+-]?[\d.]+)\s*°?C', value_part)
if temp_match: if temp_match:
gpu['temperature'] = float(temp_match.group(1)) gpu['temperature'] = float(temp_match.group(1))
@@ -2459,8 +2482,7 @@ def api_info():
'/api/vms', '/api/vms',
'/api/logs', '/api/logs',
'/api/health', '/api/health',
'/api/hardware', '/api/hardware'
'/api/gpu/<slot>'
] ]
}) })
@@ -2495,48 +2517,6 @@ def api_hardware():
return jsonify(formatted_data) return jsonify(formatted_data)
@app.route('/api/gpu/<slot>', methods=['GET'])
def api_gpu_detail(slot):
"""Get detailed real-time GPU information for a specific GPU"""
try:
# Find the GPU by slot
hardware_info = get_hardware_info()
gpus = hardware_info.get('gpus', [])
gpu = None
for g in gpus:
if g.get('slot') == slot:
gpu = g
break
if not gpu:
return jsonify({'error': 'GPU not found'}), 404
# Get PCI device information for this GPU
pci_devices = hardware_info.get('pci_devices', [])
pci_info = None
for device in pci_devices:
if device.get('slot') == slot:
pci_info = device
break
# Enrich GPU with PCI information
if pci_info:
gpu['pci_class'] = pci_info.get('class')
gpu['pci_driver'] = pci_info.get('driver')
gpu['pci_kernel_module'] = pci_info.get('kernel_module')
# Get fresh detailed information
detailed_info = get_detailed_gpu_info(gpu)
gpu.update(detailed_info)
print(f"[v0] /api/gpu/{slot} returning detailed GPU info")
return jsonify(gpu)
except Exception as e:
print(f"[v0] Error getting GPU details: {e}")
return jsonify({'error': str(e)}), 500
@app.route('/api/vms/<int:vmid>', methods=['GET']) @app.route('/api/vms/<int:vmid>', methods=['GET'])
def api_vm_details(vmid): def api_vm_details(vmid):
"""Get detailed information for a specific VM/LXC""" """Get detailed information for a specific VM/LXC"""