import { Observable } from 'rxjs';
export interface BatchResult {
    processed: number;
    failed: number;
    duration: number;
    success: boolean;
    error?: string;
    timestamp: Date;
}
export interface StreamMetrics {
    entriesInQueue: number;
    errorCount: number;
    averageProcessingTime: number;
    throughput: number;
    isProcessing: boolean;
    subscriptions: number;
    lastProcessedAt?: Date;
}
export interface BatchPerformanceMetrics {
    totalEntries: number;
    totalBatches: number;
    successfulBatches: number;
    failedBatches: number;
    averageProcessingTime: number;
    throughput: number;
    errorRate: number;
    uptime: number;
}
export declare class MetricsService {
    private readonly logger;
    private readonly batchResults;
    private readonly startTime;
    private metrics;
    private processingTimes;
    private readonly maxProcessingTimesSamples;
    private errorCount;
    constructor();
    private setupMetricsStream;
    recordBatchProcessing(result: BatchResult): void;
    private updateMetrics;
    getMetrics(): BatchPerformanceMetrics;
    getStreamMetrics(): StreamMetrics;
    getErrorCount(): number;
    getAverageProcessingTime(): number;
    getThroughput(): number;
    getUptime(): number;
    getMetricsStream(): Observable<BatchPerformanceMetrics>;
    reset(): void;
    getPerformanceReport(): {
        metrics: BatchPerformanceMetrics;
        samples: {
            processingTimes: number[];
            recentBatches: number;
        };
        status: {
            isHealthy: boolean;
            alerts: string[];
        };
    };
}
