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

@@ -651,42 +651,17 @@ class AdminActiveRequestsAdapter(AdminApiAdapter):
self.ids = ids
async def handle(self, context): # type: ignore[override]
db = context.db
from src.services.usage import UsageService
db = context.db
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))
.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.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)
return {"requests": requests}
@dataclass