UNPKG

@ahmedhegazee/nestjs-telescope

Version:

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

77 lines (76 loc) 2.91 kB
import { TelescopeService } from '../../core/services/telescope.service'; import { TelescopeConfig } from '../../core/interfaces/telescope-config.interface'; import { RequestContext, ResponseContext } from './request-watcher.interceptor'; import { DataMaskingService } from '../../core/services/data-masking.service'; import { EnhancedCircuitBreakerService } from '../../core/services/enhanced-circuit-breaker.service'; import { EnhancedMemoryManagerService } from '../../core/services/enhanced-memory-manager.service'; import { AdaptiveSamplingService } from '../../core/services/adaptive-sampling.service'; export interface RequestWatcherConfig { enabled: boolean; excludePaths: string[]; sampling: { enabled: boolean; rate: number; rules: SamplingRule[]; }; security: { maskSensitiveData: boolean; logResponseBodies: boolean; logSuccessfulResponseBodies: boolean; sensitiveKeys: string[]; }; performance: { slowRequestThreshold: number; collectMetrics: boolean; }; filters: { methods: string[]; statusCodes: number[]; contentTypes: string[]; }; } export interface SamplingRule { path: string; method?: string; statusCode?: number; rate: number; priority: number; } export interface RequestMetrics { totalRequests: number; slowRequests: number; errorRequests: number; averageResponseTime: number; requestsPerSecond: number; statusCodeDistribution: Record<number, number>; methodDistribution: Record<string, number>; } export declare class RequestWatcherService { private readonly telescopeService; private readonly telescopeConfig; private readonly dataMaskingService; private readonly circuitBreakerService; private readonly memoryManagerService; private readonly adaptiveSamplingService; private readonly logger; private readonly config; private readonly requestMetrics; constructor(telescopeService: TelescopeService, telescopeConfig: TelescopeConfig, dataMaskingService: DataMaskingService, circuitBreakerService: EnhancedCircuitBreakerService, memoryManagerService: EnhancedMemoryManagerService, adaptiveSamplingService: AdaptiveSamplingService); private buildConfig; private initializeMetrics; trackRequest(requestContext: RequestContext, responseContext: ResponseContext, error: Error | null): Promise<void>; private createTelescopeEntry; private generateFamilyHash; private generateTags; private updateMetrics; getMetrics(): RequestMetrics & { samplingStats: any; memoryStats: any; circuitBreakerStats: any; }; clearMetrics(): Promise<void>; getExcludedPaths(): string[]; shouldSampleRequest(request: any): boolean; shouldMaskBody(body: any): boolean; shouldLogSuccessfulResponseBodies(): boolean; }