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