/**
 * 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