export type HealthStatus = 'ok' | 'degraded' | 'unhealthy'; export interface HealthInputs { dbOk: boolean; redisStatus: string; pansouStatus: string; videoParserStatus: string; } export interface HealthOptions { videoParserRequired?: boolean; } export function computeOverallHealth( { dbOk, redisStatus, pansouStatus, videoParserStatus }: HealthInputs, options: HealthOptions = {}, ): HealthStatus { const videoParserRequired = options.videoParserRequired ?? false; if (dbOk && redisStatus === 'connected' && pansouStatus === 'ok') { if (!videoParserRequired || videoParserStatus === 'ok') { return 'ok'; } return 'degraded'; } if (dbOk && redisStatus !== 'unknown' && pansouStatus !== 'unreachable') { return 'degraded'; } return 'unhealthy'; }