132 lines
4.5 KiB
Python
132 lines
4.5 KiB
Python
|
|
# common/config_manager.py
|
|||
|
|
import os
|
|||
|
|
import configparser
|
|||
|
|
from PySide6.QtCore import QTimer, QMutex, Signal, QObject
|
|||
|
|
|
|||
|
|
class ConfigManager(QObject):
|
|||
|
|
_instance = None
|
|||
|
|
_mutex = QMutex()
|
|||
|
|
_initialized = False # 是否已完成初始化
|
|||
|
|
|
|||
|
|
# 方量调节控制器的参数变化 (新的最小值、新的最大值、新的初始值)
|
|||
|
|
adjuster_params_changed = Signal(float, float, float)
|
|||
|
|
|
|||
|
|
# 消息清理间隔变化(新时间间隔 单位:秒)
|
|||
|
|
msg_clean_interval_changed = Signal(int)
|
|||
|
|
|
|||
|
|
def __new__(cls):
|
|||
|
|
cls._mutex.lock()
|
|||
|
|
try:
|
|||
|
|
if not cls._instance:
|
|||
|
|
cls._instance = super().__new__(cls)
|
|||
|
|
finally:
|
|||
|
|
cls._mutex.unlock()
|
|||
|
|
return cls._instance
|
|||
|
|
|
|||
|
|
def __init__(self):
|
|||
|
|
# __init__ 只执行一次
|
|||
|
|
if self._initialized:
|
|||
|
|
return
|
|||
|
|
super().__init__()
|
|||
|
|
# 执行初始化逻辑
|
|||
|
|
self._init_config()
|
|||
|
|
self._start_refresh_timer()
|
|||
|
|
self._initialized = True
|
|||
|
|
|
|||
|
|
def _init_config(self):
|
|||
|
|
"""初始化配置(加载默认值或配置文件)"""
|
|||
|
|
self.config_path = "config/constant_config.ini"
|
|||
|
|
|
|||
|
|
# 默认配置
|
|||
|
|
# 系统状态消息 和 预警消息相关的默认配置
|
|||
|
|
self.MSG_KEEP_DAYS = 14 # 消息保留天数 单位: 天
|
|||
|
|
self.CLEAN_INTERVAL = 7 * 24 * 3600 # 清理周期(秒) 单位: 秒
|
|||
|
|
|
|||
|
|
# 方量调节控件(ValueAdjuster)默认值
|
|||
|
|
self.ADJUSTER_MIN = 0.0 # 最小值
|
|||
|
|
self.ADJUSTER_MAX = 99.0 # 最大值
|
|||
|
|
self.ADJUSTER_INITIAL = 2.5 # 初始值
|
|||
|
|
|
|||
|
|
# 首次加载配置文件
|
|||
|
|
self._load_config()
|
|||
|
|
|
|||
|
|
def _load_config(self):
|
|||
|
|
"""从配置文件加载参数(覆盖默认值)"""
|
|||
|
|
if os.path.exists(self.config_path):
|
|||
|
|
config = configparser.ConfigParser()
|
|||
|
|
config.read(self.config_path, encoding='utf-8')
|
|||
|
|
|
|||
|
|
# 消息相关的参数
|
|||
|
|
# 读取消息保留天数
|
|||
|
|
self.MSG_KEEP_DAYS = config.getint(
|
|||
|
|
"message_clean",
|
|||
|
|
"keep_days",
|
|||
|
|
fallback=self.MSG_KEEP_DAYS
|
|||
|
|
)
|
|||
|
|
# 读取清理周期(天→秒)
|
|||
|
|
self.CLEAN_INTERVAL = config.getint(
|
|||
|
|
"message_clean",
|
|||
|
|
"interval_days",
|
|||
|
|
fallback=self.CLEAN_INTERVAL // (24 * 3600)
|
|||
|
|
) * 24 * 3600
|
|||
|
|
self.msg_clean_interval_changed.emit(self.CLEAN_INTERVAL)
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 方量调节控件(ValueAdjuster)参数
|
|||
|
|
# 读取最小值(fallback为当前默认值)
|
|||
|
|
min_value = config.getfloat(
|
|||
|
|
"adjuster_value",
|
|||
|
|
"min",
|
|||
|
|
fallback=self.ADJUSTER_MIN
|
|||
|
|
)
|
|||
|
|
# 读取最大值
|
|||
|
|
max_value = config.getfloat(
|
|||
|
|
"adjuster_value",
|
|||
|
|
"max",
|
|||
|
|
fallback=self.ADJUSTER_MAX
|
|||
|
|
)
|
|||
|
|
# 读取初始值
|
|||
|
|
initial_value = config.getfloat(
|
|||
|
|
"adjuster_value",
|
|||
|
|
"initial",
|
|||
|
|
fallback=self.ADJUSTER_INITIAL
|
|||
|
|
)
|
|||
|
|
# 验证配置的值的有效性
|
|||
|
|
if min_value <= max_value and min_value <= initial_value <= max_value:
|
|||
|
|
self.ADJUSTER_MIN = min_value
|
|||
|
|
self.ADJUSTER_MAX = max_value
|
|||
|
|
self.ADJUSTER_INITIAL = initial_value
|
|||
|
|
self.adjuster_params_changed.emit(self.ADJUSTER_MIN, self.ADJUSTER_MAX, self.ADJUSTER_INITIAL)
|
|||
|
|
|
|||
|
|
def _start_refresh_timer(self):
|
|||
|
|
"""启动定时刷新, 每5分钟刷新一次配置"""
|
|||
|
|
self.refresh_timer = QTimer()
|
|||
|
|
self.refresh_timer.timeout.connect(self._load_config) # 定时重新加载
|
|||
|
|
self.refresh_timer.start(5 * 60 * 1000) # 5分钟(毫秒)
|
|||
|
|
# 测试 30秒刷新一次
|
|||
|
|
# self.refresh_timer.start(30 * 1000)
|
|||
|
|
|
|||
|
|
def manual_refresh(self):
|
|||
|
|
"""手动刷新配置: 供立即生效使用"""
|
|||
|
|
# print("手动刷新配置...")
|
|||
|
|
self._load_config()
|
|||
|
|
|
|||
|
|
# 获取消息保存天数
|
|||
|
|
def get_msg_keep_days(self):
|
|||
|
|
return self.MSG_KEEP_DAYS
|
|||
|
|
|
|||
|
|
# 获取消息清理间隔
|
|||
|
|
def get_clean_interval(self):
|
|||
|
|
return self.CLEAN_INTERVAL
|
|||
|
|
|
|||
|
|
# 获取方量调节器的最小值
|
|||
|
|
def get_adjuster_min(self):
|
|||
|
|
return self.ADJUSTER_MIN
|
|||
|
|
|
|||
|
|
# 获取方量调节器的最大值
|
|||
|
|
def get_adjuster_max(self):
|
|||
|
|
return self.ADJUSTER_MAX
|
|||
|
|
|
|||
|
|
# 获取方量调节器的初始值
|
|||
|
|
def get_adjuster_initial(self):
|
|||
|
|
return self.ADJUSTER_INITIAL
|