@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
TypeScript
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;
}