UNPKG

@ahmedhegazee/nestjs-telescope

Version:

Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling

127 lines (126 loc) 4.04 kB
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; }