54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import type { DriftPlanFile } from './drift-plan.js';
|
|
|
|
export type WatchdogState = 'open' | 'recovering' | 'attention' | 'resolved' | 'dismissed';
|
|
export interface WatchdogIncident {
|
|
id: string;
|
|
server: string;
|
|
server_deleted_at?: string | null;
|
|
kind: 'health' | 'drift';
|
|
state: WatchdogState;
|
|
summary: string;
|
|
details: string;
|
|
first_seen_at: string;
|
|
last_seen_at: string;
|
|
finished_at: string | null;
|
|
failures: number;
|
|
cycle: number;
|
|
operation_stage?: string | null;
|
|
}
|
|
export interface WatchdogEvidence {
|
|
observedAt?: string;
|
|
countedAt?: string;
|
|
identity?: string;
|
|
reason?: string;
|
|
containerState?: string | null;
|
|
files?: DriftPlanFile[];
|
|
fingerprint?: string;
|
|
}
|
|
export interface WatchdogAction {
|
|
id: string;
|
|
incident_id: string;
|
|
action: 'restart' | 'rebuild';
|
|
operation_id: string;
|
|
campaign_id: string | null;
|
|
created_at: string;
|
|
cycle: number;
|
|
operation_state: string | null;
|
|
operation_stage: string | null;
|
|
operation_error: string | null;
|
|
}
|
|
export interface WatchdogOverview {
|
|
enabled: boolean;
|
|
lastScanAt: string | null;
|
|
scanError: string | null;
|
|
incidents: WatchdogIncident[];
|
|
}
|
|
export interface WatchdogDetail {
|
|
incident: WatchdogIncident;
|
|
events: { id: number; created_at: string; message: string }[];
|
|
actions: WatchdogAction[];
|
|
}
|
|
export const watchdogStateLabels: Record<WatchdogState, string> = {
|
|
open: 'Detected', recovering: 'Recovering', attention: 'Needs attention', resolved: 'Resolved', dismissed: 'Dismissed'
|
|
};
|