import { OnModuleInit } from '@nestjs/common';
import { Observable } from 'rxjs';
import { TelescopeService } from './telescope.service';
export interface CorrelationContext {
    traceId: string;
    requestId?: string;
    userId?: string;
    sessionId?: string;
    timestamp: Date;
    request?: any;
    query?: any;
    exception?: any;
    job?: any;
    cache?: any;
    performance: {
        totalDuration: number;
        requestDuration?: number;
        queryDuration?: number;
        cacheDuration?: number;
        jobDuration?: number;
        memoryUsage?: number;
        cpuUsage?: number;
        queryCount: number;
        cacheOperations: number;
        jobsTriggered: number;
        exceptionsThrown: number;
    };
    bottlenecks: BottleneckAnalysis[];
    recommendations: string[];
    healthScore: number;
}
export interface BottleneckAnalysis {
    type: 'query' | 'cache' | 'job' | 'exception' | 'network' | 'cpu' | 'memory';
    severity: 'low' | 'medium' | 'high' | 'critical';
    component: string;
    duration: number;
    percentage: number;
    description: string;
    recommendation: string;
}
export interface PerformanceMetrics {
    totalRequests: number;
    averageResponseTime: number;
    p95ResponseTime: number;
    p99ResponseTime: number;
    errorRate: number;
    components: {
        database: {
            averageTime: number;
            slowQueries: number;
            connectionIssues: number;
        };
        cache: {
            averageTime: number;
            hitRate: number;
            missRate: number;
            errorRate: number;
        };
        jobs: {
            averageTime: number;
            failureRate: number;
            queueBacklog: number;
        };
        exceptions: {
            rate: number;
            criticalCount: number;
            averageImpact: number;
        };
    };
    correlations: {
        queryToResponse: number;
        cacheToResponse: number;
        jobToResponse: number;
        exceptionToResponse: number;
        memoryToResponse: number;
        cpuToResponse: number;
    };
    trends: {
        responseTime: {
            current: number;
            change: number;
            trend: 'up' | 'down' | 'stable';
        };
        errorRate: {
            current: number;
            change: number;
            trend: 'up' | 'down' | 'stable';
        };
        throughput: {
            current: number;
            change: number;
            trend: 'up' | 'down' | 'stable';
        };
    };
}
export interface PerformanceAlert {
    id: string;
    type: 'bottleneck' | 'degradation' | 'anomaly' | 'threshold';
    severity: 'low' | 'medium' | 'high' | 'critical';
    message: string;
    timestamp: Date;
    traceId?: string;
    component: string;
    metrics: any;
    recommendations: string[];
    acknowledged: boolean;
}
export declare class PerformanceCorrelationService implements OnModuleInit {
    private readonly telescopeService;
    private readonly logger;
    private readonly destroy$;
    private correlationHistory;
    private performanceMetrics;
    private alertHistory;
    private readonly correlationSubject;
    private readonly metricsSubject;
    private readonly alertsSubject;
    private activeTraces;
    private responseTimeHistory;
    private correlationCoefficients;
    constructor(telescopeService: TelescopeService);
    onModuleInit(): Promise<void>;
    private initializeMetrics;
    correlateWatcherData(watcherType: 'request' | 'query' | 'exception' | 'job' | 'cache', data: any): void;
    private extractTraceId;
    private updateTraceWithWatcherData;
    private finalizeCorrelation;
    private analyzeBottlenecks;
    private generateRecommendations;
    private calculateHealthScore;
    private updatePerformanceMetrics;
    private updateComponentMetrics;
    private updateCorrelations;
    private calculateCorrelation;
    private updateTrends;
    private calculateAverage;
    private checkPerformanceAlerts;
    private createAlert;
    private startPeriodicProcessing;
    private cleanupOldTraces;
    private cleanupOldData;
    getMetrics(): PerformanceMetrics;
    getMetricsStream(): Observable<PerformanceMetrics>;
    getCorrelationStream(): Observable<CorrelationContext>;
    getAlertsStream(): Observable<PerformanceAlert>;
    getRecentCorrelations(limit?: number): CorrelationContext[];
    getCorrelationsByTraceId(traceId: string): CorrelationContext | undefined;
    getBottlenecksByComponent(component: string, limit?: number): BottleneckAnalysis[];
    acknowledgeAlert(alertId: string): boolean;
    getActiveTraces(): Array<{
        traceId: string;
        watchers: string[];
        startTime: Date;
    }>;
    onDestroy(): void;
}
