import React, { useState, useEffect } from 'react'; import { Monitor, Cpu, HardDrive, Database, Wifi, Play, Pause, Settings, RefreshCw, AlertTriangle, CheckCircle, XCircle, Clock, Activity, Server, BarChart3, Sliders } from 'lucide-react'; import { apiClient } from '../services/api'; import { useWebSocket } from '../contexts/WebSocketContext'; import LoadingSpinner from '../components/Common/LoadingSpinner'; import toast from 'react-hot-toast'; interface SystemStatus { status: string; uptime: string; version: string; database_status: string; redis_status: string; llm_service_status: string; discord_bot_status: string; active_processes: string[]; error_count: number; warnings_count: number; performance_metrics: { avg_response_time: number; requests_per_minute: number; database_query_time: number; }; resource_usage: { cpu_percent: number; memory_total_mb: number; memory_used_mb: number; memory_percent: number; }; } interface SystemConfig { conversation_frequency: number; response_delay_min: number; response_delay_max: number; personality_change_rate: number; memory_retention_days: number; max_conversation_length: number; creativity_boost: boolean; conflict_resolution_enabled: boolean; safety_monitoring: boolean; auto_moderation: boolean; backup_frequency_hours: number; } interface LogEntry { timestamp: string; level: string; component: string; message: string; metadata?: any; } const SystemStatus: React.FC = () => { const [systemStatus, setSystemStatus] = useState(null); const [systemConfig, setSystemConfig] = useState(null); const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); const [configLoading, setConfigLoading] = useState(false); const [showConfig, setShowConfig] = useState(false); const [showLogs, setShowLogs] = useState(false); const { connected } = useWebSocket(); useEffect(() => { loadSystemData(); const interval = setInterval(loadSystemStatus, 30000); // Refresh every 30s return () => clearInterval(interval); }, []); const loadSystemData = async () => { await Promise.all([ loadSystemStatus(), loadSystemConfig(), loadSystemLogs() ]); setLoading(false); }; const loadSystemStatus = async () => { try { const response = await apiClient.getSystemStatus(); setSystemStatus(response.data); } catch (error) { console.error('Failed to load system status:', error); // Fallback demo data setSystemStatus({ status: 'running', uptime: '2d 14h 32m', version: '1.0.0', database_status: 'healthy', redis_status: 'healthy', llm_service_status: 'healthy', discord_bot_status: 'connected', active_processes: ['main', 'conversation_engine', 'scheduler', 'admin_interface'], error_count: 0, warnings_count: 2, performance_metrics: { avg_response_time: 2.5, requests_per_minute: 30, database_query_time: 0.05 }, resource_usage: { cpu_percent: 15.3, memory_total_mb: 8192, memory_used_mb: 3420, memory_percent: 41.7 } }); } }; const loadSystemConfig = async () => { try { const response = await apiClient.getSystemConfig(); setSystemConfig(response.data); } catch (error) { console.error('Failed to load system config:', error); // Fallback demo data setSystemConfig({ conversation_frequency: 0.5, response_delay_min: 1.0, response_delay_max: 5.0, personality_change_rate: 0.1, memory_retention_days: 90, max_conversation_length: 50, creativity_boost: true, conflict_resolution_enabled: true, safety_monitoring: true, auto_moderation: false, backup_frequency_hours: 24 }); } }; const loadSystemLogs = async () => { try { const response = await apiClient.getSystemLogs(50); setLogs(response.data); } catch (error) { console.error('Failed to load system logs:', error); // Fallback demo data setLogs([ { timestamp: new Date().toISOString(), level: 'INFO', component: 'conversation_engine', message: 'Character Alex initiated conversation with Sage' }, { timestamp: new Date(Date.now() - 60000).toISOString(), level: 'DEBUG', component: 'memory_system', message: 'Memory consolidation completed for Luna' }, { timestamp: new Date(Date.now() - 120000).toISOString(), level: 'WARN', component: 'scheduler', message: 'High memory usage detected' } ]); } }; const handleSystemAction = async (action: 'pause' | 'resume') => { try { if (action === 'pause') { await apiClient.pauseSystem(); toast.success('System paused successfully'); } else { await apiClient.resumeSystem(); toast.success('System resumed successfully'); } await loadSystemStatus(); } catch (error) { toast.error(`Failed to ${action} system`); } }; const handleConfigUpdate = async (updatedConfig: Partial) => { try { setConfigLoading(true); await apiClient.updateSystemConfig(updatedConfig); setSystemConfig(prev => prev ? { ...prev, ...updatedConfig } : null); toast.success('Configuration updated successfully'); } catch (error) { toast.error('Failed to update configuration'); } finally { setConfigLoading(false); } }; const getStatusIcon = (status: string) => { switch (status.toLowerCase()) { case 'healthy': case 'connected': case 'running': return ; case 'warning': case 'paused': return ; case 'error': case 'disconnected': return ; default: return ; } }; const getStatusColor = (status: string) => { switch (status.toLowerCase()) { case 'healthy': case 'connected': case 'running': return 'text-green-600'; case 'warning': case 'paused': return 'text-yellow-600'; case 'error': case 'disconnected': return 'text-red-600'; default: return 'text-gray-600'; } }; const getLevelColor = (level: string) => { switch (level.toUpperCase()) { case 'ERROR': return 'text-red-600 bg-red-50'; case 'WARN': return 'text-yellow-600 bg-yellow-50'; case 'INFO': return 'text-blue-600 bg-blue-50'; case 'DEBUG': return 'text-gray-600 bg-gray-50'; default: return 'text-gray-600 bg-gray-50'; } }; if (loading) { return (
); } return (
{/* Header */}

System Status

Monitor system health and performance

{connected ? 'Real-time Connected' : 'Disconnected'}
{/* System Overview */}

System Status

{getStatusIcon(systemStatus?.status || 'unknown')}

{systemStatus?.status || 'Unknown'}

Uptime

{systemStatus?.uptime || 'Unknown'}

Errors

{systemStatus?.error_count || 0}

Warnings

{systemStatus?.warnings_count || 0}

{/* System Controls */}

System Controls

{/* Service Status */}
Database
{getStatusIcon(systemStatus?.database_status || 'unknown')} {systemStatus?.database_status || 'Unknown'}
Redis
{getStatusIcon(systemStatus?.redis_status || 'unknown')} {systemStatus?.redis_status || 'Unknown'}
LLM Service
{getStatusIcon(systemStatus?.llm_service_status || 'unknown')} {systemStatus?.llm_service_status || 'Unknown'}
Discord Bot
{getStatusIcon(systemStatus?.discord_bot_status || 'unknown')} {systemStatus?.discord_bot_status || 'Unknown'}
{/* Resource Usage */}

Resource Usage

CPU Usage
{systemStatus?.resource_usage?.cpu_percent?.toFixed(1) || 0}%
Memory Usage
{systemStatus?.resource_usage?.memory_used_mb || 0}MB / {systemStatus?.resource_usage?.memory_total_mb || 0}MB ({systemStatus?.resource_usage?.memory_percent?.toFixed(1) || 0}%)

Performance Metrics

Avg Response Time {systemStatus?.performance_metrics?.avg_response_time?.toFixed(1) || 0}s
Requests/Min {systemStatus?.performance_metrics?.requests_per_minute || 0}
DB Query Time {systemStatus?.performance_metrics?.database_query_time?.toFixed(3) || 0}s
{/* Configuration Panel */} {showConfig && systemConfig && (

System Configuration

handleConfigUpdate({ conversation_frequency: parseFloat(e.target.value) })} className="w-full" disabled={configLoading} /> {systemConfig.conversation_frequency}
handleConfigUpdate({ memory_retention_days: parseInt(e.target.value) })} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-1 focus:ring-primary-500" disabled={configLoading} />
handleConfigUpdate({ max_conversation_length: parseInt(e.target.value) })} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-1 focus:ring-primary-500" disabled={configLoading} />
)} {/* System Logs */}

System Logs

{showLogs && (
{logs.map((log, index) => (
{log.level}
{log.component} {new Date(log.timestamp).toLocaleTimeString()}

{log.message}

))}
)}
); }; export default SystemStatus;