Align with BI security spec and add flat JSON API tests for coverage, tests, and operators.
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""Analytics endpoints — flat JSON optimized for PowerBI / BI tools.
|
|
|
|
Returns complete datasets without pagination so BI tools can ingest
|
|
directly from URL. All endpoints require authentication.
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.database import get_db
|
|
from app.dependencies.auth import get_current_user, require_role
|
|
from app.models.user import User
|
|
from app.services import analytics_service
|
|
|
|
router = APIRouter(prefix="/analytics", tags=["analytics"])
|
|
|
|
|
|
@router.get("/coverage")
|
|
def analytics_coverage(
|
|
db: Session = Depends(get_db),
|
|
user: User = Depends(get_current_user),
|
|
):
|
|
"""Coverage per technique — flat format for BI dashboards."""
|
|
return analytics_service.get_coverage_analytics(db)
|
|
|
|
|
|
@router.get("/tests")
|
|
def analytics_tests(
|
|
date_from: str = Query(None, description="ISO date filter (>=)"),
|
|
date_to: str = Query(None, description="ISO date filter (<=)"),
|
|
db: Session = Depends(get_db),
|
|
user: User = Depends(get_current_user),
|
|
):
|
|
"""All tests with timestamps — flat format for BI dashboards."""
|
|
return analytics_service.get_tests_analytics(
|
|
db, date_from=date_from, date_to=date_to
|
|
)
|
|
|
|
|
|
@router.get("/trends")
|
|
def analytics_trends(
|
|
db: Session = Depends(get_db),
|
|
user: User = Depends(get_current_user),
|
|
):
|
|
"""Historical coverage snapshots for trend visualization."""
|
|
return analytics_service.get_trends_analytics(db)
|
|
|
|
|
|
@router.get("/operators")
|
|
def analytics_operators(
|
|
db: Session = Depends(get_db),
|
|
user: User = Depends(require_role("admin")),
|
|
):
|
|
"""Per-operator metrics — for workload management dashboards."""
|
|
return analytics_service.get_operators_analytics(db)
|