Update AppImage

This commit is contained in:
MacRimi
2025-10-02 18:28:36 +02:00
parent 97288ed6ce
commit 15f3af2020
3 changed files with 66 additions and 16 deletions

View File

@@ -201,7 +201,6 @@ export function ProxmoxDashboard() {
<Server className="h-4 w-4 text-muted-foreground" /> <Server className="h-4 w-4 text-muted-foreground" />
<div className="text-sm"> <div className="text-sm">
<div className="font-medium text-foreground">{systemStatus.serverName}</div> <div className="font-medium text-foreground">{systemStatus.serverName}</div>
<div className="text-xs text-muted-foreground">{systemStatus.nodeId}</div>
</div> </div>
</div> </div>

View File

@@ -19,6 +19,9 @@ interface SystemData {
node_id: string node_id: string
timestamp: string timestamp: string
cpu_cores?: number cpu_cores?: number
proxmox_version?: string
kernel_version?: string
available_updates?: number
} }
interface VMData { interface VMData {
@@ -376,10 +379,11 @@ export function SystemOverview() {
<Area <Area
type="monotone" type="monotone"
dataKey="value" dataKey="value"
stroke="#60a5fa" stroke="#3b82f6"
fill="#60a5fa" fill="#3b82f6"
fillOpacity={0.3} fillOpacity={0.4}
name="CPU %" name="CPU %"
strokeWidth={2}
/> />
</AreaChart> </AreaChart>
</ResponsiveContainer> </ResponsiveContainer>
@@ -419,19 +423,21 @@ export function SystemOverview() {
type="monotone" type="monotone"
dataKey="used" dataKey="used"
stackId="1" stackId="1"
stroke="#60a5fa" stroke="#3b82f6"
fill="#60a5fa" fill="#3b82f6"
fillOpacity={0.6} fillOpacity={0.6}
name="Used Memory (GB)" name="Used Memory (GB)"
strokeWidth={2}
/> />
<Area <Area
type="monotone" type="monotone"
dataKey="available" dataKey="available"
stackId="1" stackId="1"
stroke="#34d399" stroke="#10b981"
fill="#34d399" fill="#10b981"
fillOpacity={0.6} fillOpacity={0.6}
name="Available Memory (GB)" name="Available Memory (GB)"
strokeWidth={2}
/> />
</AreaChart> </AreaChart>
</ResponsiveContainer> </ResponsiveContainer>
@@ -458,18 +464,22 @@ export function SystemOverview() {
<span className="text-muted-foreground">Uptime:</span> <span className="text-muted-foreground">Uptime:</span>
<span className="text-foreground">{systemData.uptime}</span> <span className="text-foreground">{systemData.uptime}</span>
</div> </div>
<div className="flex justify-between">
<span className="text-muted-foreground">Last Update:</span>
<span className="text-foreground">{new Date(systemData.timestamp).toLocaleTimeString()}</span>
</div>
<div className="flex justify-between"> <div className="flex justify-between">
<span className="text-muted-foreground">Proxmox Version:</span> <span className="text-muted-foreground">Proxmox Version:</span>
<span className="text-foreground">8.x</span> <span className="text-foreground">{systemData.proxmox_version || "N/A"}</span>
</div> </div>
<div className="flex justify-between"> <div className="flex justify-between">
<span className="text-muted-foreground">Kernel:</span> <span className="text-muted-foreground">Kernel:</span>
<span className="text-foreground font-mono text-sm">Linux</span> <span className="text-foreground font-mono text-sm">{systemData.kernel_version || "Linux"}</span>
</div> </div>
{systemData.available_updates !== undefined && systemData.available_updates > 0 && (
<div className="flex justify-between">
<span className="text-muted-foreground">Available Updates:</span>
<Badge variant="outline" className="bg-yellow-500/10 text-yellow-500 border-yellow-500/20">
{systemData.available_updates} packages
</Badge>
</div>
)}
</CardContent> </CardContent>
</Card> </Card>

View File

@@ -263,6 +263,37 @@ def get_system_info():
hostname = socket.gethostname() hostname = socket.gethostname()
node_id = f"pve-{hostname}" node_id = f"pve-{hostname}"
proxmox_version = None
try:
result = subprocess.run(['pveversion'], capture_output=True, text=True, timeout=5)
if result.returncode == 0:
# Parse output like "pve-manager/9.0.6/..."
version_line = result.stdout.strip().split('\n')[0]
if '/' in version_line:
proxmox_version = version_line.split('/')[1]
except Exception as e:
print(f"Note: pveversion not available: {e}")
kernel_version = None
try:
result = subprocess.run(['uname', '-r'], capture_output=True, text=True, timeout=5)
if result.returncode == 0:
kernel_version = result.stdout.strip()
except Exception as e:
print(f"Note: uname not available: {e}")
cpu_cores = psutil.cpu_count(logical=False) # Physical cores only
available_updates = 0
try:
result = subprocess.run(['apt', 'list', '--upgradable'], capture_output=True, text=True, timeout=10)
if result.returncode == 0:
# Count lines minus header
lines = result.stdout.strip().split('\n')
available_updates = max(0, len(lines) - 1)
except Exception as e:
print(f"Note: apt list not available: {e}")
# Try to get Proxmox node info if available # Try to get Proxmox node info if available
try: try:
result = subprocess.run(['pvesh', 'get', '/nodes', '--output-format', 'json'], result = subprocess.run(['pvesh', 'get', '/nodes', '--output-format', 'json'],
@@ -275,7 +306,7 @@ def get_system_info():
print(f"Note: pvesh not available or failed: {e}") print(f"Note: pvesh not available or failed: {e}")
pass # Use default if pvesh not available pass # Use default if pvesh not available
return { response = {
'cpu_usage': round(cpu_percent, 1), 'cpu_usage': round(cpu_percent, 1),
'memory_usage': round(memory.percent, 1), 'memory_usage': round(memory.percent, 1),
'memory_total': round(memory.total / (1024**3), 1), # GB 'memory_total': round(memory.total / (1024**3), 1), # GB
@@ -285,8 +316,18 @@ def get_system_info():
'load_average': list(load_avg), 'load_average': list(load_avg),
'hostname': hostname, 'hostname': hostname,
'node_id': node_id, 'node_id': node_id,
'timestamp': datetime.now().isoformat() 'timestamp': datetime.now().isoformat(),
'cpu_cores': cpu_cores
} }
if proxmox_version:
response['proxmox_version'] = proxmox_version
if kernel_version:
response['kernel_version'] = kernel_version
if available_updates > 0:
response['available_updates'] = available_updates
return response
except Exception as e: except Exception as e:
print(f"Critical error getting system info: {e}") print(f"Critical error getting system info: {e}")
return { return {