batch-cluster
Version:
Manage a cluster of child processes
94 lines (93 loc) • 3.08 kB
TypeScript
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;
}