"use client"; import { useQuery } from "@tanstack/react-query"; import Link from "next/link"; import { api, Server, ServerStatus } from "@/lib/api"; import { Badge, Button, Card } from "@/components/ui"; import { Table, Thead, Tbody, Tr, Th, Td } from "@/components/ui"; function statusVariant(status: ServerStatus) { switch (status) { case "active": return "success"; case "pending": return "warning"; case "offline": return "danger"; } } function formatLastSeen(dateStr: string): string { const date = new Date(dateStr); const now = new Date(); const diffMs = now.getTime() - date.getTime(); const diffSec = Math.floor(diffMs / 1000); const diffMin = Math.floor(diffSec / 60); const diffHour = Math.floor(diffMin / 60); const diffDay = Math.floor(diffHour / 24); if (diffSec < 60) return `${diffSec}s ago`; if (diffMin < 60) return `${diffMin}m ago`; if (diffHour < 24) return `${diffHour}h ago`; return `${diffDay}d ago`; } export default function ServersPage() { const { data: servers, isLoading, error } = useQuery({ queryKey: ["servers"], queryFn: api.listServers, refetchInterval: 30_000, }); return (

Servers

{servers?.length ?? 0} registered server{servers?.length !== 1 ? "s" : ""}

{isLoading ? (
) : error ? (
Failed to load servers. Is the backend running?
) : servers && servers.length > 0 ? ( {servers.map((server: Server) => ( ))}
Hostname IP Address OS Status Last Seen
{server.hostname} {server.ip_address} {server.os_info} {server.status} {server.last_seen ? formatLastSeen(server.last_seen) : "Never"}
) : (

No servers registered yet.

)}
); }