| import useSWR from "swr"; |
| import queryString from "query-string"; |
| |
| import fetcher from "./fetcher"; |
| |
| export interface BuildkiteJobStatsParams { |
| branch?: string; |
| from?: string; |
| } |
| |
| export interface BuildkiteJobStats { |
| org: string; |
| pipeline: string; |
| items: Array<BuildkiteJobStatsItem>; |
| } |
| |
| export interface BuildkiteJobStatsItem { |
| buildNumber: number; |
| jobId: string; |
| bazelCITask: string; |
| name: string; |
| createdAt: string; |
| branch: string; |
| state: string; |
| waitTime: number; |
| runTime: number; |
| } |
| |
| export function useBuildkiteJobStats( |
| org: string, |
| pipeline: string, |
| params: BuildkiteJobStatsParams |
| ) { |
| const { data, error } = useSWR( |
| queryString.stringifyUrl( |
| { |
| url: `/api/buildkite/organizations/${org}/pipelines/${pipeline}/jobs/stats`, |
| query: params as any, |
| }, |
| { skipNull: true } |
| ), |
| fetcher |
| ); |
| return { |
| data: data as BuildkiteJobStats, |
| error, |
| loading: !error && !data, |
| }; |
| } |