# #region TranslateMetricsRoutesModule [C:3] [TYPE Module] [SEMANTICS api,routes,translate,metrics] # @BRIEF Translation Metrics endpoints providing aggregated stats on runs and corrections. # @LAYER UI # @RELATION DEPENDS_ON -> [TranslationMetrics] # @RELATION DEPENDS_ON -> [get_current_user] # @RELATION DEPENDS_ON -> [get_db] from fastapi import APIRouter, Depends, HTTPException, status, Query from typing import Any, Dict, List, Optional from sqlalchemy.orm import Session from ....core.database import get_db from ....core.logger import logger, belief_scope from ....schemas.auth import User from ....dependencies import get_current_user, has_permission from ....plugins.translate.metrics import TranslationMetrics from ._router import router # ============================================================ # Metrics # ============================================================ # #region get_metrics [C:3] [TYPE Function] [SEMANTICS api,translate,metrics] # @BRIEF Get translation metrics across all jobs, optionally filtered by job. # @RELATION DEPENDS_ON -> [TranslationMetrics] @router.get("/metrics") async def get_metrics( job_id: Optional[str] = Query(None), current_user: User = Depends(get_current_user), _ = Depends(has_permission("translate.metrics", "VIEW")), db: Session = Depends(get_db), ): """Get translation metrics.""" logger.info(f"[translate_routes][get_metrics] User: {current_user.username}") try: metrics_svc = TranslationMetrics(db) if job_id: return metrics_svc.get_job_metrics(job_id) return metrics_svc.get_all_metrics() except ValueError as e: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(e)) # #endregion get_metrics # #region get_job_metrics [C:3] [TYPE Function] [SEMANTICS api,translate,metrics] # @BRIEF Get aggregated metrics for a specific translation job. # @RELATION DEPENDS_ON -> [TranslationMetrics] @router.get("/jobs/{job_id}/metrics") async def get_job_metrics( job_id: str, current_user: User = Depends(get_current_user), _ = Depends(has_permission("translate.metrics", "VIEW")), db: Session = Depends(get_db), ): """Get aggregated metrics for a specific job.""" logger.info(f"[translate_routes][get_job_metrics] Job: {job_id}, User: {current_user.username}") try: metrics_svc = TranslationMetrics(db) return metrics_svc.get_job_metrics(job_id) except ValueError as e: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=str(e)) # #endregion get_job_metrics # #endregion TranslateMetricsRoutesModule