Files
aiops/frontend/src/hooks/api/useTerminalSessions.ts
T
Logan.Li f45e203e21 refactor(frontend): P1-P2 架构统一 — utils/hooks/api 模块化
P1:
- utils/storage.ts、theme.ts、validate.ts + index 统一出口
- request/store/useTheme 接入 storage;清零 confirm/alert
- PipelineManager、TerminalAuditTab 拆分子模块(<700行红线)

P2:
- api/monitor、api/deploy 子目录化
- hooks/api 扩展:servers/pipelines/alerts/audit/sessionCommands
- PipelineManager、AuditOperationsTab 接入 TanStack Query
2026-06-26 00:18:14 +08:00

63 lines
1.6 KiB
TypeScript

// 终端会话列表 — TanStack Query // Logan.Li
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { terminalSessionApi } from '@/api';
import { queryKeys } from './queryKeys';
import { unwrapList } from './unwrap';
export interface TerminalSession {
id: number;
user_id?: number;
username: string;
server_id: number;
server_name: string;
server_ip: string;
server_port: number;
client_ip: string;
status: string;
duration: number;
record_size: number;
start_time: string;
end_time?: string | null;
}
type ListParams = {
page?: number;
page_size?: number;
server_id?: number;
username?: string;
status?: string;
};
export function useTerminalSessions(params: ListParams = { page: 1, page_size: 100 }) {
return useQuery({
queryKey: queryKeys.terminalSessions(params),
queryFn: async () => {
const resp = await terminalSessionApi.list(params);
return unwrapList<TerminalSession>(resp);
},
});
}
export function useTerminalSessionMutations() {
const qc = useQueryClient();
const invalidate = () => qc.invalidateQueries({ queryKey: ['terminal-sessions'] });
const killMutation = useMutation({
mutationFn: (id: number) => terminalSessionApi.kill(id),
onSuccess: invalidate,
});
const deleteMutation = useMutation({
mutationFn: (id: number) => terminalSessionApi.delete(id),
onSuccess: invalidate,
});
const batchDeleteMutation = useMutation({
mutationFn: (ids: number[]) => terminalSessionApi.batchDelete(ids),
onSuccess: invalidate,
});
return { killMutation, deleteMutation, batchDeleteMutation, invalidate };
}