import { Client as ElasticClient } from '@elastic/elasticsearch'; import type { ElasticsearchConfig } from '../config/types.js'; import { HealthStatus } from './health-check.js'; import type { HealthCheckResult } from './health-check.js'; import { Logger } from '../observability/logger.js'; import { MetricsCollector } from '../observability/metrics.js'; /** * Connection manager configuration */ export interface ConnectionManagerConfig extends ElasticsearchConfig { /** Enable health checks */ enableHealthCheck?: boolean; /** Enable circuit breaker */ enableCircuitBreaker?: boolean; /** Logger instance */ logger?: Logger; /** Metrics collector */ metricsCollector?: MetricsCollector; } /** * Connection manager for Elasticsearch client * * Provides: * - Singleton client instance * - Connection pooling * - Health monitoring * - Circuit breaker pattern * - Automatic reconnection * * @example * ```typescript * const manager = ElasticsearchConnectionManager.getInstance({ * nodes: ['http://localhost:9200'], * auth: { type: 'basic', username: 'elastic', password: 'changeme' } * }); * * const client = manager.getClient(); * await client.search({ index: 'my-index', query: { match_all: {} } }); * ``` */ export declare class ElasticsearchConnectionManager { private static instance; private client; private healthChecker; private circuitBreaker; private logger; private metrics; private config; private isInitialized; private connectionCount; private constructor(); /** * Get singleton instance */ static getInstance(config?: ConnectionManagerConfig): ElasticsearchConnectionManager; /** * Reset singleton instance (useful for testing) */ static resetInstance(): void; /** * Create Elasticsearch client with configuration */ private createClient; /** * Initialize connection manager */ initialize(): Promise; /** * Get Elasticsearch client */ getClient(): ElasticClient; /** * Execute operation through circuit breaker */ execute(operation: () => Promise): Promise; /** * Health check callback */ private onHealthChange; /** * Perform health check */ healthCheck(): Promise; /** * Get current health status */ getHealthStatus(): HealthStatus; /** * Check if cluster is healthy */ isHealthy(): boolean; /** * Check if cluster is available */ isAvailable(): boolean; /** * Get circuit breaker state */ getCircuitState(): string; /** * Get connection statistics */ getStats(): { initialized: boolean; connectionCount: number; healthStatus: HealthStatus; circuitState: string; lastHealthCheck?: HealthCheckResult; }; /** * Cleanup and close connections */ destroy(): Promise; }