import { FilterStatusType, TriggerReason } from '../apis/types'; export type Averagify = `${T} avg`; export type Countify = `${T} count`; export type Epoch = { __epoch: number; }; export type ChartableStageDatapoints = Epoch & { [status in FilterStatusType]?: number; } & { [status in Averagify]?: number; } & { [status in Countify]?: number; }; export interface ChartableStageAnalysis { /** Maximum duration */ max: number; /** Minimum duration */ min: number; /** Average duration */ avg: number; /** Median duration */ med: number; } export interface ChartableStage { analysis: Record; combinedAnalysis: ChartableStageAnalysis; name: string; values: Array; statusSet: Set; stages: Map; } export type TriggerReasonsDatapoint = { [K in TriggerReason]?: number; }; export type StatusesDatapoint = { [status in FilterStatusType]?: number; }; export type ChartableDailyDatapoint = Epoch & TriggerReasonsDatapoint & StatusesDatapoint; export interface ChartableDaily { values: Array; /** * The build trigger reasons */ triggerReasons: Array; /** * The top-level (build) statuses */ statuses: Array; } export interface ChartableStagesAnalysis { /** * Summary of statuses and trigger reasons per day */ daily: ChartableDaily; /** * Total aggregates of sub stages */ total: ChartableStage; /** * Top-level stages {name -> stage} */ stages: Map; /** * All statuses found deeper in the stage tree. A stage might have been * _aborted_ although the build actually _failed_, e.g. */ statuses: Array; }