UNPKG

@gftdcojp/ksqldb-orm

Version:

ksqldb-orm - Server-Side TypeScript ORM for ksqlDB with enterprise security extensions

282 lines 9.23 kB
/** * Resilience utilities for ksqlDB partition rebalancing and error handling * * @description このモジュールは、ksqlDBのパーティション再バランシングエラーを * 検出し、適切なリトライ戦略やフォールバック機構を提供します。 */ import { ResilienceErrorType, ResilienceMetrics, CircuitBreakerState, RetryConfig, CircuitBreakerConfig, PartitionAwarenessConfig, FallbackConfig, MetricsConfig } from './types'; /** * エラー分類ユーティリティ */ export declare class ErrorClassifier { /** * エラーの種類を分類 * @param error エラーオブジェクト * @returns 分類されたエラータイプ */ static classifyError(error: any): ResilienceErrorType; /** * パーティション再バランシングエラーかどうかを判定 */ private static isPartitionRebalancingError; /** * ネットワークエラーかどうかを判定 */ private static isNetworkError; /** * サーバーエラーかどうかを判定 */ private static isServerError; /** * タイムアウトエラーかどうかを判定 */ private static isTimeoutError; /** * エラーからメッセージを抽出 */ private static extractErrorMessage; /** * エラーからHTTPステータスコードを抽出 */ private static extractStatusCode; /** * エラーが再試行可能かどうかを判定 * @param errorType エラータイプ * @param retryableErrors 再試行可能なエラータイプのリスト * @returns 再試行可能な場合はtrue */ static isRetryableError(errorType: ResilienceErrorType, retryableErrors?: string[]): boolean; } /** * リトライ戦略ユーティリティ */ export declare class RetryStrategy { /** * 指数バックオフによる遅延時間を計算 * @param attempt 試行回数(1から開始) * @param baseDelay 基本遅延時間(ミリ秒) * @param maxDelay 最大遅延時間(ミリ秒) * @param jitter ジッター係数(0-1) * @returns 遅延時間(ミリ秒) */ static calculateExponentialBackoff(attempt: number, baseDelay?: number, maxDelay?: number, jitter?: number): number; /** * 線形バックオフによる遅延時間を計算 * @param attempt 試行回数(1から開始) * @param baseDelay 基本遅延時間(ミリ秒) * @param maxDelay 最大遅延時間(ミリ秒) * @param jitter ジッター係数(0-1) * @returns 遅延時間(ミリ秒) */ static calculateLinearBackoff(attempt: number, baseDelay?: number, maxDelay?: number, jitter?: number): number; /** * 固定遅延時間を計算 * @param baseDelay 基本遅延時間(ミリ秒) * @param jitter ジッター係数(0-1) * @returns 遅延時間(ミリ秒) */ static calculateFixedBackoff(baseDelay?: number, jitter?: number): number; /** * バックオフ戦略に基づいて遅延時間を計算 * @param strategy バックオフ戦略 * @param attempt 試行回数 * @param baseDelay 基本遅延時間 * @param maxDelay 最大遅延時間 * @param jitter ジッター係数 * @returns 遅延時間(ミリ秒) */ static calculateDelay(strategy: 'exponential' | 'linear' | 'fixed', attempt: number, baseDelay?: number, maxDelay?: number, jitter?: number): number; /** * 遅延を実行 * @param delayMs 遅延時間(ミリ秒) * @returns Promise */ static delay(delayMs: number): Promise<void>; } /** * サーキットブレーカー実装 */ export declare class CircuitBreaker { private state; private failureCount; private successCount; private lastFailureTime; private readonly failureThreshold; private readonly successThreshold; private readonly openTimeout; constructor(failureThreshold?: number, _timeWindow?: number, openTimeout?: number, successThreshold?: number); /** * サーキットブレーカーの現在状態を取得 */ getState(): CircuitBreakerState; /** * リクエスト実行前のチェック * @returns 実行可能な場合はtrue */ canExecute(): boolean; /** * 成功時の処理 */ onSuccess(): void; /** * 失敗時の処理 */ onFailure(): void; /** * 状態を必要に応じて更新 */ private updateStateIfNeeded; /** * 統計情報を取得 */ getStats(): { state: CircuitBreakerState; failureCount: number; successCount: number; lastFailureTime: Date | null; }; /** * サーキットブレーカーをリセット */ reset(): void; } /** * メトリクス収集器 */ export declare class MetricsCollector { private metrics; private responseTimes; private metricsInterval?; constructor(); /** * リクエスト開始を記録 */ recordRequestStart(): void; /** * 成功を記録 * @param responseTime レスポンス時間(ミリ秒) */ recordSuccess(responseTime: number): void; /** * 失敗を記録 * @param errorType エラータイプ * @param responseTime レスポンス時間(ミリ秒) */ recordFailure(errorType: ResilienceErrorType, responseTime: number): void; /** * リトライを記録 */ recordRetry(): void; /** * サーキットブレーカートリップを記録 */ recordCircuitBreakerTrip(): void; /** * フォールバック使用を記録 */ recordFallbackActivation(): void; /** * レスポンス時間を記録 */ private recordResponseTime; /** * 現在のメトリクスを取得 */ getMetrics(): ResilienceMetrics; /** * メトリクスをリセット */ reset(): void; /** * 定期的なメトリクス収集を開始 * @param interval 収集間隔(ミリ秒) * @param collector カスタムコレクター関数 */ startPeriodicCollection(interval?: number, collector?: (metrics: ResilienceMetrics) => void): void; /** * 定期的なメトリクス収集を停止 */ stopPeriodicCollection(): void; } /** * リトライ機構を統合したリジリエント実行器 */ export declare class ResilientExecutor { private circuitBreaker; private metricsCollector; private retryConfig; private fallbackConfig; constructor(retryConfig?: Partial<RetryConfig>, circuitBreakerConfig?: Partial<CircuitBreakerConfig>, _partitionConfig?: Partial<PartitionAwarenessConfig>, fallbackConfig?: Partial<FallbackConfig>, metricsConfig?: Partial<MetricsConfig>); /** * リジリエント実行(リトライ・サーキットブレーカー・フォールバック対応) * @param operation 実行する操作 * @param operationName 操作名(ログ用) * @param options 実行オプション * @returns 実行結果 */ execute<T>(operation: () => Promise<T>, operationName?: string, options?: { retries?: number; backoffStrategy?: 'exponential' | 'linear' | 'fixed'; fallbackToHttp?: boolean; timeout?: number; }): Promise<{ data: T; error?: any; resilience: { retryCount: number; fallbackUsed: boolean; executionTime: number; circuitBreakerState: CircuitBreakerState; }; }>; /** * フォールバック戦略付きでクエリを実行 * @param primaryOperation メインの操作 * @param fallbackOperation フォールバック操作 * @param operationName 操作名 * @param options 実行オプション * @returns 実行結果 */ executeWithFallback<T>(primaryOperation: () => Promise<T>, fallbackOperation: () => Promise<T>, operationName?: string, options?: { retries?: number; backoffStrategy?: 'exponential' | 'linear' | 'fixed'; timeout?: number; }): Promise<{ data: T; error?: any; resilience: { retryCount: number; fallbackUsed: boolean; executionTime: number; circuitBreakerState: CircuitBreakerState; }; }>; /** * タイムアウト付きで操作を実行 * @param operation 実行する操作 * @param timeoutMs タイムアウト時間(ミリ秒) * @returns 実行結果 */ private executeWithTimeout; /** * サーキットブレーカーの状態を取得 */ getCircuitBreakerState(): CircuitBreakerState; /** * メトリクス情報を取得 */ getMetrics(): ResilienceMetrics; /** * サーキットブレーカーをリセット */ resetCircuitBreaker(): void; /** * メトリクスをリセット */ resetMetrics(): void; /** * リソースクリーンアップ */ dispose(): void; } //# sourceMappingURL=resilience.d.ts.map