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