z2api / app /api /admin.py
zhaoxiaozhao07's picture
feat(core): 增加 token 池管理和请求重试逻辑
93e3c04
"""
Admin API endpoints for token management
"""
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import HTTPBearer
from fastapi.security.http import HTTPAuthorizationCredentials
from typing import Dict, Any
from app.core.config import settings
from app.core.token_manager import token_manager
router = APIRouter(prefix="/admin", tags=["admin"])
security = HTTPBearer()
def verify_admin_token(credentials: HTTPAuthorizationCredentials = Depends(security)) -> str:
"""Verify admin authentication token"""
if settings.SKIP_AUTH_TOKEN:
return credentials.credentials
if credentials.credentials != settings.AUTH_TOKEN:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid authentication credentials",
headers={"WWW-Authenticate": "Bearer"},
)
return credentials.credentials
@router.get("/token-stats")
async def get_token_stats(token: str = Depends(verify_admin_token)) -> Dict[str, Any]:
"""Get token pool statistics"""
return token_manager.get_token_stats()
@router.post("/reload-tokens")
async def reload_tokens(token: str = Depends(verify_admin_token)) -> Dict[str, str]:
"""Force reload tokens from file"""
try:
token_manager.reload_tokens()
return {"message": "Token池已重新加载"}
except Exception as e:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"重新加载失败: {str(e)}"
)
@router.post("/reset-tokens")
async def reset_tokens(token: str = Depends(verify_admin_token)) -> Dict[str, str]:
"""Reset all tokens (clear failure counts)"""
try:
token_manager.reset_all_tokens()
return {"message": "所有token状态已重置"}
except Exception as e:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"重置失败: {str(e)}"
)