29 lines
853 B
JavaScript
29 lines
853 B
JavaScript
/**
|
|
* Row health: operational | degraded | down
|
|
* @module classify
|
|
*/
|
|
|
|
/**
|
|
* @param {{
|
|
* min?: number,
|
|
* available?: number,
|
|
* running?: number,
|
|
* paused?: number,
|
|
* managed?: boolean,
|
|
* instances?: Array<{ pid?: number|null, paused?: boolean, healthy?: boolean }>
|
|
* }} sv
|
|
* @returns {'operational'|'degraded'|'down'}
|
|
*/
|
|
export function classifyService(sv) {
|
|
const min = sv.min ?? 0;
|
|
const available = sv.available ?? 0;
|
|
const running = sv.running ?? 0;
|
|
const paused = sv.paused ?? 0;
|
|
const inst = sv.instances || [];
|
|
const unhealthy = inst.filter((i) => i.pid && i.healthy === false && !i.paused).length;
|
|
|
|
if (min === 0 && running === 0) return 'operational';
|
|
if (available === 0 && min > 0) return 'down';
|
|
if (available >= min && paused === 0 && unhealthy === 0) return 'operational';
|
|
return 'degraded';
|
|
}
|