""" Pydantic models for resolving metrics URL from Observability Global Service. Request: env, deploy_type, cluster_id. Response: resolved metrics URL and optional bearer token. """ from typing import Optional from pydantic import BaseModel, Field, field_validator class ResolveMetricsUrlRequest(BaseModel): """Input for resolving the actual metrics endpoint for a cluster.""" cluster_id: str = Field( ..., description="Cluster identifier", ) env: str = Field( ..., description="Environment name used in biz_type resolution (e.g. prod, staging, dev)", ) deploy_type: str = Field( ..., description=( "Cluster deploy type used in biz_type resolution " "(dedicated, premium, resource_pool, starter, essential)" ), ) @field_validator("env", "deploy_type", mode="before") @classmethod def normalize_scope_text(cls, v: str) -> str: return v.strip().lower() @field_validator("cluster_id", mode="before") @classmethod def normalize_cluster_id(cls, v: object) -> str: return str(v).strip() class ResolveMetricsUrlResponse(BaseModel): """Resolved metrics backend URL and optional token from Observability Global Service.""" url: str = Field( ..., description="Resolved Prometheus/metrics base URL for the cluster", ) token: Optional[str] = Field( None, description="Optional bearer token for the metrics endpoint", )