UNPKG

batch-cluster

Version:
94 lines (93 loc) 3.08 kB
import { BatchClusterEmitter } from "./BatchClusterEmitter"; import { HealthCheckStrategy } from "./HealthCheckStrategy"; import { InternalBatchProcessOptions } from "./InternalBatchProcessOptions"; import { Task } from "./Task"; import { WhyNotHealthy, WhyNotReady } from "./WhyNotHealthy"; /** * Interface for objects that can be health checked */ export interface HealthCheckable { readonly pid: number; readonly start: number; readonly taskCount: number; readonly failedTaskCount: number; readonly idleMs: number; readonly idle: boolean; readonly ending: boolean; readonly ended: boolean; readonly proc: { stdin?: { destroyed?: boolean; } | null; }; readonly currentTask?: Task<unknown> | null | undefined; } /** * Manages health checking logic for processes. * Provides centralized health assessment and monitoring capabilities. */ export declare class ProcessHealthMonitor { #private; private readonly options; private readonly emitter; private readonly healthStrategy; constructor(options: InternalBatchProcessOptions, emitter: BatchClusterEmitter, healthStrategy?: HealthCheckStrategy); /** * Initialize health monitoring for a process */ initializeProcess(pid: number): void; /** * Clean up health monitoring for a process */ cleanupProcess(pid: number): void; /** * Record that a job failed for a process */ recordJobFailure(pid: number): void; /** * Record that a job succeeded for a process */ recordJobSuccess(pid: number): void; /** * Assess the health of a process and return why it's not healthy, or null if healthy */ assessHealth(process: HealthCheckable, overrideReason?: WhyNotHealthy): WhyNotHealthy | null; /** * Check if a process is healthy */ isHealthy(process: HealthCheckable, overrideReason?: WhyNotHealthy): boolean; /** * Assess why a process is not ready (combines health and business) */ assessReadiness(process: HealthCheckable, overrideReason?: WhyNotHealthy): WhyNotReady | null; /** * Check if a process is ready to handle tasks */ isReady(process: HealthCheckable, overrideReason?: WhyNotHealthy): boolean; /** * Run a health check on a process if needed */ maybeRunHealthcheck(process: HealthCheckable & { execTask: (task: Task<unknown>) => boolean; }): Task<unknown> | undefined; /** * Get health statistics for monitoring */ getHealthStats(): { monitoredProcesses: number; totalHealthCheckFailures: number; processesWithFailures: number; }; /** * Reset health check failures for a process (useful for recovery scenarios) */ resetHealthCheckFailures(pid: number): void; /** * Get health check state for a specific process */ getProcessHealthState(pid: number): { lastHealthCheck: number; healthCheckFailures: number; lastJobFailed: boolean; } | undefined; }