import { EventEmitter } from 'events';
export interface ApiAnalyticsConfig {
    enableDetailedTracking: boolean;
    maxRequestRecords: number;
    analyticsWindow: number;
    enablePerformanceMonitoring: boolean;
    enableErrorTracking: boolean;
    sampleRate: number;
}
export interface ApiRequestRecord {
    id: string;
    method: string;
    url: string;
    timestamp: number;
    responseTime: number;
    statusCode: number;
    requestSize: number;
    responseSize: number;
    success: boolean;
    error: string;
    priority: 'low' | 'medium' | 'high';
    cached: boolean;
    batched: boolean;
    userAgent: string;
}
export interface EndpointStats {
    endpoint: string;
    totalRequests: number;
    successfulRequests: number;
    failedRequests: number;
    averageResponseTime: number;
    minResponseTime: number;
    maxResponseTime: number;
    successRate: number;
    totalDataTransferred: number;
    lastRequestTime: number;
    requestsPerHour: number;
}
export interface PerformanceMetrics {
    averageResponseTime: number;
    p95ResponseTime: number;
    p99ResponseTime: number;
    overallSuccessRate: number;
    requestsPerSecond: number;
    cacheHitRate: number;
    batchEfficiency: number;
    errorRate: number;
    averageRequestSize: number;
    averageResponseSize: number;
}
export interface ErrorAnalysis {
    commonErrors: Array<{
        error: string;
        count: number;
        percentage: number;
        endpoints: string[];
    }>;
    errorsByEndpoint: Array<{
        endpoint: string;
        errorCount: number;
        errorRate: number;
    }>;
    errorTrends: Array<{
        timestamp: number;
        errorCount: number;
        totalRequests: number;
    }>;
}
export interface UsagePatterns {
    peakHours: Array<{
        hour: number;
        requestCount: number;
    }>;
    activeEndpoints: Array<{
        endpoint: string;
        requestCount: number;
        percentage: number;
    }>;
    methodDistribution: Record<string, number>;
    priorityDistribution: Record<string, number>;
    cachingStats: {
        cacheHitRate: number;
        cacheMissRate: number;
        cacheableRequests: number;
    };
}
export declare class ApiAnalytics extends EventEmitter {
    private config;
    private requestRecords;
    private endpointStats;
    private errorCounts;
    private isRunning;
    private analyticsTimer?;
    constructor(config?: Partial<ApiAnalyticsConfig>);
    start(): void;
    stop(): void;
    recordRequest(id: string, method: string, url: string, responseTime: number, options?: {
        statusCode?: number;
        requestSize?: number;
        responseSize?: number;
        success?: boolean;
        error?: string;
        priority?: 'low' | 'medium' | 'high';
        cached?: boolean;
        batched?: boolean;
        userAgent?: string;
    }): void;
    getOverallStats(): {
        totalRequests: number;
        successfulRequests: number;
        failedRequests: number;
        averageResponseTime: number;
        successRate: number;
        totalDataTransferred: number;
        timeWindow: number;
    };
    getEndpointStats(): EndpointStats[];
    getPerformanceMetrics(): PerformanceMetrics;
    getErrorAnalysis(): ErrorAnalysis;
    getUsagePatterns(): UsagePatterns;
    generateReport(): {
        summary: ReturnType<ApiAnalytics['getOverallStats']>;
        performance: PerformanceMetrics;
        errors: ErrorAnalysis;
        usage: UsagePatterns;
        endpoints: EndpointStats[];
        generatedAt: number;
    };
    clearData(): void;
    updateConfig(newConfig: Partial<ApiAnalyticsConfig>): void;
    private updateEndpointStats;
    private normalizeEndpoint;
    private trackError;
    private setupPeriodicAnalytics;
    private performPeriodicAnalytics;
}
//# sourceMappingURL=api-analytics.d.ts.map