50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""admin 埋点健康度:埋点成功率 / 上报成功率 总览 + 趋势 + 下钻(只读)。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
|
|
from app.admin.deps import AdminDb, get_current_admin
|
|
from app.admin.repositories import analytics_health as repo
|
|
from app.admin.schemas.analytics_health import (
|
|
HealthBreakdownRow,
|
|
HealthMetrics,
|
|
HealthTrendPoint,
|
|
)
|
|
|
|
router = APIRouter(
|
|
prefix="/admin/api/analytics-health",
|
|
tags=["admin-analytics-health"],
|
|
dependencies=[Depends(get_current_admin)],
|
|
)
|
|
|
|
|
|
@router.get("/overview", response_model=HealthMetrics, summary="两段成功率总览")
|
|
def overview(
|
|
db: AdminDb,
|
|
date_from: Annotated[datetime, Query()],
|
|
date_to: Annotated[datetime, Query()],
|
|
) -> HealthMetrics:
|
|
return HealthMetrics(**repo.overview(db, date_from, date_to))
|
|
|
|
|
|
@router.get("/trend", response_model=list[HealthTrendPoint], summary="按北京天趋势")
|
|
def trend(
|
|
db: AdminDb,
|
|
date_from: Annotated[datetime, Query()],
|
|
date_to: Annotated[datetime, Query()],
|
|
) -> list[HealthTrendPoint]:
|
|
return [HealthTrendPoint(**p) for p in repo.trend(db, date_from, date_to)]
|
|
|
|
|
|
@router.get("/breakdown", response_model=list[HealthBreakdownRow], summary="按维度下钻")
|
|
def breakdown(
|
|
db: AdminDb,
|
|
date_from: Annotated[datetime, Query()],
|
|
date_to: Annotated[datetime, Query()],
|
|
dim: Annotated[str, Query(pattern="^(event|app_ver|oem)$")] = "event",
|
|
) -> list[HealthBreakdownRow]:
|
|
return [HealthBreakdownRow(**r) for r in repo.breakdown(db, date_from, date_to, dim)]
|