/** * SMI-1337: Analysis Pipeline Metrics and Telemetry * * Provides metrics collection for the multi-language analysis pipeline: * - Files parsed per language (counter) * - Parse duration by language (histogram) * - Cache hit/miss rates (gauge) * - Worker pool utilization (gauge) * - Memory usage (gauge) * - Error counts by type (counter) * * @see docs/internal/architecture/multi-language-analysis.md * @module analysis/metrics */ import type { SupportedLanguage } from './types.js'; import type { AnalysisMetricsConfig, AnalysisMetricsSnapshot } from './metrics.types.js'; import { InMemoryCounter, InMemoryHistogram, InMemoryGauge } from './metrics.implementations.js'; export type { AnalysisMetricsConfig, AnalysisMetricsSnapshot } from './metrics.types.js'; /** * Analysis Pipeline Metrics Collector * * Provides comprehensive metrics collection for the multi-language * analysis pipeline with graceful fallback when telemetry is unavailable. * * @example * ```typescript * const metrics = new AnalysisMetrics() * * // Record file parse * metrics.recordFileParsed('typescript') * * // Record parse duration * metrics.recordParseDuration('typescript', 15.5) * * // Record cache operations * metrics.recordCacheHit() * metrics.recordCacheMiss() * * // Get snapshot * const snapshot = metrics.getSnapshot() * console.log(`Parse p95: ${snapshot.parseDuration.stats.p95}ms`) * ``` */ export declare class AnalysisMetrics { private readonly enabled; private readonly prefix; readonly filesParsed: InMemoryCounter; readonly parseDuration: InMemoryHistogram; readonly cacheHits: InMemoryCounter; readonly cacheMisses: InMemoryCounter; readonly cacheSize: InMemoryGauge; readonly workerPoolActive: InMemoryGauge; readonly workerPoolQueued: InMemoryGauge; readonly workerPoolUtilization: InMemoryGauge; readonly memoryHeapUsed: InMemoryGauge; readonly memoryHeapTotal: InMemoryGauge; readonly memoryRss: InMemoryGauge; readonly errorCount: InMemoryCounter; readonly aggregatorFilesProcessed: InMemoryGauge; readonly aggregatorImports: InMemoryGauge; readonly aggregatorExports: InMemoryGauge; readonly aggregatorFunctions: InMemoryGauge; constructor(config?: AnalysisMetricsConfig); /** Check if metrics collection is enabled */ isEnabled(): boolean; /** Record a file being parsed */ recordFileParsed(language: SupportedLanguage | string): void; /** Record parse duration for a file */ recordParseDuration(language: SupportedLanguage | string, durationMs: number): void; /** Record a cache hit */ recordCacheHit(language?: SupportedLanguage | string): void; /** Record a cache miss */ recordCacheMiss(language?: SupportedLanguage | string): void; /** Update cache size */ updateCacheSize(size: number, entries?: number): void; /** Update worker pool metrics */ updateWorkerPool(activeWorkers: number, queuedTasks: number, poolSize?: number): void; /** Update memory usage metrics */ updateMemoryUsage(): void; /** Record an error */ recordError(errorType: string, language?: SupportedLanguage | string): void; /** Update aggregator metrics */ updateAggregatorStats(filesProcessed: number, imports: number, exports: number, functions: number): void; /** Get cache hit rate */ getCacheHitRate(): number; /** Get files parsed by language */ getFilesByLanguage(): Record; /** Get parse duration stats by language */ getParseDurationByLanguage(language: SupportedLanguage | string): ReturnType; /** Get complete metrics snapshot */ getSnapshot(): AnalysisMetricsSnapshot; /** Reset all metrics */ reset(): void; } /** Get the default analysis metrics instance */ export declare function getAnalysisMetrics(): AnalysisMetrics; /** Initialize the default analysis metrics instance */ export declare function initializeAnalysisMetrics(config?: AnalysisMetricsConfig): AnalysisMetrics; /** Helper: Time an async operation and record to analysis metrics */ export declare function timeParseAsync(language: SupportedLanguage | string, fn: () => Promise, metrics?: AnalysisMetrics): Promise; /** Helper: Time a sync operation and record to analysis metrics */ export declare function timeParseSync(language: SupportedLanguage | string, fn: () => T, metrics?: AnalysisMetrics): T; //# sourceMappingURL=metrics.d.ts.map