mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 04:51:10 +00:00
127 lines
4.4 KiB
Python
127 lines
4.4 KiB
Python
import argparse
|
||
import json
|
||
import time
|
||
|
||
from unilabos.config.config import BasicConfig
|
||
from unilabos.registry.registry import build_registry
|
||
|
||
from unilabos.app.main import load_config_from_file
|
||
from unilabos.utils.log import logger
|
||
from unilabos.utils.type_check import TypeEncoder
|
||
|
||
|
||
def register_devices_and_resources(comm_client, lab_registry):
|
||
"""
|
||
注册设备和资源到通信服务器(MQTT/WebSocket)
|
||
"""
|
||
|
||
# 注册资源信息 - 使用HTTP方式
|
||
from unilabos.app.web.client import http_client
|
||
|
||
logger.info("[UniLab Register] 开始注册设备和资源...")
|
||
if BasicConfig.auth_secret():
|
||
# 注册设备信息
|
||
devices_to_register = {}
|
||
for device_info in lab_registry.obtain_registry_device_info():
|
||
devices_to_register[device_info["id"]] = json.loads(
|
||
json.dumps(device_info, ensure_ascii=False, cls=TypeEncoder)
|
||
)
|
||
logger.debug(f"[UniLab Register] 收集设备: {device_info['id']}")
|
||
resources_to_register = {}
|
||
for resource_info in lab_registry.obtain_registry_resource_info():
|
||
resources_to_register[resource_info["id"]] = resource_info
|
||
logger.debug(f"[UniLab Register] 收集资源: {resource_info['id']}")
|
||
print(
|
||
"[UniLab Register] 设备注册",
|
||
http_client.resource_registry({"resources": list(devices_to_register.values())}).text,
|
||
)
|
||
print(
|
||
"[UniLab Register] 资源注册",
|
||
http_client.resource_registry({"resources": list(resources_to_register.values())}).text,
|
||
)
|
||
else:
|
||
# 注册设备信息
|
||
for device_info in lab_registry.obtain_registry_device_info():
|
||
comm_client.publish_registry(device_info["id"], device_info, False)
|
||
logger.debug(f"[UniLab Register] 注册设备: {device_info['id']}")
|
||
|
||
# # 注册资源信息
|
||
# for resource_info in lab_registry.obtain_registry_resource_info():
|
||
# comm_client.publish_registry(resource_info["id"], resource_info, False)
|
||
# logger.debug(f"[UniLab Register] 注册资源: {resource_info['id']}")
|
||
|
||
resources_to_register = {}
|
||
for resource_info in lab_registry.obtain_registry_resource_info():
|
||
resources_to_register[resource_info["id"]] = resource_info
|
||
logger.debug(f"[UniLab Register] 准备注册资源: {resource_info['id']}")
|
||
|
||
if resources_to_register:
|
||
start_time = time.time()
|
||
response = http_client.resource_registry(resources_to_register)
|
||
cost_time = time.time() - start_time
|
||
if response.status_code in [200, 201]:
|
||
logger.info(f"[UniLab Register] 成功通过HTTP注册 {len(resources_to_register)} 个资源 {cost_time}ms")
|
||
else:
|
||
logger.error(
|
||
f"[UniLab Register] HTTP注册资源失败: {response.status_code}, {response.text} {cost_time}ms"
|
||
)
|
||
logger.info("[UniLab Register] 设备和资源注册完成.")
|
||
|
||
|
||
def main():
|
||
"""
|
||
命令行入口函数
|
||
"""
|
||
parser = argparse.ArgumentParser(description="注册设备和资源到 MQTT")
|
||
parser.add_argument(
|
||
"--registry",
|
||
type=str,
|
||
default=None,
|
||
action="append",
|
||
help="注册表路径",
|
||
)
|
||
parser.add_argument(
|
||
"--config",
|
||
type=str,
|
||
default=None,
|
||
help="配置文件路径,支持.py格式的Python配置文件",
|
||
)
|
||
parser.add_argument(
|
||
"--ak",
|
||
type=str,
|
||
default="",
|
||
help="实验室请求的ak",
|
||
)
|
||
parser.add_argument(
|
||
"--sk",
|
||
type=str,
|
||
default="",
|
||
help="实验室请求的sk",
|
||
)
|
||
parser.add_argument(
|
||
"--complete_registry",
|
||
action="store_true",
|
||
default=False,
|
||
help="是否补全注册表",
|
||
)
|
||
args = parser.parse_args()
|
||
load_config_from_file(args.config)
|
||
BasicConfig.ak = args.ak
|
||
BasicConfig.sk = args.sk
|
||
# 构建注册表
|
||
build_registry(args.registry, args.complete_registry, True)
|
||
from unilabos.app.communication import get_communication_client
|
||
|
||
# 获取通信客户端并启动连接
|
||
comm_client = get_communication_client()
|
||
comm_client.start()
|
||
|
||
from unilabos.registry.registry import lab_registry
|
||
|
||
# 注册设备和资源
|
||
register_devices_and_resources(comm_client, lab_registry)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|