哈哈
This commit is contained in:
@@ -1,32 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
任务提交与查询 API。
|
||||
任务提交与查询 API(需要登录)。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import List, Optional
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
|
||||
from common.protocol import TaskStatus
|
||||
from server.models import TaskCreate, TaskOut
|
||||
from server.core.worker_manager import worker_manager
|
||||
from server.core.task_dispatcher import task_dispatcher
|
||||
from server.api.deps import require_auth
|
||||
|
||||
router = APIRouter(prefix="/api/tasks", tags=["tasks"])
|
||||
router = APIRouter(prefix="/api/tasks", tags=["tasks"], dependencies=[Depends(require_auth)])
|
||||
|
||||
|
||||
@router.post("", response_model=TaskOut, status_code=201)
|
||||
async def create_task(req: TaskCreate):
|
||||
"""
|
||||
提交一个新任务。
|
||||
|
||||
路由规则(优先级从高到低):
|
||||
1. 如果指定了 worker_id → 直接发到该 Worker
|
||||
2. 如果指定了 account_name → 查找拥有该浏览器的 Worker
|
||||
3. 两者都没有 → 400 错误
|
||||
路由规则:worker_id > account_name。
|
||||
"""
|
||||
# 确定目标 worker_id
|
||||
target_worker_id = req.worker_id
|
||||
|
||||
if not target_worker_id and req.account_name:
|
||||
@@ -38,23 +34,14 @@ async def create_task(req: TaskCreate):
|
||||
)
|
||||
|
||||
if not target_worker_id:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail="请指定 worker_id 或 account_name",
|
||||
)
|
||||
raise HTTPException(status_code=400, detail="请指定 worker_id 或 account_name")
|
||||
|
||||
# 检查 Worker 是否在线
|
||||
if not worker_manager.is_online(target_worker_id):
|
||||
raise HTTPException(
|
||||
status_code=503,
|
||||
detail=f"Worker {target_worker_id} 不在线",
|
||||
)
|
||||
raise HTTPException(status_code=503, detail=f"Worker {target_worker_id} 不在线")
|
||||
|
||||
# 创建任务
|
||||
req.worker_id = target_worker_id
|
||||
task = task_dispatcher.create_task(req)
|
||||
|
||||
# 通过 WebSocket 派发
|
||||
ws = worker_manager.get_ws(target_worker_id)
|
||||
if not ws:
|
||||
task.status = TaskStatus.FAILED
|
||||
@@ -65,9 +52,7 @@ async def create_task(req: TaskCreate):
|
||||
if not success:
|
||||
raise HTTPException(status_code=503, detail=f"任务派发失败: {task.error}")
|
||||
|
||||
# 更新 Worker 当前任务
|
||||
worker_manager.set_current_task(target_worker_id, task.task_id)
|
||||
|
||||
return _to_out(task)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user