export interface EventMetrics {
    totalEvents: number;
    eventsByType: Record<string, number>;
    averageProcessingTime: number;
    errorCount: number;
    activeHandlers: number;
    processingTimePercentiles?: {
        p50: number;
        p95: number;
        p99: number;
    };
    performanceAlerts?: {
        slowOperations: number;
        memoryUsage?: number;
        cpuUsage?: number;
    };
    performanceTrends?: {
        avgProcessingTimeTrend: 'improving' | 'stable' | 'degrading';
        errorRateTrend: 'improving' | 'stable' | 'degrading';
    };
}
export interface EventAudit {
    eventId: string;
    eventType: string;
    timestamp: Date;
    payload: any;
    correlationId?: string | undefined;
    userId?: string | undefined;
    source?: string | undefined;
    processingTime?: number | undefined;
    success: boolean;
    error?: string | undefined;
}
export interface ObservabilityConfig {
    enableMetrics?: boolean;
    enableAuditing?: boolean;
    enableTracing?: boolean;
    enablePerformanceMonitoring?: boolean;
    auditRetentionDays?: number;
    metricsRetentionDays?: number;
    logLevel?: "debug" | "info" | "warn" | "error";
    customAuditLogger?: (audit: EventAudit) => void;
    customMetricsCollector?: (metrics: EventMetrics) => void;
    performanceMonitoring?: {
        enablePercentiles?: boolean;
        enableMemoryMonitoring?: boolean;
        enableCpuMonitoring?: boolean;
        slowOperationThreshold?: number;
        performanceAlertThreshold?: number;
        enablePerformanceTrends?: boolean;
        performanceBudget?: {
            maxProcessingTime: number;
            maxErrorRate: number;
            maxMemoryUsage: number;
        };
    };
    storage?: {
        type: "memory" | "file" | "database";
        path?: string;
        connectionString?: string;
        retentionDays?: number;
        maxLogs?: number;
    };
}
export interface EventTracing {
    traceId: string;
    spanId: string;
    parentSpanId?: string;
    correlationId?: string;
    userId?: string;
    metadata?: Record<string, any>;
}
export interface ObservabilityEngine {
    recordEvent(event: string, payload: any, tracing?: EventTracing): void;
    recordHandlerExecution(event: string, handler: string, duration: number, success: boolean, error?: string): void;
    recordError(event: string, error: Error, tracing?: EventTracing): void;
    getMetrics(): EventMetrics;
    getAuditLogs(filters?: Partial<EventAudit>): EventAudit[];
    clearAuditLogs(): void;
    clearMetrics(): void;
}
//# sourceMappingURL=observability.interface.d.ts.map