import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { StorageCleanupResult, StorageCleanupTarget, SystemHealth, SystemHealthHistory, SystemStorage, } from "@umt/contracts"; import { apiData } from "~/lib/api.ts"; import { qk } from "~/lib/query-keys.ts"; // 进程与健康(W9-I):GET /system/health、/system/health/history;存储(CACHE-2):GET /system/storage、 // POST /system/storage/cleanup/{target}。仅 admin。 export function useSystemHealth(refetchMs = 15_000) { return useQuery({ queryKey: qk.sub("system", "health"), queryFn: ({ signal }) => apiData("/system/health", { signal }), refetchInterval: refetchMs, }); } export function useSystemHealthHistory(hours: number) { return useQuery({ queryKey: qk.sub("system", "history", hours), queryFn: ({ signal }) => apiData("/system/health/history", { params: { hours }, signal }), refetchInterval: 60_000, }); } /** 存储明细:目录用量服务端缓存 5 分钟,这里 1 分钟刷新一次 */ export function useSystemStorage() { return useQuery({ queryKey: qk.sub("system", "storage"), queryFn: ({ signal }) => apiData("/system/storage", { signal }), refetchInterval: 60_000, }); } /** 手动清理:把对应的维护任务排入立即执行 */ export function useStorageCleanup() { const qc = useQueryClient(); return useMutation({ mutationFn: (target: StorageCleanupTarget) => apiData("/system/storage/cleanup/{target}", { method: "POST", pathParams: { target }, body: {}, }), onSuccess: () => void qc.invalidateQueries({ queryKey: qk.sub("system", "storage") }), }); }