/// <reference types="node" />
export declare const HEALTH_CHECK_GROUP = "inceptum:health";
export declare function RegisterAsHealthCheck(target: any): void;
export declare enum HealthCheckStatus {
    OK = "OK",
    NOT_READY = "NOT_READY",
    WARNING = "WARNING",
    CRITICAL = "CRITICAL",
}
export declare class HealthCheckResult {
    status: HealthCheckStatus;
    message: string;
    data: any;
    timestamp: number;
    constructor(status: HealthCheckStatus, message: string, timestamp?: number, data?: any);
    static getInitialResult(): HealthCheckResult;
    static staleResult(healthCheck: HealthCheck, lastResult: HealthCheckResult): HealthCheckResult;
}
export declare abstract class HealthCheck {
    checkName: string;
    sleepMillis: number;
    staleNumFails: number;
    private runImmediately;
    started: boolean;
    lastResult: HealthCheckResult;
    timer: NodeJS.Timer;
    checkRunning: boolean;
    constructor(checkName: string, sleepMillis?: number, staleNumFails?: number, runImmediately?: boolean);
    getCheckName(): string;
    getSleepMillis(): number;
    start(): void;
    runCheck(): Promise<void>;
    doStart(): void;
    stop(): void;
    doStop(): void;
    isStarted(): boolean;
    abstract doCheck(): Promise<HealthCheckResult>;
    getLastResult(): HealthCheckResult;
}
export declare class HealthCheckGroup extends HealthCheck {
    groupKey: string;
    healthChecks: Map<string, HealthCheck>;
    constructor(groupName: string);
    addCheck(healthCheck: HealthCheck, asName?: string): void;
    addCheckAs(healthCheck: HealthCheck, asName: string): void;
    doStart(): void;
    doStop(): void;
    doCheck(): Promise<HealthCheckResult>;
    getLastResult(): HealthCheckResult;
}
