UNPKG

@ahmedhegazee/nestjs-telescope

Version:

Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling

165 lines (164 loc) 4.64 kB
import { OnModuleInit } from "@nestjs/common"; import { Observable } from "rxjs"; import { TelescopeConfig } from "../interfaces/telescope-config.interface"; export interface CacheEntry<T = any> { key: string; value: T; timestamp: Date; ttl: number; accessCount: number; lastAccessed: Date; size: number; tags: string[]; priority: "low" | "medium" | "high" | "critical"; version: string; metadata: Record<string, any>; } export interface CacheConfig { enabled: boolean; tiers: { l1: { enabled: boolean; type: "memory" | "node-cache"; maxSize: number; ttl: number; maxEntries: number; }; l2: { enabled: boolean; type: "redis" | "memcached"; host: string; port: number; ttl: number; maxSize: number; compression: boolean; }; l3: { enabled: boolean; type: "database" | "file"; ttl: number; maxSize: number; }; }; strategies: { writePolicy: "write-through" | "write-back" | "write-around"; readPolicy: "read-through" | "cache-aside" | "refresh-ahead"; evictionPolicy: "lru" | "lfu" | "fifo" | "random"; compression: boolean; encryption: boolean; }; monitoring: { enabled: boolean; metricsInterval: number; hitRateThreshold: number; sizeThreshold: number; }; } export interface CacheMetrics { hits: number; misses: number; hitRate: number; totalSize: number; entryCount: number; evictions: number; compressions: number; tierMetrics: { l1: TierMetrics; l2: TierMetrics; l3: TierMetrics; }; performance: { averageAccessTime: number; averageWriteTime: number; compressionRatio: number; }; } export interface TierMetrics { hits: number; misses: number; hitRate: number; size: number; entryCount: number; evictions: number; } export interface CacheOperation { type: "get" | "set" | "delete" | "clear" | "evict"; key: string; tier: "l1" | "l2" | "l3"; timestamp: Date; duration: number; success: boolean; error: string | undefined; } export declare class AdvancedCachingService implements OnModuleInit { private readonly telescopeConfig; private readonly logger; private readonly l1Cache; private readonly l2Cache; private readonly l3Cache; private readonly metrics; private readonly operationSubject; private readonly metricsSubject; private readonly config; private readonly accessOrder; private readonly tagIndex; private monitoringInterval; constructor(telescopeConfig: TelescopeConfig); onModuleInit(): Promise<void>; private getDefaultCacheConfig; private initializeMetrics; private initializeCaches; private initializeL2Cache; private initializeL3Cache; private startMonitoring; get<T>(key: string, options?: { tier?: "l1" | "l2" | "l3"; tags?: string[]; }): Promise<T | null>; set<T>(key: string, value: T, options?: { ttl?: number; tier?: "l1" | "l2" | "l3"; tags?: string[]; priority?: "low" | "medium" | "high" | "critical"; version?: string; }): Promise<void>; delete(key: string, options?: { tier?: "l1" | "l2" | "l3"; }): Promise<boolean>; invalidateByTags(tags: string[]): Promise<number>; clear(tier?: "l1" | "l2" | "l3"): Promise<void>; private getFromL1; private getFromL2; private getFromL3; private setInL1; private setInL2; private setInL3; private deleteFromL1; private deleteFromL2; private deleteFromL3; private clearL2Cache; private clearL3Cache; private writeThrough; private writeBack; private writeAround; private ensureL1Capacity; private evictFromL1; private findLeastFrequentlyUsed; private isExpired; private calculateSize; private calculateL1Size; private updateAccessOrder; private removeFromAccessOrder; private updateTagIndex; private recordOperation; private updateMetrics; private checkThresholds; getMetrics(): CacheMetrics; getOperations(): Observable<CacheOperation>; getMetricsUpdates(): Observable<CacheMetrics>; warmup(keys: string[]): Promise<void>; optimize(): Promise<void>; private compressLargeEntries; shutdown(): Promise<void>; private persistWriteBackData; }