useDashboard.ts
1 import { useQuery } from '@tanstack/react-query' 2 import { fetchApi } from '@/lib/api' 3 import type { 4 HealthStatus, 5 SystemData, 6 AgentsData, 7 QueueData, 8 HistoryData, 9 ReposData, 10 TestnetData, 11 DataAge, 12 PipelineMetrics, 13 PipelineEvent, 14 RunnerMetrics, 15 SccacheData, 16 } from '@/types/api' 17 import { API_ENDPOINTS } from '@/types/api' 18 19 const POLL_INTERVAL = 3_000 20 const PIPELINE_POLL_INTERVAL = 5_000 21 22 export function useHealth() { 23 return useQuery({ 24 queryKey: ['health'], 25 queryFn: () => fetchApi<HealthStatus>(API_ENDPOINTS.health), 26 refetchInterval: POLL_INTERVAL, 27 retry: false, 28 }) 29 } 30 31 export function useSystem() { 32 return useQuery({ 33 queryKey: ['system'], 34 queryFn: () => fetchApi<SystemData>(API_ENDPOINTS.system), 35 refetchInterval: POLL_INTERVAL, 36 }) 37 } 38 39 export function useAgents() { 40 return useQuery({ 41 queryKey: ['woodpeckerAgents'], 42 queryFn: () => fetchApi<AgentsData>(API_ENDPOINTS.woodpeckerAgents), 43 refetchInterval: POLL_INTERVAL, 44 }) 45 } 46 47 export function useQueue() { 48 return useQuery({ 49 queryKey: ['queue'], 50 queryFn: () => fetchApi<QueueData>(API_ENDPOINTS.queue), 51 refetchInterval: POLL_INTERVAL, 52 }) 53 } 54 55 export function useHistory() { 56 return useQuery({ 57 queryKey: ['history'], 58 queryFn: () => fetchApi<HistoryData>(API_ENDPOINTS.history), 59 refetchInterval: POLL_INTERVAL, 60 }) 61 } 62 63 export function useRepos() { 64 return useQuery({ 65 queryKey: ['repos'], 66 queryFn: () => fetchApi<ReposData>(API_ENDPOINTS.repos), 67 refetchInterval: POLL_INTERVAL, 68 }) 69 } 70 71 export function useTestnet() { 72 return useQuery({ 73 queryKey: ['testnet'], 74 queryFn: () => fetchApi<TestnetData>(API_ENDPOINTS.testnet), 75 refetchInterval: POLL_INTERVAL, 76 }) 77 } 78 79 export function useDataAge() { 80 return useQuery({ 81 queryKey: ['dataAge'], 82 queryFn: () => fetchApi<DataAge>(API_ENDPOINTS.dataAge), 83 refetchInterval: POLL_INTERVAL, 84 }) 85 } 86 87 export function usePipelineMetrics() { 88 return useQuery({ 89 queryKey: ['pipelineMetrics'], 90 queryFn: () => fetchApi<PipelineMetrics>(API_ENDPOINTS.pipelineMetrics), 91 refetchInterval: PIPELINE_POLL_INTERVAL, 92 }) 93 } 94 95 export function usePipelineEvents() { 96 return useQuery({ 97 queryKey: ['pipelineEvents'], 98 queryFn: () => fetchApi<PipelineEvent[]>(API_ENDPOINTS.pipelineEvents), 99 refetchInterval: PIPELINE_POLL_INTERVAL, 100 }) 101 } 102 103 export function useRunnerMetrics() { 104 return useQuery({ 105 queryKey: ['runnerMetrics'], 106 queryFn: () => fetchApi<RunnerMetrics>(API_ENDPOINTS.runnerMetrics), 107 refetchInterval: PIPELINE_POLL_INTERVAL, 108 }) 109 } 110 111 export function useSccache() { 112 return useQuery({ 113 queryKey: ['sccache'], 114 queryFn: () => fetchApi<SccacheData>(API_ENDPOINTS.sccache), 115 refetchInterval: PIPELINE_POLL_INTERVAL, 116 }) 117 }