"use client"; import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { useParams, useRouter } from "next/navigation"; import Link from "next/link"; import { api, ServerStatus } from "@/lib/api"; import { Badge, Button, Card, CardHeader, CardTitle } 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 formatDate(dateStr: string) { return new Date(dateStr).toLocaleString(); } export default function ServerDetailPage() { const params = useParams(); const router = useRouter(); const queryClient = useQueryClient(); const serverId = params.id as string; const [confirmDelete, setConfirmDelete] = useState(false); const [copiedUpdate, setCopiedUpdate] = useState(false); const { data: server, isLoading, error } = useQuery({ queryKey: ["servers", serverId], queryFn: () => api.getServer(serverId), refetchInterval: 30_000, }); const { mutate: generateKey, isPending: isGenerating } = useMutation({ mutationFn: () => api.generateKeyForServer(serverId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["servers", serverId] }); queryClient.invalidateQueries({ queryKey: ["keys"] }); }, }); const { mutate: deleteServer, isPending: isDeleting } = useMutation({ mutationFn: () => api.deleteServer(serverId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["servers"] }); router.push("/servers"); }, }); if (isLoading) { return (
{server.ip_address}
Run this command on the server as root to update the agent to the latest version:
${" "}
{api.getUpdateCommand()}
No keys assigned to this server.
| Label | Fingerprint | Source | Status | Assigned | |
|---|---|---|---|---|---|
| {assignment.key.label} | {assignment.key.fingerprint} |
|
|
{formatDate(assignment.assigned_at)} |