import { EventEmitter } from 'events'; /** * Individual cache operation record */ export interface CacheOperationRecord { type: 'get' | 'set' | 'delete' | 'clear'; layer: string; hit: boolean; latency: number; error?: string; key?: string; timestamp: Date; } /** * Cache operation metrics */ export interface CacheMetrics { /** Total number of operations */ totalOperations: number; /** Hit/miss statistics */ hits: number; misses: number; hitRate: number; /** Latency metrics (ms) */ avgLatency: number; minLatency: number; maxLatency: number; p95Latency: number; p99Latency: number; /** Operation counts by type */ gets: number; sets: number; deletes: number; clears: number; /** Size metrics */ totalKeys: number; totalSize: number; /** Error metrics */ errors: number; errorRate: number; /** Layer-specific metrics */ layerMetrics: { cls: { hits: number; misses: number; avgLatency: number; }; memory: { hits: number; misses: number; avgLatency: number; size: number; }; redis: { hits: number; misses: number; avgLatency: number; }; }; /** Time window for these metrics */ timeWindow: { start: Date; end: Date; duration: number; }; } /** * Cache metrics service * * Collects and analyzes cache performance metrics */ export declare class CacheMetricsService extends EventEmitter { private readonly logger; private readonly operations; private readonly maxOperations; private readonly maxAge; constructor(); /** * Record a cache operation */ recordOperation(type: 'get' | 'set' | 'delete' | 'clear', layer: string, hit: boolean, latency: number, error?: string, key?: string): void; /** * Get metrics for a time window */ getMetrics(timeWindowMs?: number): CacheMetrics; /** * Get real-time metrics snapshot */ getSnapshot(): Partial; /** * Get top slow operations */ getSlowOperations(limit?: number): CacheOperationRecord[]; /** * Get most accessed keys */ getMostAccessedKeys(limit?: number): { key: string; count: number; avgLatency: number; }[]; /** * Get error breakdown */ getErrorBreakdown(): { error: string; count: number; lastOccurrence: Date; }[]; /** * Reset all metrics */ resetMetrics(): void; /** * Export metrics for external monitoring systems */ exportMetrics(format?: 'prometheus' | 'json'): string; /** * Clean up old operation records */ private cleanupOldRecords; /** * Create empty metrics object */ private createEmptyMetrics; /** * Calculate layer-specific metrics */ private calculateLayerMetrics; /** * Calculate average of array */ private average; /** * Calculate percentile */ private percentile; /** * Get unique key count */ private getUniqueKeyCount; /** * Estimate total cache size */ private estimateTotalSize; /** * Convert metrics to Prometheus format */ private toPrometheusFormat; }