| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """
- 平台统计和日志路由
- 提供调用统计和费用明细的API端点
- 需求: 11.1, 12.1
- """
- from datetime import date
- from typing import Optional
- 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
- from app.models.user import User
- from app.services.api_call_log_service import ApiCallLogService
- from app.schemas.platform_stats import StatsResponse, CallLogResponse
- from app.schemas.model_schema import ApiResponse, PaginatedResponse
- router = APIRouter(prefix="/api/platform", tags=["平台统计"])
- @router.get("/stats", response_model=ApiResponse[StatsResponse])
- def get_stats(
- trend_days: int = Query(default=7, ge=1, le=30, description="趋势数据天数"),
- key_type: Optional[str] = Query(None, description="密钥类型: public 或 local"),
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 获取调用统计
-
- 需求 11.1: 显示今日调用次数、本月调用次数、总调用次数
- 需求 11.2: 显示今日消费金额、本月消费金额
- 需求 11.3: 显示调用趋势图
- 需求 11.4: 显示各模型调用占比饼图
- """
- service = ApiCallLogService(db)
- stats = service.get_user_stats(current_user.id, trend_days, key_type)
- return ApiResponse(code=200, message="success", data=stats)
- @router.get("/call-logs", response_model=ApiResponse[PaginatedResponse[CallLogResponse]])
- def get_call_logs(
- start_date: Optional[date] = Query(None, description="开始日期"),
- end_date: Optional[date] = Query(None, description="结束日期"),
- model_id: Optional[int] = Query(None, description="模型ID"),
- api_key_id: Optional[int] = Query(None, description="API Key ID"),
- key_type: Optional[str] = Query(None, description="密钥类型: public 或 local"),
- page: int = Query(default=1, ge=1, description="页码"),
- page_size: int = Query(default=20, ge=1, le=100, description="每页数量"),
- current_user: User = Depends(get_current_user),
- db: Session = Depends(get_db)
- ):
- """
- 获取调用日志
-
- 需求 12.1: 支持按时间范围、模型、API Key进行筛选
- 需求 12.2: 显示调用时间、模型名称、Token用量、费用金额、使用的API Key
- 需求 12.4: 支持分页查询
- """
- service = ApiCallLogService(db)
- logs, total = service.get_call_logs(
- user_id=current_user.id,
- start_date=start_date,
- end_date=end_date,
- model_id=model_id,
- api_key_id=api_key_id,
- key_type=key_type,
- page=page,
- page_size=page_size
- )
-
- return ApiResponse(
- code=200,
- message="success",
- data=PaginatedResponse(
- items=logs,
- total=total,
- page=page,
- page_size=page_size,
- total_pages=(total + page_size - 1) // page_size
- )
- )
|