/ frontend / src / hooks / useDashboard.ts
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  }