/// <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",
    STOPPING = "STOPPING"
}
export declare enum HealthCheckType {
    CONTEXT = 0,
    DEPENDENCY = 1,
    GROUP = 2
}
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);
    abstract getType(): HealthCheckType;
    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;
    /**
     * Ignore dependencies CRITICAL status. It is not considered
     * to be part of App's health.
     */
    protected ignoreHealthCheckStatus(hc: HealthCheck, status: HealthCheckStatus): boolean;
    getType(): HealthCheckType;
}
