import { useState } from 'react'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Search, AlertTriangle, Bell, CheckCircle, Loader2 } from 'lucide-react'; import { alertApi } from '@/services/api'; export function AlertEventsTab({ alerts, loading, onReload, }: { alerts: any[]; loading: boolean; onReload: () => void; }) { const _confirm = useConfirm(); const [searchQuery, setSearchQuery] = useState(''); const [severityFilter, setSeverityFilter] = useState('all'); const [statusFilter, setStatusFilter] = useState('all'); const filteredEvents = alerts.filter((event) => { const matchesSearch = ((event.rule && event.rule.name) || event.message || '').toLowerCase().includes(searchQuery.toLowerCase()) || (event.target || '').toLowerCase().includes(searchQuery.toLowerCase()); const matchesSeverity = severityFilter === 'all' || event.severity === severityFilter; const matchesStatus = statusFilter === 'all' || event.status === statusFilter; return matchesSearch && matchesSeverity && matchesStatus; }); const getSeverityBadge = (severity: any) => { switch (severity) { case 'critical': return ( 严重 ); case 'warning': return ( 警告 ); case 'info': return ( 提示 ); default: return null; } }; const getStatusBadge = (status: any) => { switch (status) { case 'firing': return ( 触发中 ); case 'resolved': return ( 已恢复 ); default: return null; } }; const handleAcknowledge = async (id: any) => { try { await alertApi.acknowledge(id); onReload(); } catch (error) { console.error('Failed to acknowledge alert:', error); } }; return (
{/* Filters */}
setSearchQuery(e.target.value)} className="pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" />
{/* Events Table */}
级别 告警名称 状态 目标 当前值 阈值 开始时间 操作 {loading ? ( 加载中... ) : filteredEvents.map((event) => ( {getSeverityBadge(event.severity)} {(event.rule && event.rule.name) || event.message} {getStatusBadge(event.status)} {event.target} {event.value} {event.threshold} {event.created_at ? new Date(event.created_at).toLocaleString() : '--'}
{event.status === 'firing' && ( )}
))}
); }