/**
 * Exporter Registry
 * Manages multiple observability exporters with circuit breaker protection
 */
import type { BaseExporter } from "./exporters/baseExporter.js";
import type { ExportResult, ExporterHealthStatus, ObservabilityCircuitBreakerConfig, ObservabilityCircuitBreakerState, Sampler, SpanData } from "../types/index.js";
/**
 * Registry for managing multiple observability exporters
 * Includes circuit breaker protection to prevent cascading failures
 */
export declare class ExporterRegistry {
    private exporters;
    private defaultExporter;
    private sampler;
    private circuitBreakers;
    private readonly circuitBreakerConfig;
    /**
     * Register an exporter
     */
    register(exporter: BaseExporter): void;
    /**
     * Unregister an exporter
     */
    unregister(name: string): boolean;
    /**
     * Get an exporter by name
     */
    get(name: string): BaseExporter | undefined;
    /**
     * Get all registered exporter names
     */
    getNames(): string[];
    /**
     * Get total exporter count
     */
    getCount(): number;
    /**
     * Set the default exporter
     */
    setDefault(name: string): void;
    /**
     * Get the default exporter
     */
    getDefault(): BaseExporter | undefined;
    /**
     * Set the sampler for the registry
     */
    setSampler(sampler: Sampler): void;
    /**
     * Get the current sampler
     */
    getSampler(): Sampler;
    /**
     * Configure the circuit breaker settings
     * @param config - Partial circuit breaker configuration
     */
    configureCircuitBreaker(config: Partial<ObservabilityCircuitBreakerConfig>): void;
    /**
     * Check if circuit is open for an exporter
     * @param exporterName - Name of the exporter
     * @returns true if circuit is open (exporter should be skipped)
     */
    private isCircuitOpen;
    /**
     * Record a failure for an exporter's circuit breaker
     * @param exporterName - Name of the exporter
     */
    private recordFailure;
    /**
     * Record a success for an exporter's circuit breaker
     * Resets the circuit to closed state
     * @param exporterName - Name of the exporter
     */
    private recordSuccess;
    /**
     * Get circuit breaker status for an exporter
     * @param exporterName - Name of the exporter
     * @returns Circuit breaker state or undefined if not tracked
     */
    getCircuitBreakerStatus(exporterName: string): ObservabilityCircuitBreakerState | undefined;
    /**
     * Reset circuit breaker for an exporter
     * @param exporterName - Name of the exporter
     */
    resetCircuitBreaker(exporterName: string): void;
    /**
     * Export span to all registered exporters
     * Applies sampling and circuit breaker protection before export
     */
    exportToAll(span: SpanData): Promise<Map<string, ExportResult>>;
    /**
     * Export span to a specific exporter
     * Applies sampling and circuit breaker protection
     */
    exportTo(name: string, span: SpanData): Promise<ExportResult | null>;
    /**
     * Initialize all exporters
     */
    initializeAll(): Promise<void>;
    /**
     * Shutdown all exporters
     */
    shutdownAll(): Promise<void>;
    /**
     * Flush all exporters
     */
    flushAll(): Promise<void>;
    /**
     * Get health status of all exporters
     */
    healthCheckAll(): Promise<Map<string, ExporterHealthStatus>>;
    /**
     * Check if all exporters are healthy
     */
    isHealthy(): Promise<boolean>;
    /**
     * Get total pending spans across all exporters
     */
    getTotalPendingSpans(): number;
    /**
     * Clear all registered exporters and reset state
     * (For testing and cleanup)
     */
    clear(): void;
}
/**
 * Get the global exporter registry instance
 */
export declare function getExporterRegistry(): ExporterRegistry;
/**
 * Reset the global exporter registry (for testing)
 */
export declare function resetExporterRegistry(): void;
