- 实现了应用配置的数据类结构(MqttConfig, TmsConfig, AppConfig) - 创建了配置加载和解析功能,支持从YAML文件读取配置 - 添加了TDengine数据库配置和连接池管理 - 实现了MQTT客户端依赖注入和服务构建 - 创建了钻孔实时数据的ORM映射和SQL构建功能 - 实现了TDengine Writer用于数据写入超级表 - 添加了MQTT模拟服务,支持发布、订阅和数据转发功能 - 创建了随机数据发送器用于测试 - 实现了消息持久化到本地文件功能 - 配置了数据库连接池和SQL执行功能
66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from dataclasses import dataclass
|
|
from urllib.parse import urlparse
|
|
|
|
from config import get_value
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class TDengineConfig:
|
|
url: str = ""
|
|
username: str = ""
|
|
password: str = ""
|
|
database: str = ""
|
|
stable: str = "drilling_realtime_st"
|
|
device_code: str = "GJ-304-0088"
|
|
pool_size: int = 2
|
|
timeout: int = 10
|
|
|
|
@property
|
|
def enabled(self):
|
|
return bool(self.base_url and self.database and self.username)
|
|
|
|
@property
|
|
def base_url(self):
|
|
base_url, _ = parse_taos_url(self.url)
|
|
return base_url
|
|
|
|
|
|
def parse_taos_url(jdbc_url):
|
|
if not jdbc_url:
|
|
return "", ""
|
|
raw = str(jdbc_url).strip()
|
|
if raw.lower().startswith("jdbc:taos-rs://"):
|
|
raw = "http://" + raw[len("jdbc:TAOS-RS://") :]
|
|
elif "://" not in raw:
|
|
raw = "http://" + raw
|
|
parsed = urlparse(raw)
|
|
base_url = f"{parsed.scheme or 'http'}://{parsed.hostname or '127.0.0.1'}:{parsed.port or 6041}"
|
|
database = (parsed.path or "").strip("/")
|
|
return base_url, database
|
|
|
|
|
|
def _resolve_raw_config(cfg_or_app):
|
|
raw = getattr(cfg_or_app, "raw", None)
|
|
return raw if isinstance(raw, dict) else cfg_or_app
|
|
|
|
|
|
def load_tdengine_config(cfg_or_app, default_device_code="GJ-304-0088"):
|
|
cfg = _resolve_raw_config(cfg_or_app)
|
|
url = get_value(cfg, ("tdengine", "url"), ("tdengine-url",), default="")
|
|
_, database_from_url = parse_taos_url(url)
|
|
return TDengineConfig(
|
|
url=url,
|
|
username=get_value(cfg, ("tdengine", "username"), ("tdengine-username",), default=""),
|
|
password=get_value(cfg, ("tdengine", "password"), ("tdengine-password",), default=""),
|
|
database=get_value(cfg, ("tdengine", "database"), ("tdengine-database",), default=database_from_url),
|
|
stable=get_value(cfg, ("tdengine", "stable"), ("tdengine-stable",), default="drilling_realtime_st"),
|
|
device_code=get_value(
|
|
cfg,
|
|
("tdengine", "device-code"),
|
|
("tdengine", "equipment-sn"),
|
|
default=default_device_code,
|
|
),
|
|
pool_size=int(get_value(cfg, ("tdengine", "pool-size"), ("tdengine-pool-size",), default=2)),
|
|
timeout=int(get_value(cfg, ("tdengine", "timeout"), ("tdengine-timeout",), default=10)),
|
|
)
|