@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
TypeScript
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;
}