Replace mock chart data on reports page with real backend queries (jobs over time, locale stats, usage stats, quality metrics). Add audit logging to auth (login/login_failed), file management (upload/delete TM and reference files), and feedback submission so the system logs page shows complete activity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from datetime import datetime
|
|
from typing import Any
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.dependencies import get_current_user, get_db
|
|
from app.services.report_service import ReportService
|
|
|
|
router = APIRouter(prefix="/reports", tags=["reports"])
|
|
report_service = ReportService()
|
|
|
|
|
|
@router.get("/usage")
|
|
async def get_usage_stats(
|
|
client_id: UUID | None = Query(None),
|
|
date_from: datetime | None = Query(None),
|
|
date_to: datetime | None = Query(None),
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> dict[str, Any]:
|
|
"""Get usage statistics (total jobs, tokens, cost, status breakdown)."""
|
|
return await report_service.get_usage_stats(
|
|
db, client_id=client_id, date_from=date_from, date_to=date_to
|
|
)
|
|
|
|
|
|
@router.get("/tokens")
|
|
async def get_token_cost_data(
|
|
client_id: UUID | None = Query(None),
|
|
date_from: datetime | None = Query(None),
|
|
date_to: datetime | None = Query(None),
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> list[dict[str, Any]]:
|
|
"""Get token usage and cost data grouped by day."""
|
|
return await report_service.get_token_cost_data(
|
|
db, client_id=client_id, date_from=date_from, date_to=date_to
|
|
)
|
|
|
|
|
|
@router.get("/quality")
|
|
async def get_quality_metrics(
|
|
client_id: UUID | None = Query(None),
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> dict[str, Any]:
|
|
"""Get quality metrics (confidence tier distribution, feedback stats)."""
|
|
return await report_service.get_quality_metrics(db, client_id=client_id)
|
|
|
|
|
|
@router.get("/locale-stats")
|
|
async def get_locale_stats(
|
|
client_id: UUID | None = Query(None),
|
|
date_from: datetime | None = Query(None),
|
|
date_to: datetime | None = Query(None),
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> list[dict[str, Any]]:
|
|
"""Get per-locale stats (tokens, cost, avg duration)."""
|
|
return await report_service.get_locale_stats(
|
|
db, client_id=client_id, date_from=date_from, date_to=date_to
|
|
)
|
|
|
|
|
|
@router.get("/jobs-over-time")
|
|
async def get_jobs_over_time(
|
|
client_id: UUID | None = Query(None),
|
|
date_from: datetime | None = Query(None),
|
|
date_to: datetime | None = Query(None),
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: dict = Depends(get_current_user),
|
|
) -> list[dict[str, Any]]:
|
|
"""Get job counts grouped by week for chart display."""
|
|
return await report_service.get_jobs_over_time(
|
|
db, client_id=client_id, date_from=date_from, date_to=date_to
|
|
)
|