// Prometheus 数据源管理 — 列表编排器 // Logan.Li import { useState, useEffect } from 'react'; import { Database, Plus, Edit, Trash2, Star, RefreshCw, Key, Plug, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { usePromDatasources, usePromDatasourceMutations } from '@/hooks/api'; import type { PromDS } from './prometheus-ds/types'; import { handleTestQuick } from './prometheus-ds/helpers'; import PromDsFormDialog from './prometheus-ds/PromDsFormDialog'; import { PageLoading } from '@/components/layout/PageLoading'; import { PageEmpty } from '@/components/layout/PageEmpty'; import { ContentPanel } from '@/components/layout/ContentPanel'; export default function PrometheusDatasourceManager() { const _confirm = useConfirm(); const { data: sources = [], isLoading, isError } = usePromDatasources(); const { deleteMutation, setDefaultMutation } = usePromDatasourceMutations(); const [dialogOpen, setDialogOpen] = useState(false); const [editingDs, setEditingDs] = useState(null); useEffect(() => { if (isError) toast.error('获取数据源列表失败'); }, [isError]); const openCreate = () => { setEditingDs(null); setDialogOpen(true); }; const openEdit = (ds: PromDS) => { setEditingDs(ds); setDialogOpen(true); }; const handleDelete = async (ds: PromDS) => { const ok = await _confirm({ title: '删除数据源', description: `确定删除数据源「${ds.name}」吗?此操作不可撤销。`, variant: 'destructive', }); if (!ok) return; try { await deleteMutation.mutateAsync(ds.id); toast.success('已删除'); } catch { toast.error('删除失败'); } }; const handleSetDefault = async (ds: PromDS) => { try { await setDefaultMutation.mutateAsync(ds.id); toast.success(`已将「${ds.name}」设为默认数据源`); } catch { toast.error('设置失败'); } }; if (isLoading) { return ; } const toolbar = (
Prometheus 数据源 {sources.length}
); return (
{sources.length === 0 ? ( } title="暂无 Prometheus 数据源" description="添加数据源后可用于指标监控与监控大屏" action={( )} /> ) : (
{sources.map(ds => ( ))}
名称 URL 默认 状态 操作
Prometheus { (e.target as HTMLImageElement).style.display = 'none'; }} />
{ds.name} {ds.basic_auth && }
{ds.url} {ds.is_default ? ( 默认 ) : ( -- )} {ds.status === 1 ? ( 启用 ) : ( 禁用 )}
{!ds.is_default && ( )}
)}
); }