@ahmedhegazee/nestjs-telescope
Version:
Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling
77 lines (76 loc) • 2.35 kB
TypeScript
export interface CircuitBreakerOptions {
failureThreshold: number;
timeout: number;
resetTimeout: number;
onOpen?: (breaker: CircuitBreaker) => void;
onHalfOpen?: (breaker: CircuitBreaker) => void;
onClose?: (breaker: CircuitBreaker) => void;
name?: string;
}
export interface CircuitBreakerState {
state: 'closed' | 'open' | 'half-open';
failures: number;
successes: number;
lastFailureTime: number;
lastSuccessTime: number;
nextAttempt: number;
}
export declare class CircuitBreaker {
private readonly options;
private readonly logger;
private state;
private failures;
private successes;
private lastFailureTime;
private lastSuccessTime;
private nextAttempt;
constructor(options: CircuitBreakerOptions);
execute<T>(operation: () => Promise<T>): Promise<T>;
private onSuccess;
private onFailure;
getState(): CircuitBreakerState;
getFailureCount(): number;
getSuccessCount(): number;
getLastFailureTime(): number;
getLastSuccessTime(): number;
getCurrentState(): 'closed' | 'open' | 'half-open';
isOpen(): boolean;
isClosed(): boolean;
isHalfOpen(): boolean;
forceOpen(): void;
forceClose(): void;
reset(): void;
getHealthInfo(): {
isHealthy: boolean;
state: string;
failureRate: number;
successRate: number;
uptime: number;
};
}
export declare class CircuitBreakerOpenError extends Error {
constructor(message: string);
}
export declare class CircuitBreakerFactory {
static createForStorage(name?: string): CircuitBreaker;
static createForDevTools(name?: string): CircuitBreaker;
static createForNetwork(name?: string): CircuitBreaker;
static createCustom(options: CircuitBreakerOptions): CircuitBreaker;
}
export declare class CircuitBreakerRegistry {
private readonly logger;
private breakers;
register(name: string, breaker: CircuitBreaker): void;
get(name: string): CircuitBreaker | undefined;
getAll(): Map<string, CircuitBreaker>;
getAllStates(): Record<string, CircuitBreakerState>;
getHealthStatus(): {
healthy: number;
unhealthy: number;
total: number;
details: Record<string, any>;
};
resetAll(): void;
remove(name: string): boolean;
clear(): void;
}