Files
boss_dp/server/api/workers.py

76 lines
2.5 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""
2026-02-12 18:22:02 +08:00
Worker 查询 API需要登录
"""
2026-02-14 16:49:44 +08:00
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
2026-02-26 01:27:35 +08:00
from server.core.response import api_success, api_error
from server.core.worker_manager import worker_manager
2026-02-14 16:49:44 +08:00
@api_view(["GET"])
@permission_classes([AllowAny])
def health_check(request):
"""健康检查。"""
online = len([w for w in worker_manager.get_all_workers() if w.online])
2026-02-26 01:27:35 +08:00
return api_success({"status": "ok", "workers_online": online})
2026-02-14 16:49:44 +08:00
def _worker_to_dict(w) -> dict:
return {
"worker_id": w.worker_id,
"worker_name": w.worker_name,
"browsers": [b.model_dump() for b in w.browsers],
"online": w.online,
"current_task_id": w.current_task_id,
}
2026-02-14 16:49:44 +08:00
@api_view(["GET"])
def worker_list(request):
"""获取所有已注册的 Worker含在线状态与浏览器列表"""
workers = worker_manager.get_all_workers()
2026-02-26 01:27:35 +08:00
return api_success([_worker_to_dict(w) for w in workers])
2026-02-14 16:49:44 +08:00
@api_view(["GET"])
def worker_detail(request, worker_id):
"""获取指定 Worker 的详情。"""
w = worker_manager.get_worker(worker_id)
if not w:
2026-02-26 01:27:35 +08:00
return api_error(status.HTTP_404_NOT_FOUND, f"Worker {worker_id} 不存在")
return api_success(_worker_to_dict(w))
2026-02-26 21:14:15 +08:00
2026-02-26 21:19:19 +08:00
def _worker_browsers_response(worker_id: str):
"""根据 worker_id 返回比特浏览器环境列表。"""
2026-02-26 21:14:15 +08:00
w = worker_manager.get_worker(worker_id)
if not w:
return api_error(status.HTTP_404_NOT_FOUND, f"Worker {worker_id} 不存在", data=None)
browsers = [
{"id": b.id, "name": b.name or "", "remark": b.remark or ""}
for b in w.browsers
]
return api_success(data=browsers, msg="获取成功")
2026-02-26 21:19:19 +08:00
@api_view(["POST"])
def worker_browsers(request):
2026-02-26 21:21:47 +08:00
"""获取指定电脑Worker中比特浏览器的环境名称列表。worker_id 可从 form-data 或 query 传入。"""
worker_id = (
request.query_params.get("worker_id")
or request.data.get("worker_id")
or request.POST.get("worker_id")
)
2026-02-26 21:19:19 +08:00
if not worker_id:
return api_error(status.HTTP_400_BAD_REQUEST, "请提供 worker_id 参数", data=None)
return _worker_browsers_response(str(worker_id))
@api_view(["GET"])
def worker_browsers_by_path(request, worker_id):
"""获取指定电脑Worker中比特浏览器的环境名称列表。worker_id 在路径中。"""
return _worker_browsers_response(worker_id)