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