import { EventEmitter } from 'events';
export interface PerformanceConfig {
    enabled?: boolean;
    sampleRate?: number;
    metrics?: {
        latency?: boolean;
        cpu?: boolean;
        memory?: boolean;
        throughput?: boolean;
        errors?: boolean;
    };
    thresholds?: {
        latencyWarn?: number;
        latencyCritical?: number;
        cpuWarn?: number;
        memoryWarn?: number;
    };
    reporting?: {
        interval?: number;
        destination?: 'console' | 'file' | 'metrics-service';
        format?: 'json' | 'prometheus' | 'statsd';
    };
    storage?: {
        maxDataPoints?: number;
        aggregationInterval?: number;
    };
}
export interface MiddlewareMetrics {
    name: string;
    latency: LatencyMetrics;
    throughput: ThroughputMetrics;
    errors: ErrorMetrics;
    resources?: ResourceMetrics;
}
export interface LatencyMetrics {
    count: number;
    min: number;
    max: number;
    mean: number;
    median: number;
    p75: number;
    p95: number;
    p99: number;
    histogram: Map<number, number>;
}
export interface ThroughputMetrics {
    requestsPerSecond: number;
    bytesPerSecond: number;
    totalRequests: number;
    totalBytes: number;
}
export interface ErrorMetrics {
    totalErrors: number;
    errorRate: number;
    errorsByType: Map<string, number>;
    errorsByStatusCode: Map<number, number>;
}
export interface ResourceMetrics {
    cpu: {
        usage: number;
        user: number;
        system: number;
    };
    memory: {
        heapUsed: number;
        heapTotal: number;
        external: number;
        rss: number;
    };
}
export declare class PerformanceMonitor extends EventEmitter {
    private config;
    private metrics;
    private activeRequests;
    private reportingInterval?;
    private aggregationInterval?;
    private dataPoints;
    constructor(config?: PerformanceConfig);
    wrap(name: string, middleware: Function): Function;
    monitorApp(app: any): void;
    private initializeMetrics;
    private updateMetrics;
    private checkThresholds;
    private startMonitoring;
    private generateReport;
    private formatReport;
    private formatPrometheus;
    private formatStatsd;
    private aggregateMetrics;
    private calculatePercentiles;
    private percentile;
    private calculateThroughput;
    private calculateErrorRate;
    private getRequestId;
    private generateRequestId;
    getMetrics(middlewareName?: string): Map<string, MiddlewareMetrics> | MiddlewareMetrics | undefined;
    getReport(): any;
    getHistory(): Array<{
        timestamp: Date;
        metrics: Map<string, MiddlewareMetrics>;
    }>;
    findBottlenecks(threshold?: number): string[];
    reset(middlewareName?: string): void;
    stop(): void;
}
export declare function createPerformanceMonitor(config?: PerformanceConfig): PerformanceMonitor;
//# sourceMappingURL=performance-monitor.d.ts.map