/** * K8sPodStatusCard - Kubernetes Pod Status * ========================================= * Phase 19.4a - GenUI K8s Pod 狀態卡 * * @see ADR-032 GenUI Dynamic Rendering * @author Claude Code (首席架構師) * @version 1.0.0 * @date 2026-03-28 (台北時間) */ import React from 'react' import { Box, CheckCircle, XCircle, RefreshCw } from 'lucide-react' interface PodInfo { name: string status: 'Running' | 'Pending' | 'Failed' | 'CrashLoopBackOff' | 'Terminating' restarts?: number age?: string } interface K8sPodStatusCardProps { data: { namespace: string pods: PodInfo[] summary?: { running: number total: number } } } export const K8sPodStatusCard: React.FC = ({ data }) => { const summary = data.summary || { running: data.pods.filter(p => p.status === 'Running').length, total: data.pods.length, } const isHealthy = summary.running === summary.total const statusIcon = (status: PodInfo['status']) => { switch (status) { case 'Running': return case 'Pending': return case 'Failed': case 'CrashLoopBackOff': return case 'Terminating': return default: return } } const statusColor = (status: PodInfo['status']) => { switch (status) { case 'Running': return 'text-green-600' case 'Pending': return 'text-yellow-600' case 'Failed': case 'CrashLoopBackOff': return 'text-red-600' default: return 'text-gray-600' } } return (
K8s Pods // {data.namespace}
{summary.running}/{summary.total} RUNNING
{data.pods.map((pod, i) => (
{statusIcon(pod.status)} {pod.name} {pod.status} {pod.restarts !== undefined && pod.restarts > 0 && ( R:{pod.restarts} )} {pod.age && ( {pod.age} )}
))}
) }