"use client" import { useState, useEffect, useMemo, useCallback } from "react" import { Badge } from "./ui/badge" import { Button } from "./ui/button" import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs" import { SystemOverview } from "./system-overview" import { StorageMetrics } from "./storage-metrics" import { NetworkMetrics } from "./network-metrics" import { VirtualMachines } from "./virtual-machines" import { SystemLogs } from "./system-logs" import { RefreshCw, AlertTriangle, CheckCircle, XCircle, Server } from "lucide-react" import Image from "next/image" import { ThemeToggle } from "./theme-toggle" interface SystemStatus { status: "healthy" | "warning" | "critical" uptime: string lastUpdate: string serverName: string nodeId: string } interface FlaskSystemData { hostname: string node_id: string uptime: string cpu_usage: number memory_usage: number temperature: number load_average: number[] } export function ProxmoxDashboard() { const [systemStatus, setSystemStatus] = useState({ status: "healthy", uptime: "Loading...", lastUpdate: new Date().toLocaleTimeString(), serverName: "Loading...", nodeId: "Loading...", }) const [isRefreshing, setIsRefreshing] = useState(false) const [isServerConnected, setIsServerConnected] = useState(true) const [componentKey, setComponentKey] = useState(0) const fetchSystemData = useCallback(async () => { console.log("[v0] Fetching system data from Flask server...") try { const response = await fetch("http://localhost:8008/api/system") if (!response.ok) { throw new Error("Server not responding") } const data: FlaskSystemData = await response.json() console.log("[v0] System data received:", data) let status: "healthy" | "warning" | "critical" = "healthy" if (data.cpu_usage > 90 || data.memory_usage > 90) { status = "critical" } else if (data.cpu_usage > 75 || data.memory_usage > 75) { status = "warning" } setSystemStatus({ status, uptime: data.uptime, lastUpdate: new Date().toLocaleTimeString(), serverName: data.hostname, nodeId: data.node_id, }) setIsServerConnected(true) } catch (error) { console.error("[v0] Failed to fetch system data from Flask server:", error) setIsServerConnected(false) setSystemStatus((prev) => ({ ...prev, status: "critical", serverName: "Server Offline", nodeId: "Server Offline", uptime: "N/A", lastUpdate: new Date().toLocaleTimeString(), })) } }, []) useEffect(() => { fetchSystemData() const interval = setInterval(fetchSystemData, 5000) return () => clearInterval(interval) }, [fetchSystemData]) const refreshData = async () => { setIsRefreshing(true) await fetchSystemData() setComponentKey((prev) => prev + 1) await new Promise((resolve) => setTimeout(resolve, 500)) setIsRefreshing(false) } const statusIcon = useMemo(() => { switch (systemStatus.status) { case "healthy": return case "warning": return case "critical": return } }, [systemStatus.status]) const statusColor = useMemo(() => { switch (systemStatus.status) { case "healthy": return "bg-green-500/10 text-green-500 border-green-500/20" case "warning": return "bg-yellow-500/10 text-yellow-500 border-yellow-500/20" case "critical": return "bg-red-500/10 text-red-500 border-red-500/20" } }, [systemStatus.status]) return (
{!isServerConnected && (
Flask Server Offline • Start the server:{" "} python3 AppImage/scripts/flask_server.py
)}
ProxMenux Logo { const target = e.target as HTMLImageElement target.style.display = "none" document.querySelector(".fallback-icon")?.classList.remove("hidden") }} />

ProxMenux Monitor

Proxmox System Dashboard

{systemStatus.nodeId}
{statusIcon} {systemStatus.status}
Uptime: {systemStatus.uptime}
Overview Storage Network Virtual Machines System Logs
) }