UNPKG

polyv-live-cli

Version:

CLI tool for managing PolyV live streaming services.

123 lines 4.29 kB
import { EventEmitter } from 'events'; export interface FallbackManagerConfig { enableAutoFallback: boolean; maxRetryAttempts: number; retryDelay: number; retryDelayMultiplier: number; maxRetryDelay: number; circuitBreakerThreshold: number; circuitBreakerTimeout: number; healthCheckInterval: number; requestTimeout: number; enableFallbackCache: boolean; fallbackCacheTtl: number; } export type ServiceHealthStatus = 'healthy' | 'degraded' | 'unhealthy' | 'unknown'; export type CircuitBreakerState = 'closed' | 'open' | 'half-open'; export type FallbackStrategy = 'cache' | 'alternative-endpoint' | 'mock-data' | 'partial-response' | 'offline-mode'; export interface ServiceEndpoint { id: string; url: string; priority: number; isPrimary: boolean; healthStatus: ServiceHealthStatus; lastHealthCheck: number; responseTime: number; successRate: number; circuitBreakerState: CircuitBreakerState; consecutiveFailures: number; } export interface FallbackRule { id: string; serviceId: string; triggers: FallbackTrigger[]; strategy: FallbackStrategy; config: Record<string, any>; priority: number; enabled: boolean; } export interface FallbackTrigger { type: 'error-rate' | 'response-time' | 'status-code' | 'timeout' | 'circuit-breaker'; threshold: number; timeWindow: number; minSamples: number; } export interface FallbackResult { success: boolean; strategy: FallbackStrategy; data: any; responseTime: number; error?: Error; source: 'primary' | 'fallback' | 'cache' | 'mock'; } export interface ServiceHealthMetrics { serviceId: string; healthStatus: ServiceHealthStatus; endpoints: ServiceEndpoint[]; successRate: number; averageResponseTime: number; errorRate: number; lastSuccessful: number; totalRequests: number; failedRequests: number; circuitBreakerStatus: Record<string, CircuitBreakerState>; } export interface FallbackStats { totalFallbacks: number; fallbacksByStrategy: Record<FallbackStrategy, number>; fallbackSuccessRate: number; serviceHealth: Map<string, ServiceHealthMetrics>; activeRules: number; circuitBreakerActivations: number; cacheHitRate: number; } export declare class FallbackManager extends EventEmitter { private config; private services; private fallbackRules; private fallbackCache; private healthCheckTimer?; private stats; private isRunning; private requestHistory; constructor(config?: Partial<FallbackManagerConfig>); start(): void; stop(): void; registerService(serviceId: string, endpoints: Omit<ServiceEndpoint, 'healthStatus' | 'lastHealthCheck' | 'responseTime' | 'successRate' | 'circuitBreakerState' | 'consecutiveFailures'>[]): void; addFallbackRule(rule: FallbackRule): void; removeFallbackRule(serviceId: string, ruleId: string): void; executeWithFallback(serviceId: string, requestFn: (endpoint: ServiceEndpoint) => Promise<any>, options?: { cacheKey?: string; enableCache?: boolean; mockData?: any; timeout?: number; }): Promise<FallbackResult>; getServiceHealth(serviceId: string): ServiceHealthMetrics | null; getStats(): FallbackStats; openCircuitBreaker(serviceId: string, endpointId: string): void; closeCircuitBreaker(serviceId: string, endpointId: string): void; updateConfig(newConfig: Partial<FallbackManagerConfig>): void; clearCache(): void; private getPrimaryEndpoint; private canUseEndpoint; private executeRequest; private executeFallback; private getApplicableFallbackRules; private isRuleTriggered; private executeFallbackStrategy; private executeCacheFallback; private executeAlternativeEndpointFallback; private executeMockDataFallback; private executePartialResponseFallback; private executeOfflineModeFallback; private getCachedResult; private cacheResult; private recordSuccess; private recordFailure; private updateServiceHealthMetrics; private startHealthChecks; private performHealthChecks; private setupEventHandlers; private cleanupExpiredCache; } //# sourceMappingURL=fallback-manager.d.ts.map