refactor: 重构活跃请求查询逻辑到 UsageService

- 在 UsageService 新增 get_active_requests 方法,统一处理活跃请求查询
- 支持自动清理超时的 pending 请求(默认 5 分钟)
- admin 和 user 接口均复用该方法,减少重复代码
- 支持按 ID 列表查询或查询所有活跃请求
This commit is contained in:
fawney19
2025-12-11 10:04:15 +08:00
parent 6016f08d1c
commit 913a87d7f3
3 changed files with 88 additions and 77 deletions

View File

@@ -662,60 +662,18 @@ class GetActiveRequestsAdapter(AuthenticatedApiAdapter):
ids: Optional[str] = None
async def handle(self, context): # type: ignore[override]
from src.services.usage import UsageService
db = context.db
user = context.user
id_list = None
if self.ids:
# 查询指定 ID 的请求状态(只能查询自己的)
id_list = [id.strip() for id in self.ids.split(",") if id.strip()]
if not id_list:
return {"requests": []}
records = (
db.query(
Usage.id,
Usage.status,
Usage.input_tokens,
Usage.output_tokens,
Usage.total_cost_usd,
Usage.response_time_ms,
)
.filter(Usage.id.in_(id_list), Usage.user_id == user.id)
.all()
)
else:
# 查询所有活跃请求pending 或 streaming
records = (
db.query(
Usage.id,
Usage.status,
Usage.input_tokens,
Usage.output_tokens,
Usage.total_cost_usd,
Usage.response_time_ms,
)
.filter(
Usage.user_id == user.id,
Usage.status.in_(["pending", "streaming"]),
)
.order_by(Usage.created_at.desc())
.limit(50)
.all()
)
return {
"requests": [
{
"id": r.id,
"status": r.status,
"input_tokens": r.input_tokens,
"output_tokens": r.output_tokens,
"cost": float(r.total_cost_usd) if r.total_cost_usd else 0,
"response_time_ms": r.response_time_ms,
}
for r in records
]
}
requests = UsageService.get_active_requests(db=db, ids=id_list, user_id=user.id)
return {"requests": requests}
class ListAvailableProvidersAdapter(AuthenticatedApiAdapter):