mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 04:51:10 +00:00
46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
|
|
import json
|
|
import traceback
|
|
import uuid
|
|
from unilabos.app.model import JobAddReq, JobData
|
|
from unilabos.ros.nodes.presets.host_node import HostNode
|
|
from unilabos.utils.type_check import serialize_result_info
|
|
|
|
|
|
def get_resources() -> tuple:
|
|
if HostNode.get_instance() is None:
|
|
return False, "Host node not initialized"
|
|
|
|
return True, HostNode.get_instance().resources_config
|
|
|
|
def devices() -> tuple:
|
|
if HostNode.get_instance() is None:
|
|
return False, "Host node not initialized"
|
|
|
|
return True, HostNode.get_instance().devices_config
|
|
|
|
def job_info(id: str):
|
|
get_goal_status = HostNode.get_instance().get_goal_status(id)
|
|
return JobData(jobId=id, status=get_goal_status)
|
|
|
|
def job_add(req: JobAddReq) -> JobData:
|
|
if req.job_id is None:
|
|
req.job_id = str(uuid.uuid4())
|
|
action_name = req.data["action"]
|
|
action_type = req.data.get("action_type", "LocalUnknown")
|
|
action_args = req.data.get("action_kwargs", None) # 兼容老版本,后续删除
|
|
if action_args is None:
|
|
action_args = req.data.get("action_args")
|
|
else:
|
|
if "command" in action_args:
|
|
action_args = action_args["command"]
|
|
# print(f"job_add:{req.device_id} {action_name} {action_kwargs}")
|
|
try:
|
|
HostNode.get_instance().send_goal(req.device_id, action_type=action_type, action_name=action_name, action_kwargs=action_args, goal_uuid=req.job_id, server_info=req.server_info)
|
|
except Exception as e:
|
|
for bridge in HostNode.get_instance().bridges:
|
|
traceback.print_exc()
|
|
if hasattr(bridge, "publish_job_status"):
|
|
bridge.publish_job_status({}, req.job_id, "failed", serialize_result_info(traceback.format_exc(), False, {}))
|
|
return JobData(jobId=req.job_id)
|