UNPKG

@ahmedhegazee/nestjs-telescope

Version:

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

101 lines (100 loc) 3.05 kB
import { TelescopeService } from '../../core/services/telescope.service'; import { QueryContext } from './query-watcher.interceptor'; import { QueryWatcherConfig } from './query-watcher.config'; export interface SlowQueryAnalysis { queryId: string; sql: string; duration: number; severity: 'slow' | 'very_slow' | 'critical'; issues: QueryIssue[]; optimizationHints: OptimizationHint[]; affectedRows: number; executionPlan?: ExecutionPlan; } export interface QueryIssue { type: 'missing_index' | 'full_table_scan' | 'excessive_joins' | 'subquery_performance' | 'n_plus_one'; severity: 'low' | 'medium' | 'high' | 'critical'; description: string; suggestion: string; affectedTable?: string; affectedColumn?: string; } export interface OptimizationHint { type: 'index_suggestion' | 'query_rewrite' | 'schema_change' | 'caching_opportunity'; priority: 'low' | 'medium' | 'high'; description: string; implementation: string; estimatedImpact: string; } export interface ExecutionPlan { totalCost: number; rows: number; operations: ExecutionOperation[]; } export interface ExecutionOperation { operation: string; table: string; cost: number; rows: number; filter?: string; } export interface QueryMetrics { totalQueries: number; slowQueries: number; verySlowQueries: number; errorQueries: number; averageQueryTime: number; queriesPerSecond: number; queryTimeDistribution: { fast: number; normal: number; slow: number; verySlow: number; }; operationDistribution: { select: number; insert: number; update: number; delete: number; raw: number; }; topSlowQueries: Array<{ sql: string; duration: number; count: number; lastExecuted: Date; }>; } export declare class QueryWatcherService { private readonly telescopeService; private readonly logger; private readonly config; private readonly queryMetrics; private readonly queryHistory; private readonly maxHistorySize; private readonly recentQueries; constructor(telescopeService: TelescopeService, queryWatcherConfig: QueryWatcherConfig); private initializeMetrics; trackQuery(context: QueryContext): void; private shouldExcludeQuery; private addToHistory; private updateMetrics; private updateTopSlowQueries; private updateQueriesPerSecond; private createTelescopeEntry; private generateFamilyHash; private normalizeQuery; private truncateQuery; private generateTags; private analyzeSlowQuery; private performQueryAnalysis; private trackForNPlusOneDetection; private detectNPlusOnePattern; private createNPlusOneEntry; private getQueryAnalysis; getMetrics(): QueryMetrics; getConfig(): QueryWatcherConfig; getRecentQueries(limit?: number): QueryContext[]; getSlowQueries(limit?: number): QueryContext[]; resetMetrics(): void; }