"use client"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Label } from "@/components/ui/label"; import { cn } from "@/lib/utils"; import { CircleCheckBig, Cpu, HardDrive, MemoryStick, Network, TriangleAlert } from "lucide-react"; import { ChartAreaGradient } from "./chart"; import { Progress } from "@/components/ui/progress"; import getSession from "@/hooks/getSession"; import ServerComponent, { ByteUnit, UsageBar } from "./server"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { useEffect, useState } from "react"; import useSession from "@/hooks/useSession"; import Server from "@/types/server"; import { toast } from "sonner"; export function generateHourlyData() { const result = []; for (let hour = 24; hour >= 0; hour--) { result.push({ hour: hour, cpu: Math.floor(Math.random() * 20 + 30), // random CPU usage between 0-99 ram: Math.floor(Math.random() * 40 + 40), // random RAM usage between 0-99 }); } return result; } export function SummaryCard({ children, value, icon, className, }: { children: React.ReactNode; value: string; icon: React.ElementType; className?: string; }) { const Icon = icon; return (
); } export function Summary({ value, children, }: { value: number; children: React.ReactNode; }) { return (
); } function average(values: Array, p: (v: T) => number) { return values.length > 0 ? values.reduce((sum, value) => sum + p(value), 0) / values.length : 0; } const d = generateHourlyData(); export default function Dashboard() { const session = useSession(); const [servers, setServers] = useState([]); const [searchedServers, setSearchedServers] = useState([]); const [serversQuery, setServersQuery] = useState(""); const [serverData, setServerData] = useState({ online: 0, issues: 0, cpu: 0, memory: 0, storage: 0, network: 0, }); const getServers = () => { if (!session) return; session.getServers().then((servers) => { setServers(servers); setServerData({ online: servers.reduce( (sum, server) => (server.status == "online" ? sum + 1 : sum), 0 ), issues: servers.reduce( (sum, server) => (server.status == "warning" ? sum + 1 : sum), 0 ), cpu: average(servers, (s) => s.cpu), memory: average(servers, (s) => s.memory), storage: average(servers, (s) => s.storage), network: servers.reduce((sum, s) => sum + s.network, 0), });`` }).catch((e) => { console.error("Error fetching servers:", e); }) }; useEffect(() => { const interval = setInterval(() => { console.log("Refreshing servers data..."); getServers(); }, 3000); // Cleanup on unmount return () => clearInterval(interval); }, [session]); useEffect(() => { const timeout = setTimeout(() => { let tokens = serversQuery.toLowerCase().split(" "); setSearchedServers( servers.filter((s) => tokens.some( (t) => s.name.toLowerCase().includes(t) || s.status.includes(t) ) ) ); }, 30); return () => clearTimeout(timeout); }, [serversQuery, servers]); return (
Online Servers Online Issues Avg CPU Usage CPU Avg Memory Usage Memory
System Overview
setServersQuery(e.currentTarget.value)} placeholder="Search servers by name, location or IP..." />
{searchedServers.map((s, i) => ( ))}
); }