'use client'; import { Badge } from '@workspace/ui/components/badge'; import { Progress } from '@workspace/ui/components/progress'; import { ScrollArea } from '@workspace/ui/components/scroll-area'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from '@workspace/ui/components/tooltip'; import { formatDate } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; export function formatPercentage(value: number): string { return `${value.toFixed(1)}%`; } export function NodeStatusCell({ status }: { status: API.NodeStatus }) { const t = useTranslations('server.node'); const { last_at, online_users, status: serverStatus, } = status || { online_users: [], status: { cpu: 0, mem: 0, disk: 0, updated_at: 0, }, last_at: 0, }; const isOnline = last_at > 0; const badgeVariant = isOnline ? 'default' : 'destructive'; const badgeText = isOnline ? t('normal') : t('abnormal'); const onlineCount = Array.isArray(online_users) ? online_users?.length : 0; return (
{badgeText} {t('onlineCount')}: {onlineCount}
CPU {formatPercentage(serverStatus?.cpu ?? 0)}
{t('memory')} {formatPercentage(serverStatus?.mem ?? 0)}
{t('disk')} {formatPercentage(serverStatus?.disk ?? 0)}
{isOnline && (
{t('lastUpdated')}: {formatDate(serverStatus?.updated_at ?? 0)}
)}
{isOnline && onlineCount > 0 && (

{t('onlineUsers')}

{online_users.map((user, index) => (
{user.ip} (UID: {user.uid})
))}
)}
); }