import { Severity } from './config'; /** SQL operation type */ export type SqlOperation = 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'OTHER'; export interface RawQueryEvent { /** SQL text (may be parameterised) */ query: string; /** Bound parameters (if available) */ params?: unknown[]; /** Query execution duration in ms */ duration: number; /** Timestamp when the query started */ startedAt: Date; /** Target database name (optional) */ database?: string; /** Optional caller file:line hint */ caller?: string; } export interface QueryMetrics extends RawQueryEvent { /** Unique sequential ID */ id: number; /** Detected operation type */ operation: SqlOperation; /** Primary table name extracted from query */ table: string; /** Whether this query exceeded the threshold */ isSlow: boolean; /** Severity bucket */ severity: Severity; /** Estimated rows scanned (adapter-dependent) */ rowsScanned?: number; /** Estimated rows returned */ rowsReturned?: number; /** EXPLAIN plan text (if fetched) */ explainPlan?: string; } export interface OperationBreakdown { SELECT: number; INSERT: number; UPDATE: number; DELETE: number; OTHER: number; } export interface PercentileBuckets { p50: number; p75: number; p90: number; p95: number; p99: number; max: number; } export interface QueryStats { /** Total queries tracked since start */ totalQueries: number; /** Queries that exceeded the threshold */ slowQueries: QueryMetrics[]; /** Queries that exceeded 3× the threshold (critical) */ criticalQueries: QueryMetrics[]; /** Average duration across all queries (ms) */ averageDuration: number; /** Duration percentile buckets */ percentiles: PercentileBuckets; /** Operation type distribution */ operationBreakdown: OperationBreakdown; /** Top N slowest queries ever seen */ topSlowest: QueryMetrics[]; /** Timestamp of the first recorded query */ trackedSince: Date | null; /** Timestamp of the most recent recorded query */ lastQueryAt: Date | null; /** Table hit counts */ tableHitCounts: Record; } export interface SlowQueryEvent { metrics: QueryMetrics; /** Threshold that was breached (ms) */ thresholdMs: number; } export interface MonitorEvents { /** Fired for every tracked query */ query: (metrics: QueryMetrics) => void; /** Fired only when a query is slow */ 'slow-query': (event: SlowQueryEvent) => void; /** Fired for critical queries (≥ 3× threshold) */ 'critical-query': (event: SlowQueryEvent) => void; /** Fired when the monitor starts */ start: () => void; /** Fired when the monitor stops */ stop: () => void; /** Fired on internal errors */ error: (err: Error) => void; } //# sourceMappingURL=query.d.ts.map