monitoring.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from fastapi import APIRouter, Depends, Query
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from app.database import get_db
  4. from app.services.monitoring import get_dashboard, get_consumption_details, get_daily_stats
  5. router = APIRouter(prefix="/api/public/monitoring", tags=["监控大屏"])
  6. @router.get("/dashboard")
  7. async def get_monitoring_dashboard(
  8. db: AsyncSession = Depends(get_db),
  9. start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD,不传则查全部"),
  10. end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD,不传则查全部"),
  11. super_admin_id: int | None = Query(None, description="指定某个超级管理员ID,不传则查全部"),
  12. super_admin_name: str | None = Query(None, description="按超级管理员名称模糊匹配,不传则查全部"),
  13. ):
  14. """
  15. 获取监控大屏数据
  16. 层级结构:平台 → 超级管理员 → 租户 → 用户
  17. """
  18. return await get_dashboard(
  19. db,
  20. start_date=start_date,
  21. end_date=end_date,
  22. super_admin_id=super_admin_id,
  23. super_admin_name=super_admin_name,
  24. )
  25. @router.get("/consumption-details")
  26. async def list_consumption_details(
  27. db: AsyncSession = Depends(get_db),
  28. start_date: str | None = Query(None, description="查询开始日期,格式 YYYY-MM-DD"),
  29. end_date: str | None = Query(None, description="查询结束日期,格式 YYYY-MM-DD"),
  30. super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"),
  31. tenant_name: str | None = Query(None, description="按租户名称筛选"),
  32. ):
  33. """
  34. 获取原始消费明细列表(每条记录一行,不聚合)
  35. 用于对账场景
  36. """
  37. return await get_consumption_details(
  38. db,
  39. start_date=start_date,
  40. end_date=end_date,
  41. super_admin_name=super_admin_name,
  42. tenant_name=tenant_name,
  43. )
  44. @router.get("/daily-stats")
  45. async def get_daily_consumption_stats(
  46. db: AsyncSession = Depends(get_db),
  47. start_date: str = Query(..., description="开始日期,格式 YYYY-MM-DD"),
  48. end_date: str = Query(..., description="结束日期,格式 YYYY-MM-DD"),
  49. super_admin_name: str | None = Query(None, description="按超级管理员名称筛选"),
  50. tenant_name: str | None = Query(None, description="按租户名称筛选"),
  51. ):
  52. """
  53. 获取按日聚合的消费统计
  54. 当筛选了日期范围时,展示每日的消费汇总(超级管理员 → 租户 → 每日金额)
  55. """
  56. return await get_daily_stats(
  57. db,
  58. start_date=start_date,
  59. end_date=end_date,
  60. super_admin_name=super_admin_name,
  61. tenant_name=tenant_name,
  62. )