// 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 { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; 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'; 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 (
); } return (
{/* 页头 */}

数据源管理

Prometheus 数据源配置,用于指标监控与监控大屏

{/* 数据源列表 */} 已配置的数据源 {sources.length} {sources.length === 0 ? (

暂无数据源

点击「添加数据源」开始配置

) : (
{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 && ( )}
)}
); }