diff --git a/apps/api/src/main.py b/apps/api/src/main.py index bc5ac052..d20bb752 100644 --- a/apps/api/src/main.py +++ b/apps/api/src/main.py @@ -80,6 +80,7 @@ from src.core.feature_flags import aiops_flags # ADR-080: AI 自主化飛輪 fe from src.core.http_client import close_all_http_clients, init_all_http_clients from src.core.logging import get_logger, setup_logging from src.core.redis_client import close_redis_pool, init_redis_pool +from src.services.flywheel_stats_service import get_flywheel_stats_service from src.core.sse import get_publisher from src.core.telemetry import setup_telemetry, shutdown_telemetry @@ -1005,10 +1006,17 @@ app.include_router(platform_v1.router, prefix="/api/v1/platform", tags=["AwoooP @app.get("/metrics", include_in_schema=False) async def prometheus_metrics() -> Response: """Prometheus metrics endpoint for alerting""" - return Response( - content=generate_latest(), - media_type=CONTENT_TYPE_LATEST, - ) + content = generate_latest().decode("utf-8") + # 2026-05-07 ogt + Claude Sonnet 4.6 — INC-20260507-99ADF2 修復 + # 飛輪指標(awoooi_flywheel_*)原本只在 /api/v1/stats/flywheel/metrics 暴露, + # 110 Prom awoooi-api job scrape /metrics 時抓不到 → FlywheelExecutionRateMissing 永久 firing + # 修法:在此串入飛輪指標,讓既有 scrape job 無需新增 job 即可抓到 + try: + flywheel_metrics = await get_flywheel_stats_service().compute() + content += flywheel_metrics.to_prometheus_lines() + except Exception: + logger.warning("prometheus_metrics_flywheel_error") + return Response(content=content, media_type=CONTENT_TYPE_LATEST) # =============================================================================