import React, { useEffect, useState } from 'react'; import { MonitoringLog } from '../types'; import { Terminal, AlertTriangle, CheckCircle, Clock, FileText } from 'lucide-react'; const LogMonitor: React.FC = () => { const [logs, setLogs] = useState([]); const [summary, setSummary] = useState("Waiting for logs to generate summary..."); const [isMonitoring, setIsMonitoring] = useState(false); // Simulate incoming logs useEffect(() => { let interval: ReturnType; if (isMonitoring) { interval = setInterval(() => { const sources: ('JulesAPI' | 'HuggingFace' | 'System')[] = ['JulesAPI', 'HuggingFace', 'System']; const levels: ('INFO' | 'WARN' | 'ERROR')[] = ['INFO', 'INFO', 'INFO', 'WARN', 'INFO']; // Mostly info const randomSource = sources[Math.floor(Math.random() * sources.length)]; const randomLevel = levels[Math.floor(Math.random() * levels.length)]; const newLog: MonitoringLog = { id: Math.random().toString(36), timestamp: new Date().toISOString(), source: randomSource, level: randomLevel, message: generateMockLogMessage(randomSource, randomLevel) }; setLogs(prev => { const newLogs = [newLog, ...prev].slice(0, 100); updateSummary(newLogs); // Trigger summary update return newLogs; }); }, 3000); } return () => clearInterval(interval); }, [isMonitoring]); const generateMockLogMessage = (source: string, level: string) => { if (source === 'JulesAPI') { return level === 'ERROR' ? 'Session ID #8492 connection timeout.' : 'Received activity update: Code generation in progress.'; } if (source === 'HuggingFace') { return level === 'WARN' ? 'Build container utilizing 85% memory.' : 'Successfully pulled layer sha256:e7c96db...'; } return 'Health check ping passed.'; }; const updateSummary = (currentLogs: MonitoringLog[]) => { const errors = currentLogs.filter(l => l.level === 'ERROR').length; const warns = currentLogs.filter(l => l.level === 'WARN').length; const latest = currentLogs[0]; setSummary(`Status: ${errors > 0 ? 'Issues Detected' : 'Healthy'}. Found ${errors} errors and ${warns} warnings in the last batch. Latest activity from ${latest?.source || 'System'}: ${latest?.message || 'None'}. Sending condensed report to Jules...`); }; return (

Live Monitor

Monitoring Agent Active Polling Interval: 10s
{/* Summary Panel */}

Agent Summary (For Jules)

{isMonitoring ? summary : "Start monitoring to generate summaries..."}

{logs.length === 0 ? (

Waiting for logs stream...

) : ( logs.map((log) => (
{log.timestamp.split('T')[1].slice(0, 12)} {log.source} [{log.level}] {log.message}
)) )}
Connected to gradio_logsview Mode: Summarization
); }; export default LogMonitor;