feat(config): 添加配置管理和MQTT模拟服务功能
- 实现了应用配置的数据类结构(MqttConfig, TmsConfig, AppConfig) - 创建了配置加载和解析功能,支持从YAML文件读取配置 - 添加了TDengine数据库配置和连接池管理 - 实现了MQTT客户端依赖注入和服务构建 - 创建了钻孔实时数据的ORM映射和SQL构建功能 - 实现了TDengine Writer用于数据写入超级表 - 添加了MQTT模拟服务,支持发布、订阅和数据转发功能 - 创建了随机数据发送器用于测试 - 实现了消息持久化到本地文件功能 - 配置了数据库连接池和SQL执行功能
This commit is contained in:
65
db/config.py
Normal file
65
db/config.py
Normal file
@@ -0,0 +1,65 @@
|
||||
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)),
|
||||
)
|
||||
Reference in New Issue
Block a user