From e30b333a1cdfa45c37dd288c74d4608c03d67f8d Mon Sep 17 00:00:00 2001 From: zlt Date: Wed, 9 Sep 2026 16:10:39 +0800 Subject: [PATCH] =?UTF-8?q?pms-ws=20=E5=90=AF=E5=8A=A8=E6=A8=AA=E5=B9=85?= =?UTF-8?q?=E4=B8=8E=E8=81=94=E8=B0=83=E9=9D=A2=E6=9D=BF=E6=94=B9=E8=AF=BB?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=8F=82=E6=95=B0=E8=A1=A8,=20=E4=B8=8E?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E9=80=BB=E8=BE=91=E5=90=8C=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pms-ws 的启动横幅原来直接读 settings (.env 层) 的 PMS_QMT_WS_ENABLED 与 PMS_QMT_WS_URL, 而进程实际的启停与端点由运行参数表 pms_runtime_param 决定。 两个源不一致时横幅就说反话: 参数表里通道开着, 横幅却打「未启用 (空转)」, 下一行紧接着就是握手成功、ONLINE、心跳、每 5 分钟拉快照。 改成与 _refresh_params 同一个取值源 (param_store 优先, 读不到退回 .env 初值, 并明说这行是初值)。同批把 ws_smoke.py status 面板的端点显示一并对齐 —— 同一类误导, 排错时最先看的就是它。 只改日志与取值源, 不碰连接、握手与下发逻辑。 Co-Authored-By: Claude Opus 5 --- app/ws/runner.py | 20 ++++++++++++++++++-- scripts/ws_smoke.py | 6 ++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/ws/runner.py b/app/ws/runner.py index 433a5f8..cc61e32 100644 --- a/app/ws/runner.py +++ b/app/ws/runner.py @@ -976,8 +976,24 @@ def _is_conn_error(e: BaseException) -> bool: async def main(): - logger.info("pms-ws 启动 · 协议 V1.0 · 端点 %s · 模式 %s", settings.PMS_QMT_WS_URL, - "启用" if settings.PMS_QMT_WS_ENABLED else "未启用 (空转)") + """启动横幅。取值源必须与 _refresh_params 一致 —— 启停与端点的真值在参数表 + (pms_runtime_param), .env 里那份只是文件初值。 + + 2026-09-09: 这里原来直接读 settings, 而参数表里通道是开的, 于是横幅打出「未启用 + (空转)」, 紧接着就是握手成功、ONLINE、心跳、每 5 分钟拉快照 —— 日志自己打自己的脸。 + 读错源的日志比没有日志更坏: 它会把排错的人往「通道没开」这条死路上带。 + """ + def _banner(): + return (param_store.get("PMS_QMT_WS_URL", settings.PMS_QMT_WS_URL), + param_store.get_bool("PMS_QMT_WS_ENABLED", False)) + try: + url, enabled = await _db(_banner) + except Exception as e: # 打一行横幅而已, 读不到参数表绝不能挡住启动 + url, enabled = settings.PMS_QMT_WS_URL, settings.PMS_QMT_WS_ENABLED + logger.warning("横幅取参数表失败, 改按 .env 初值打印 (以运行时参数为准): %s", + _brief_err(e)) + logger.info("pms-ws 启动 · 协议 V1.0 · 端点 %s · 模式 %s", url, + "启用" if enabled else "未启用 (空转)") await WsRunner().run() diff --git a/scripts/ws_smoke.py b/scripts/ws_smoke.py index 9a9f98f..84e67ca 100644 --- a/scripts/ws_smoke.py +++ b/scripts/ws_smoke.py @@ -46,7 +46,7 @@ def _fmt_age(dt): def cmd_status(args): from app.repo import qmt_repo - from app.services import dispatcher + from app.services import dispatcher, param_store from config.settings import settings st = qmt_repo.get_state() @@ -54,7 +54,9 @@ def cmd_status(args): print(BAR) print(f"ws 通道状态 · {datetime.now():%Y-%m-%d %H:%M:%S}") print(BAR) - print(f" 端点 {settings.PMS_QMT_WS_URL}") + # 端点的真值在参数表, .env 那份只是初值 —— 与 pms-ws 实际连接用的取值源保持一致, + # 否则这块面板会在两边不一样时显示一个谁也没在用的地址 (2026-09-09 同批修横幅) + print(f" 端点 {param_store.get('PMS_QMT_WS_URL', settings.PMS_QMT_WS_URL)}") print(f" 下发模式 PMS_DISPATCH_MODE = {dispatcher.mode()}" f" (联调用本工具, 不必切到 ws)") print(f" pms-ws 进程 {'在线' if ch['process_alive'] else '**不在线**'}"