import { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Box, Typography, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Chip, FormControl, InputLabel, Select, MenuItem, Pagination, } from '@mui/material'; import { Error as ErrorIcon, Warning as WarningIcon, CheckCircle as CheckIcon, Info as InfoIcon, Speed as SpeedIcon, } from '@mui/icons-material'; import { logsApi, serversApi } from '../utils/api'; const LOGS_PER_PAGE = 25; export default function Logs() { const [page, setPage] = useState(1); const [eventType, setEventType] = useState(''); const [serverFilter, setServerFilter] = useState(''); const { data: servers } = useQuery({ queryKey: ['servers'], queryFn: async () => { const response = await serversApi.getAll(); return response.data; }, }); const { data: logs } = useQuery({ queryKey: ['logs', eventType, serverFilter], queryFn: async () => { const response = await logsApi.getAll({ event_type: eventType || undefined, server_id: serverFilter || undefined, limit: 100, }); return response.data; }, }); const getEventIcon = (eventType: string) => { switch (eventType) { case 'panic': return ; case 'error': return ; case 'warning': return ; case 'fan_change': return ; case 'info': return ; default: return ; } }; const getEventColor = (eventType: string) => { switch (eventType) { case 'panic': return 'error'; case 'error': return 'error'; case 'warning': return 'warning'; case 'fan_change': return 'info'; case 'info': return 'default'; default: return 'default'; } }; const totalPages = Math.ceil((logs?.length || 0) / LOGS_PER_PAGE); const paginatedLogs = logs?.slice((page - 1) * LOGS_PER_PAGE, page * LOGS_PER_PAGE); return ( System Logs Event Type Server Time Server Type Message Details {paginatedLogs?.map((log) => ( {getEventIcon(log.event_type)} {new Date(log.timestamp).toLocaleString()} {log.server_id ? servers?.find((s) => s.id === log.server_id)?.name || `Server ${log.server_id}` : 'System'} {log.message} {log.details} ))} {!paginatedLogs?.length && ( No logs found )}
{totalPages > 1 && ( setPage(value)} color="primary" /> )}
); }