"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?.length ?? 0} registered server{servers?.length !== 1 ? "s" : ""}
| Hostname | IP Address | OS | Status | Last Seen | |
|---|---|---|---|---|---|
| {server.hostname} | {server.ip_address} | {server.os_info} |
|
{server.last_seen ? formatLastSeen(server.last_seen) : "Never"} |
No servers registered yet.