"use client" import { useState, useEffect } from "react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { SystemOverview } from "@/components/system-overview" import { StorageMetrics } from "@/components/storage-metrics" import { NetworkMetrics } from "@/components/network-metrics" import { VirtualMachines } from "@/components/virtual-machines" import { SystemLogs } from "@/components/system-logs" import { RefreshCw, AlertTriangle, CheckCircle, XCircle, Languages, Server } from "lucide-react" import Image from "next/image" import { ThemeToggle } from "@/components/theme-toggle" interface SystemStatus { status: "healthy" | "warning" | "critical" uptime: string lastUpdate: string serverName: string nodeId: string } export function ProxmoxDashboard() { const [systemStatus, setSystemStatus] = useState({ status: "healthy", uptime: "15d 7h 23m", lastUpdate: new Date().toLocaleTimeString(), serverName: "proxmox-01", nodeId: "pve-node-01", }) const [isRefreshing, setIsRefreshing] = useState(false) const [isTranslating, setIsTranslating] = useState(false) useEffect(() => { const fetchServerInfo = async () => { try { const response = await fetch("/api/flask/system-info") if (response.ok) { const data = await response.json() setSystemStatus((prev) => ({ ...prev, serverName: data.hostname || "proxmox-01", nodeId: data.node_id || "pve-node-01", })) } } catch (error) { console.log("[v0] Using default server name due to API error:", error) } } fetchServerInfo() }, []) const refreshData = async () => { setIsRefreshing(true) await new Promise((resolve) => setTimeout(resolve, 1000)) setSystemStatus((prev) => ({ ...prev, lastUpdate: new Date().toLocaleTimeString(), })) setIsRefreshing(false) } const translatePage = async () => { setIsTranslating(true) try { if ("translate" in document.documentElement.dataset) { const currentLang = document.documentElement.dataset.translate document.documentElement.dataset.translate = currentLang === "yes" ? "no" : "yes" } else { const googleTranslateScript = document.createElement("script") googleTranslateScript.src = "https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" document.head.appendChild(googleTranslateScript) window.googleTranslateElementInit = () => { new window.google.translate.TranslateElement( { pageLanguage: "en", includedLanguages: "es,en,fr,de,it,pt,ru,zh,ja,ko", layout: window.google.translate.TranslateElement.InlineLayout.SIMPLE, }, "google_translate_element", ) } } } catch (error) { console.error("Translation error:", error) } setIsTranslating(false) } const getStatusIcon = () => { switch (systemStatus.status) { case "healthy": return case "warning": return case "critical": return } } const getStatusColor = () => { 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" } } return (
ProxMenux Logo

ProxMenux Monitor

Proxmox System Dashboard

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