import { HttpRequest, HttpResponse } from "../types"; export interface MetricsClient { counter(name: string, value?: number, labels?: Record): void; histogram(name: string, value: number, labels?: Record): void; gauge(name: string, value: number, labels?: Record): void; summary(name: string, value: number, labels?: Record): void; } export interface MetricsCollector { recordResponseTime(route: string, method: string, duration: number): void; recordRequestCount(route: string, method: string, statusCode: number): void; recordErrorRate(route: string, method: string, errorType: string): void; recordMemoryUsage(): void; recordCpuUsage(): void; counter(name: string, value?: number, labels?: Record): void; histogram(name: string, value: number, labels?: Record): void; gauge(name: string, value: number, labels?: Record): void; summary(name: string, value: number, labels?: Record): void; withRequestContext(req: HttpRequest, res: HttpResponse, next: () => void): void; destroy(): void; } export interface MetricsConfig { enabled: boolean; metrics: { responseTime: boolean; requestCount: boolean; errorRate: boolean; memoryUsage: boolean; cpuUsage: boolean; }; client?: MetricsClient; collectInterval?: number; includeRouteParams?: boolean; customLabels?: Record; } export interface MetricsData { timestamp: number; type: 'counter' | 'histogram' | 'gauge' | 'summary'; name: string; value: number; labels: Record; } export interface BuiltInMetrics { responseTime: { route: string; method: string; duration: number; }; requestCount: { route: string; method: string; statusCode: number; }; errorRate: { route: string; method: string; errorType: string; }; memoryUsage: { used: number; total: number; percentage: number; }; cpuUsage: { percentage: number; }; } export declare class ConsoleMetricsClient implements MetricsClient { counter(name: string, value?: number, labels?: Record): void; histogram(name: string, value: number, labels?: Record): void; gauge(name: string, value: number, labels?: Record): void; summary(name: string, value: number, labels?: Record): void; }