@gftdcojp/ksqldb-orm
Version:
ksqldb-orm - Server-Side TypeScript ORM for ksqlDB with enterprise security extensions
282 lines • 9.23 kB
TypeScript
/**
* 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