/** * Health Status Display Object * * Provides formatting and display logic for health status data. * This display object isolates UI-specific formatting from business logic. */ export class HealthStatusDisplay { static formatStatusLabel(status: 'ok' | 'degraded' | 'error' | 'unknown'): string { const labels: Record = { ok: 'Healthy', degraded: 'Degraded', error: 'Error', unknown: 'Unknown', }; return labels[status] || 'Unknown'; } static formatStatusColor(status: 'ok' | 'degraded' | 'error' | 'unknown'): string { const colors: Record = { ok: '#10b981', // green-500 degraded: '#f59e0b', // amber-500 error: '#ef4444', // red-500 unknown: '#6b7280', // gray-500 }; return colors[status] || '#6b7280'; } static formatStatusIcon(status: 'ok' | 'degraded' | 'error' | 'unknown'): string { const icons: Record = { ok: '✓', degraded: '⚠', error: '✕', unknown: '?', }; return icons[status] || '?'; } static formatTimestamp(timestamp: string): string { const date = new Date(timestamp); return date.toLocaleString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', }); } static formatRelativeTime(timestamp: string): string { const now = new Date(); const date = new Date(timestamp); const diffMs = now.getTime() - date.getTime(); const diffMins = Math.floor(diffMs / 60000); const diffHours = Math.floor(diffMs / 3600000); const diffDays = Math.floor(diffMs / 86400000); if (diffMins < 1) return 'Just now'; if (diffMins < 60) return `${diffMins}m ago`; if (diffHours < 24) return `${diffHours}h ago`; if (diffDays < 7) return `${diffDays}d ago`; return `${Math.floor(diffDays / 7)}w ago`; } }