// Agent 管理 & 终端会话 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 import { http, type ListResponse } from '../http'; import { isOnline, timeAgo, asList } from '../../components/agent/agentUtils'; export const agentApi = { getLatest: () => http.get('/agent/latest'), getHistory: (hostname: string, hours = 1) => http.get(`/agent/history/${hostname}?hours=${hours}`), createTask: (data: { hostname: string; type: string; command: string; timeout?: number }) => http.post('/agent/tasks', data), listTasks: (params?: Record) => http.get('/agent/tasks', params), // 直连 SSH 执行命令(即时返回) execCommand: (data: { hostname: string; command: string; timeout?: number }) => http.post('/agent/exec', data), // 聚合查询 getAggregate: (params: { hostname: string; metric: string; interval: string; from?: string; to?: string }) => http.get('/agent/aggregate', params), // 触发聚合 aggregate: (data: { hostname: string; metric: string }) => http.post('/agent/aggregate', data), listRules: () => http.get('/agent/rules'), createRule: ( data: any) => http.post('/agent/rules', data), updateRule: (id: number, data: any) => http.put(`/agent/rules/${id}`, data), deleteRule: (id: number) => http.delete(`/agent/rules/${id}`), quickSetup: (type?: string) => http.post('/agent/rules/quick-setup', { type: type || 'ecs' }), // Agent 安装/卸载 uninstallAgent: (data: { hostname?: string; server_id?: number }) => http.post('/agent/uninstall', data), batchUninstall: (serverIds: number[]) => http.post('/agent/batch-uninstall', { server_ids: serverIds }), batchUpgrade: (serverIds: number[]) => http.post('/agent/batch-upgrade', { server_ids: serverIds }), listAlerts: (params?: Record) => http.get('/agent/alerts', params), resolveAlert: (id: number) => http.post(`/agent/alerts/${id}/resolve`), // 健康探针 getHealthProbes: (params?: Record) => http.get('/agent/health-probes', params), createHealthProbe: ( data: any) => http.post('/agent/health-probes', data), updateHealthProbe: (id: number, data: any) => http.put(`/agent/health-probes/${id}`, data), deleteHealthProbe: (id: number) => http.delete(`/agent/health-probes/${id}`), // 端口策略 getPortPolicy: (hostname: string) => http.get(`/agent/port-policies/${hostname}`), savePortPolicy: (hostname: string, data: { port_filter_mode: string; port_whitelist: number[] }) => http.put(`/agent/port-policies/${hostname}`, data), }; // ==================== 区域管理 API ==================== export const terminalSessionApi = { list: async (params?: { page?: number; page_size?: number; server_id?: number; username?: string; status?: string }) => { return http.get('/terminal-sessions', params); }, get: async (id: number) => { return http.get(`/terminal-sessions/${id}`); }, getRecord: async (id: number) => { return http.get(`/terminal-sessions/${id}/record`); }, delete: async (id: number) => { return http.delete(`/terminal-sessions/${id}`); }, batchDelete: async (ids: number[]) => { return http.post('/terminal-sessions/batch-delete', { ids }); }, }; // ==================== 发布系统 API(仓库/镜像仓库认证) ====================