import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { adminFetch } from './admin-api'; export interface DatabaseStatus { connected: boolean; version: string; host: string; schema: string; timescaleDb: boolean; } export interface PoolStats { activeConnections: number; idleConnections: number; pendingThreads: number; maxPoolSize: number; maxWaitMs: number; } export interface TableInfo { tableName: string; rowCount: number; dataSize: string; indexSize: string; dataSizeBytes: number; indexSizeBytes: number; } export interface ActiveQuery { pid: number; durationSeconds: number; state: string; query: string; } export function useDatabaseStatus() { return useQuery({ queryKey: ['admin', 'database', 'status'], queryFn: () => adminFetch('/database/status'), }); } export function useDatabasePool() { return useQuery({ queryKey: ['admin', 'database', 'pool'], queryFn: () => adminFetch('/database/pool'), refetchInterval: 15000, }); } export function useDatabaseTables() { return useQuery({ queryKey: ['admin', 'database', 'tables'], queryFn: () => adminFetch('/database/tables'), }); } export function useDatabaseQueries() { return useQuery({ queryKey: ['admin', 'database', 'queries'], queryFn: () => adminFetch('/database/queries'), refetchInterval: 15000, }); } export function useKillQuery() { const qc = useQueryClient(); return useMutation({ mutationFn: async (pid: number) => { await adminFetch(`/database/queries/${pid}/kill`, { method: 'POST' }); }, onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'database', 'queries'] }), }); }