@ahmedhegazee/nestjs-telescope
Version:
Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling
66 lines (65 loc) • 2.06 kB
TypeScript
import { RequestContext } from '../../watchers/request/request-watcher.interceptor';
export interface SamplingConfig {
enabled: boolean;
baseSampleRate: number;
adaptiveEnabled: boolean;
loadBasedSampling: boolean;
errorSamplingMultiplier: number;
healthCheckSampleRate: number;
maxSampleRate: number;
minSampleRate: number;
}
export interface SamplingRule {
path: string;
method?: string;
statusCode?: number;
rate: number;
priority: number;
conditions?: SamplingCondition[];
}
export interface SamplingCondition {
type: 'header' | 'query' | 'body' | 'user' | 'time' | 'load';
key?: string;
value?: any;
operator: 'equals' | 'contains' | 'greater' | 'less' | 'regex';
}
export interface SamplingStats {
totalRequests: number;
sampledRequests: number;
currentSampleRate: number;
effectiveSampleRate: number;
loadFactor: number;
errorRate: number;
lastAdaptation: number;
}
export declare class AdaptiveSamplingService {
private readonly logger;
private readonly config;
private readonly samplingRules;
private readonly loadHistory;
private readonly stats;
private readonly maxHistorySize;
private readonly loadCalculationWindow;
constructor(config?: Partial<SamplingConfig>);
shouldSample(context: RequestContext, error?: Error): boolean;
calculateSampleRate(context: RequestContext, error?: Error): number;
addRule(rule: SamplingRule): void;
removeRule(path: string, method?: string): void;
getStats(): SamplingStats;
getRules(): SamplingRule[];
resetStats(): void;
private initializeDefaultRules;
private applyRules;
private matchesRule;
private matchesPath;
private matchesCondition;
private evaluateCondition;
private adjustForLoad;
private applyAdaptiveAdjustments;
private updateLoadMetrics;
private getCurrentLoadFactor;
private getErrorRate;
private getAverageResponseTime;
private adaptSamplingRate;
private updateEffectiveSampleRate;
}