""" Data models for the metrics module. """ from datetime import datetime, timedelta, timezone from typing import List, Dict, Any, Optional from dataclasses import dataclass # Default time range: last 1 hour DEFAULT_END_TIME = datetime.now(timezone.utc) DEFAULT_START_TIME = DEFAULT_END_TIME - timedelta(hours=1) # Default metrics to query DEFAULT_METRICS = [ "tidb_server_query_total", "tidb_server_connections", "tidb_server_handle_query_duration_seconds", "process_cpu_seconds_total", "process_resident_memory_bytes" ] @dataclass class MetricDataPoint: """A single data point for a metric.""" timestamp: float value: float labels: Dict[str, str] @dataclass class MetricsQuery: """Parameters for querying metrics.""" cluster_id: str start_time: datetime end_time: datetime metrics: List[str] instance: Optional[str] = None step: str = "15s" @dataclass class MetricsResult: """Result of a metrics query.""" status: str data: Dict[str, Any] error: Optional[str] = None warnings: Optional[List[str]] = None # Type aliases for better type hints MetricName = str InstanceName = str MetricValues = Dict[float, float] # timestamp -> value MetricSeries = Dict[InstanceName, MetricValues]