/**
 * Load Balancer
 * 웹훅 엔드포인트 간의 부하 분산 관리
 */
import { EventEmitter } from "events";
import type { WebhookEndpoint } from "../types/webhook.types";
import type { LoadBalancerConfig } from "./types";
interface EndpointHealth {
    endpointId: string;
    isHealthy: boolean;
    consecutiveFailures: number;
    lastHealthCheckAt: Date;
    averageResponseTime: number;
    activeConnections: number;
}
export declare class LoadBalancer extends EventEmitter {
    private config;
    private endpointHealth;
    private circuitBreakers;
    private connectionCounts;
    private roundRobinIndex;
    private healthCheckInterval;
    private defaultConfig;
    constructor(config?: Partial<LoadBalancerConfig>);
    /**
     * 엔드포인트 등록
     */
    registerEndpoint(endpoint: WebhookEndpoint): Promise<void>;
    /**
     * 엔드포인트 등록 해제
     */
    unregisterEndpoint(endpointId: string): Promise<void>;
    /**
     * 로드 밸런싱을 통한 엔드포인트 선택
     */
    selectEndpoint(endpoints: WebhookEndpoint[]): Promise<WebhookEndpoint | null>;
    /**
     * 요청 완료 시 호출 (연결 수 감소 및 통계 업데이트)
     */
    onRequestComplete(endpointId: string, success: boolean, responseTime: number): Promise<void>;
    /**
     * 엔드포인트 건강 상태 조회
     */
    getEndpointHealth(endpointId: string): EndpointHealth | null;
    /**
     * 모든 엔드포인트 건강 상태 조회
     */
    getAllEndpointHealth(): EndpointHealth[];
    /**
     * 로드 밸런서 통계 조회
     */
    getStats(): {
        totalEndpoints: number;
        healthyEndpoints: number;
        activeConnections: number;
        circuitBreakersOpen: number;
        averageResponseTime: number;
    };
    /**
     * Round Robin 전략
     */
    private selectRoundRobin;
    /**
     * Least Connections 전략
     */
    private selectLeastConnections;
    /**
     * Weighted 전략
     */
    private selectWeighted;
    /**
     * Random 전략
     */
    private selectRandom;
    /**
     * Half-open Circuit Breaker 엔드포인트 시도
     */
    private tryHalfOpenEndpoint;
    /**
     * Circuit Breaker 상태 업데이트
     */
    private updateCircuitBreaker;
    /**
     * 연결 수 증가
     */
    private incrementConnections;
    /**
     * 연결 수 감소
     */
    private decrementConnections;
    /**
     * 엔드포인트 건강 상태 확인
     */
    private checkEndpointHealth;
    /**
     * 건강 상태 확인 시작
     */
    private startHealthChecks;
    /**
     * 로드 밸런서 종료
     */
    shutdown(): Promise<void>;
}
export {};
