"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 (
);
}