UNPKG

@ahmedhegazee/nestjs-telescope

Version:

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

82 lines (81 loc) 2.6 kB
import { Observable } from 'rxjs'; import { RequestContext, ResponseContext } from './request-watcher.interceptor'; export interface RequestPerformanceMetrics { totalRequests: number; requestsPerSecond: number; averageResponseTime: number; medianResponseTime: number; p95ResponseTime: number; p99ResponseTime: number; slowRequestCount: number; errorCount: number; errorRate: number; byMethod: Record<string, MethodMetrics>; byStatusCode: Record<number, number>; byEndpoint: Record<string, EndpointMetrics>; timeWindow: TimeWindowMetrics; } export interface MethodMetrics { count: number; averageResponseTime: number; errorCount: number; errorRate: number; } export interface EndpointMetrics { count: number; averageResponseTime: number; errorCount: number; errorRate: number; lastAccessed: Date; } export interface TimeWindowMetrics { last5Minutes: number; last15Minutes: number; last30Minutes: number; last60Minutes: number; } export interface RequestDataPoint { requestContext: RequestContext; responseContext: ResponseContext; error: Error | null; timestamp: Date; } export declare class RequestMetricsService { private readonly logger; private readonly dataSubject; private readonly requestHistory; private readonly maxHistorySize; private readonly responseTimes; private readonly maxResponseTimesSamples; private currentMetrics; constructor(); private setupMetricsProcessing; private startPeriodicCalculations; recordRequest(requestContext: RequestContext, responseContext: ResponseContext, error: Error | null): void; private updateMetrics; private calculateNewAverage; private calculatePercentile; private updateMethodMetrics; private updateStatusCodeMetrics; private updateEndpointMetrics; private normalizeEndpoint; private updateTimeWindowMetrics; private updateRequestsPerSecond; getMetrics(): RequestPerformanceMetrics; getMetricsStream(): Observable<RequestPerformanceMetrics>; getTopEndpoints(limit?: number): Array<{ endpoint: string; metrics: EndpointMetrics; }>; getSlowestEndpoints(limit?: number): Array<{ endpoint: string; metrics: EndpointMetrics; }>; getErrorProneEndpoints(limit?: number): Array<{ endpoint: string; metrics: EndpointMetrics; }>; getRecentRequests(limit?: number): RequestDataPoint[]; getRequestsInTimeWindow(windowMs: number): RequestDataPoint[]; reset(): void; }