verae-fleet/src/classify.js

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';
}