33 lines
800 B
TypeScript
33 lines
800 B
TypeScript
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';
|
|
}
|