# -*- coding: utf-8 -*- """ Worker 查询 API(需要登录)。 """ from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import AllowAny from rest_framework.response import Response from server.serializers import WorkerOutSerializer from server.core.worker_manager import worker_manager @api_view(["GET"]) @permission_classes([AllowAny]) def health_check(request): """健康检查。""" online = len([w for w in worker_manager.get_all_workers() if w.online]) return Response({"status": "ok", "workers_online": online}) 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, } @api_view(["GET"]) def worker_list(request): """获取所有已注册的 Worker(含在线状态与浏览器列表)。""" workers = worker_manager.get_all_workers() return Response([_worker_to_dict(w) for w in workers]) @api_view(["GET"]) def worker_detail(request, worker_id): """获取指定 Worker 的详情。""" w = worker_manager.get_worker(worker_id) if not w: return Response({"detail": f"Worker {worker_id} 不存在"}, status=status.HTTP_404_NOT_FOUND) return Response(_worker_to_dict(w))