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