"""读取 vLLM 的 /metrics，或先用离线 fixture 练习指标解释。"""

from pathlib import Path
import argparse
import json
import sys
from urllib.request import urlopen

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "src"))

from learning_labs.observability import parse_prometheus, summarize_vllm


def main() -> None:
    parser = argparse.ArgumentParser(description="vLLM Prometheus 指标汇总")
    source = parser.add_mutually_exclusive_group()
    source.add_argument("--input", type=Path, default=ROOT / "data" / "vllm_metrics.prom")
    source.add_argument("--url", help="运行中的 vLLM /metrics，例如 http://127.0.0.1:8000/metrics")
    args = parser.parse_args()
    if args.url:
        with urlopen(args.url, timeout=5) as response:  # nosec B310：显式用户提供的本地服务地址
            text = response.read().decode("utf-8")
        origin = args.url
    else:
        text = args.input.read_text(encoding="utf-8")
        origin = str(args.input)
    report = summarize_vllm(parse_prometheus(text))
    report["source"] = origin
    target = ROOT / "artifacts" / "observability" / "vllm_metrics_summary.json"
    target.parent.mkdir(parents=True, exist_ok=True)
    target.write_text(json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(report, ensure_ascii=False, indent=2))


if __name__ == "__main__":
    main()
