Files
grok2api/app/services/token/service.py
T

157 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Token 服务外观(Facade)"""
from typing import List, Optional, Dict
from app.services.token.models import TokenInfo, EffortType
class TokenService:
"""
Token 服务外观
提供简化的 API,隐藏内部实现细节
"""
@staticmethod
async def _get_manager():
from app.services.token.manager import get_token_manager
return await get_token_manager()
@staticmethod
async def get_token(pool_name: str = "ssoBasic") -> Optional[str]:
"""
获取可用 Token
Args:
pool_name: Token 池名称
Returns:
Token 字符串(不含 sso= 前缀)或 None
"""
manager = await TokenService._get_manager()
return manager.get_token(pool_name)
@staticmethod
async def consume(token: str, effort: EffortType = EffortType.LOW) -> bool:
"""
消耗 Token 配额(本地预估)
Args:
token: Token 字符串
effort: 消耗力度
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.consume(token, effort)
@staticmethod
async def sync_usage(token: str, effort: EffortType = EffortType.LOW) -> bool:
"""
同步 Token 使用量(优先 API,降级本地)
Args:
token: Token 字符串
effort: 降级时的消耗力度
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.sync_usage(token, effort)
@staticmethod
async def record_fail(token: str, status_code: int = 401, reason: str = "") -> bool:
"""
记录 Token 失败
Args:
token: Token 字符串
status_code: HTTP 状态码
reason: 失败原因
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.record_fail(token, status_code, reason)
@staticmethod
async def add_token(token: str, pool_name: str = "ssoBasic") -> bool:
"""
添加 Token
Args:
token: Token 字符串
pool: Token 池名称
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.add(token, pool_name)
@staticmethod
async def remove_token(token: str) -> bool:
"""
删除 Token
Args:
token: Token 字符串
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.remove(token)
@staticmethod
async def reset_token(token: str) -> bool:
"""
重置单个 Token
Args:
token: Token 字符串
Returns:
是否成功
"""
manager = await TokenService._get_manager()
return await manager.reset_token(token)
@staticmethod
async def reset_all():
"""重置所有 Token"""
manager = await TokenService._get_manager()
await manager.reset_all()
@staticmethod
async def get_stats() -> Dict[str, dict]:
"""
获取统计信息
Returns:
各池的统计信息
"""
manager = await TokenService._get_manager()
return manager.get_stats()
@staticmethod
async def list_tokens(pool_name: str = "ssoBasic") -> List[TokenInfo]:
"""
获取指定池的所有 Token
Args:
pool_name: Token 池名称
Returns:
Token 列表
"""
manager = await TokenService._get_manager()
return manager.get_pool_tokens(pool_name)
__all__ = ["TokenService"]