diff --git a/AppImage/components/proxmox-dashboard.tsx b/AppImage/components/proxmox-dashboard.tsx
index d22c37b..1f6d0df 100644
--- a/AppImage/components/proxmox-dashboard.tsx
+++ b/AppImage/components/proxmox-dashboard.tsx
@@ -201,7 +201,6 @@ export function ProxmoxDashboard() {
{systemStatus.serverName}
-
{systemStatus.nodeId}
diff --git a/AppImage/components/system-overview.tsx b/AppImage/components/system-overview.tsx
index b972df4..f5fa70f 100644
--- a/AppImage/components/system-overview.tsx
+++ b/AppImage/components/system-overview.tsx
@@ -19,6 +19,9 @@ interface SystemData {
node_id: string
timestamp: string
cpu_cores?: number
+ proxmox_version?: string
+ kernel_version?: string
+ available_updates?: number
}
interface VMData {
@@ -376,10 +379,11 @@ export function SystemOverview() {
@@ -419,19 +423,21 @@ export function SystemOverview() {
type="monotone"
dataKey="used"
stackId="1"
- stroke="#60a5fa"
- fill="#60a5fa"
+ stroke="#3b82f6"
+ fill="#3b82f6"
fillOpacity={0.6}
name="Used Memory (GB)"
+ strokeWidth={2}
/>
@@ -458,18 +464,22 @@ export function SystemOverview() {
Uptime:
{systemData.uptime}
-
- Last Update:
- {new Date(systemData.timestamp).toLocaleTimeString()}
-
Proxmox Version:
- 8.x
+ {systemData.proxmox_version || "N/A"}
Kernel:
- Linux
+ {systemData.kernel_version || "Linux"}
+ {systemData.available_updates !== undefined && systemData.available_updates > 0 && (
+
+ Available Updates:
+
+ {systemData.available_updates} packages
+
+
+ )}
diff --git a/AppImage/scripts/flask_server.py b/AppImage/scripts/flask_server.py
index 053ff92..fe3a73f 100644
--- a/AppImage/scripts/flask_server.py
+++ b/AppImage/scripts/flask_server.py
@@ -263,6 +263,37 @@ def get_system_info():
hostname = socket.gethostname()
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:
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}")
pass # Use default if pvesh not available
- return {
+ response = {
'cpu_usage': round(cpu_percent, 1),
'memory_usage': round(memory.percent, 1),
'memory_total': round(memory.total / (1024**3), 1), # GB
@@ -285,8 +316,18 @@ def get_system_info():
'load_average': list(load_avg),
'hostname': hostname,
'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:
print(f"Critical error getting system info: {e}")
return {