// 系统信息 Tab 内容 // Logan.Li import { Activity, HardDrive } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { TabsContent } from '@/components/ui/tabs'; import { parseJSON } from './utils'; interface SystemInfoSectionProps { selectedHost: string; serverInfo: any; latest: any; heartbeatInfo: any; portInfoCount: number; } export function SystemInfoSection({ selectedHost, serverInfo, latest, heartbeatInfo, portInfoCount, }: SystemInfoSectionProps) { const disk = latest?.disk_info ? parseJSON(latest.disk_info) : null; const parts = disk ? (Array.isArray(disk) ? disk : (disk.partitions || [])) : []; return (
{[ ['主机名', serverInfo?.hostname || selectedHost], ['IP 地址', serverInfo?.ip || '—'], ['操作系统', serverInfo?.os || '—'], ['内核版本', serverInfo?.kernel || '—'], ['CPU 核心数', serverInfo?.cpu_cores || '—'], ['总内存', serverInfo?.mem_total ? `${serverInfo.mem_total.toFixed(0)} GB` : '—'], ['已用内存', serverInfo?.mem_used ? `${serverInfo.mem_used.toFixed(1)} GB` : '—'], ['运行时长', serverInfo?.uptime ? `${Math.floor(serverInfo.uptime / 86400)}天 ${Math.floor((serverInfo.uptime % 86400) / 3600)}时` : '—'], ['Agent 版本', heartbeatInfo?.version || serverInfo?.agent_version || '—'], ['Agent 序列号', heartbeatInfo?.report_seq != null ? String(heartbeatInfo.report_seq) : '—'], ['监听端口数', portInfoCount > 0 ? `${portInfoCount}` : '—'], ['Agent RSS', heartbeatInfo?.self_rss_mb ? `${heartbeatInfo.self_rss_mb.toFixed(1)} MB` : '—'], ].map(([label, val]) => (
{label}: {val}
))}
{latest && (

系统负载 (Load Average)

1min {latest.load1 ?? '--'}
5min {latest.load5 ?? '--'}
15min {latest.load15 ?? '--'}
)} {parts.length > 0 && (

磁盘分区

{parts.map((p: any, i: number) => (
{p.mount || p.mountpoint || p.device || `disk${i}`}
{(p.used_gb ?? 0).toFixed(1)}/{(p.total_gb ?? 0).toFixed(0)}GB {(p.usage_percent ?? p.used_percent ?? 0).toFixed(1)}%
))}
)} ); }