"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle } from "./ui/card" import { Progress } from "./ui/progress" import { Badge } from "./ui/badge" import { XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, AreaChart, Area } from "recharts" import { Cpu, MemoryStick, Thermometer, Users, Activity, Server, Zap } from "lucide-react" interface SystemData { cpu_usage: number memory_usage: number memory_total: number memory_used: number temperature: number uptime: string load_average: number[] hostname: string node_id: string timestamp: string } interface VMData { vmid: number name: string status: string cpu: number mem: number maxmem: number disk: number maxdisk: number uptime: number } const generateRealtimeData = () => ({ cpu_usage: Math.floor(Math.random() * 20) + 60, // 60-80% memory_usage: Math.floor(Math.random() * 10) + 45, // 45-55% memory_total: 32.0, memory_used: 15.8 + Math.random() * 2, // 15.8-17.8 GB temperature: Math.floor(Math.random() * 8) + 48, // 48-56°C uptime: "15d 7h 23m", load_average: [1.23, 1.45, 1.67], hostname: "proxmox-01", node_id: "pve-node-01", timestamp: new Date().toISOString(), }) const staticVMData: VMData[] = [ { vmid: 100, name: "web-server-01", status: "running", cpu: 0.45, mem: 8589934592, maxmem: 17179869184, disk: 53687091200, maxdisk: 107374182400, uptime: 1324800, }, { vmid: 101, name: "database-server", status: "running", cpu: 0.23, mem: 4294967296, maxmem: 8589934592, disk: 26843545600, maxdisk: 53687091200, uptime: 864000, }, { vmid: 102, name: "backup-server", status: "stopped", cpu: 0, mem: 0, maxmem: 4294967296, disk: 10737418240, maxdisk: 21474836480, uptime: 0, }, { vmid: 103, name: "test-server", status: "stopped", cpu: 0, mem: 0, maxmem: 2147483648, disk: 5368709120, maxdisk: 10737418240, uptime: 0, }, ] const generateChartData = () => { const cpuData = [] const memoryData = [] for (let i = 0; i < 24; i += 4) { const time = `${i.toString().padStart(2, "0")}:00` cpuData.push({ time, value: Math.floor(Math.random() * 40) + 40, // 40-80% }) memoryData.push({ time, used: 12 + Math.random() * 8, // 12-20 GB available: 32 - (12 + Math.random() * 8), // Resto disponible }) } return { cpuData, memoryData } } export function SystemOverview() { const [systemData, setSystemData] = useState(generateRealtimeData()) const [vmData, setVmData] = useState(staticVMData) const [chartData, setChartData] = useState(generateChartData()) const [loading, setLoading] = useState(true) useEffect(() => { const timer = setTimeout(() => { setLoading(false) }, 1000) const interval = setInterval(() => { setSystemData(generateRealtimeData()) setChartData(generateChartData()) }, 5000) // Actualizar cada 5 segundos return () => { clearTimeout(timer) clearInterval(interval) } }, []) const vmStats = { total: vmData.length, running: vmData.filter((vm) => vm.status === "running").length, stopped: vmData.filter((vm) => vm.status === "stopped").length, lxc: 0, } const getTemperatureStatus = (temp: number) => { if (temp < 60) return { status: "Normal", color: "bg-green-500/10 text-green-500 border-green-500/20" } if (temp < 75) return { status: "Warm", color: "bg-yellow-500/10 text-yellow-500 border-yellow-500/20" } return { status: "Hot", color: "bg-red-500/10 text-red-500 border-red-500/20" } } if (loading) { return (
{[...Array(4)].map((_, i) => (
))}
) } const tempStatus = getTemperatureStatus(systemData.temperature) return (
{/* Key Metrics Cards */}
CPU Usage
{systemData.cpu_usage}%

↓ 2.1% from last hour

Memory Usage
{systemData.memory_used.toFixed(1)} GB

{systemData.memory_usage.toFixed(1)}% of {systemData.memory_total} GB •{" "} ↑ 1.2 GB

Temperature
{systemData.temperature}°C
{tempStatus.status}

Max: 78°C • Avg: 48°C

Active VMs
{vmStats.running}
{vmStats.running} Running {vmStats.stopped > 0 && ( {vmStats.stopped} Stopped )}

Total: {vmStats.total} VMs configured

{/* Charts Section */}
CPU Usage (24h) Memory Usage (24h)
{/* System Information */}
System Information
Hostname: {systemData.hostname}
Version: PVE 8.1.3
Kernel: 6.5.11-7-pve
Architecture: x86_64
Active Sessions
Web Console: 3 active
SSH Sessions: 1 active
API Calls: 247/hour
Power & Performance
Power State: Running
Load Average: {systemData.load_average.map((avg) => avg.toFixed(2)).join(", ")}
Boot Time: 2.3s
) }