import { OnModuleInit } from '@nestjs/common';
import { TelescopeService } from '../../core/services/telescope.service';
import { ExceptionContext, ErrorSeverity, ErrorCategory } from './exception-watcher.filter';
import { ExceptionWatcherConfig } from './exception-watcher.config';
import { Observable } from 'rxjs';
export interface ExceptionMetrics {
    totalExceptions: number;
    uniqueExceptions: number;
    errorRate: number;
    criticalErrors: number;
    highSeverityErrors: number;
    mediumSeverityErrors: number;
    lowSeverityErrors: number;
    exceptionsPerMinute: number;
    exceptionsPerHour: number;
    errorsByType: Record<string, number>;
    errorsByCategory: Record<string, number>;
    errorsBySeverity: Record<string, number>;
    topErrors: Array<{
        groupId: string;
        errorType: string;
        errorMessage: string;
        count: number;
        lastOccurrence: Date;
        severity: ErrorSeverity;
        category: ErrorCategory;
    }>;
    averageResponseTime: number;
    affectedRequests: number;
    trends: {
        lastHour: ExceptionTrendData;
        lastDay: ExceptionTrendData;
        lastWeek: ExceptionTrendData;
    };
}
export interface ExceptionTrendData {
    total: number;
    change: number;
    changePercent: number;
    peak: number;
    average: number;
}
export interface ExceptionGroup {
    groupId: string;
    fingerprint: string;
    errorType: string;
    errorMessage: string;
    severity: ErrorSeverity;
    category: ErrorCategory;
    count: number;
    firstOccurrence: Date;
    lastOccurrence: Date;
    affectedUsers: Set<string>;
    affectedRequests: string[];
    stackFrames: Array<{
        function: string;
        file: string;
        line: number;
        count: number;
    }>;
    contexts: ExceptionContext[];
    resolved: boolean;
    assignedTo?: string;
    notes?: string;
}
export interface ExceptionAlert {
    id: string;
    type: 'error_rate' | 'critical_errors' | 'new_error' | 'error_spike';
    severity: 'low' | 'medium' | 'high' | 'critical';
    message: string;
    timestamp: Date;
    data: any;
    acknowledged: boolean;
    resolvedAt?: Date;
}
export declare class ExceptionWatcherService implements OnModuleInit {
    private readonly telescopeService;
    private readonly logger;
    private readonly config;
    private readonly destroy$;
    private readonly alertsSubject;
    private readonly metricsSubject;
    private exceptionHistory;
    private exceptionGroups;
    private currentMetrics;
    private readonly maxHistorySize;
    private readonly maxGroupSize;
    private recentExceptions;
    private alertHistory;
    constructor(telescopeService: TelescopeService, exceptionWatcherConfig: ExceptionWatcherConfig);
    onModuleInit(): Promise<void>;
    private initializeMetrics;
    trackException(context: ExceptionContext): void;
    private addToHistory;
    private groupException;
    private updateMetrics;
    private updateTopErrors;
    private updateRates;
    private calculateErrorRate;
    private createTelescopeEntry;
    private generateTags;
    private checkAlerts;
    private hasSeenErrorBefore;
    private createAlert;
    private correlateException;
    private storeCorrelation;
    private handleUnhandledRejection;
    private handleUncaughtException;
    private generateFingerprint;
    private generateGroupId;
    private hash;
    private startPeriodicProcessing;
    private updateTrends;
    private calculateTrend;
    private cleanupOldData;
    getMetrics(): ExceptionMetrics;
    getMetricsStream(): Observable<ExceptionMetrics>;
    getAlertsStream(): Observable<ExceptionAlert>;
    getExceptionGroups(): ExceptionGroup[];
    getExceptionGroup(groupId: string): ExceptionGroup | undefined;
    getRecentExceptions(limit?: number): ExceptionContext[];
    resolveExceptionGroup(groupId: string, resolvedBy: string, notes?: string): boolean;
    acknowledgeAlert(alertId: string): boolean;
    getConfig(): ExceptionWatcherConfig;
    onDestroy(): void;
}
