zhouyang.xie 6329889240 2.11.6 消缺: restart 等待判据改为必须等于 STOPPED(原先只看'不是RUNNING'导致STOP_PENDING抢跑吃1056); start 三次重试; 补 win_state 回归测试; 改正2.11.5记录里的验收表述 1 هفته پیش
..
common 6329889240 2.11.6 消缺: restart 等待判据改为必须等于 STOPPED(原先只看'不是RUNNING'导致STOP_PENDING抢跑吃1056); start 三次重试; 补 win_state 回归测试; 改正2.11.5记录里的验收表述 1 هفته پیش
README.md 6329889240 2.11.6 消缺: restart 等待判据改为必须等于 STOPPED(原先只看'不是RUNNING'导致STOP_PENDING抢跑吃1056); start 三次重试; 补 win_state 回归测试; 改正2.11.5记录里的验收表述 1 هفته پیش
__init__.py 6076957aba 2.11.0 源码模块化重构 P0: 七个模块目录+接口层(common/app_x_guanlan/api.py)+模块边界门+四组件接入点接口+方案文档; 零行为变化 2 هفته پیش

README.md

观澜 · 后端(app_backEnd/)

职责:组件服务(分析/振动/仿真/三维)、统一网关、运维控制台、重算编排与作业状态、CLI 与进程管理

允许依赖:app_common, app_ETL, app_algorithmModel, app_ontology

对外公开面:common/app_backEnd_guanlan/api.py —— 模块间调用只许走这里(scripts/module_boundary_audit.py 机器检查)。

当前实现落点(P4 已实体迁入):guanlan.py、scripts/{windscada_serve,guanlan_gateway,guanlan_ops,ops*}.py、src/windscada/{config,terms,i18n,lang,report_export}.py

迁移状态:P4 已完成(2026-09-22) —— 21 文件 / 10,482 行迁入本模块:cli.py(原根 guanlan.py)、serve.py(分析组件)、gateway.py、ops.py、service.py、start_hidden.py、ops_{launch,run,start_and_open,stop_keep_gateway}.py、windcms/{serve,orchestrator,llm,agent}.py 与config/terms/i18n/lang/report_export/deid/deid_public.py。入口路径(根 guanlan.py、scripts/<9 件>)与旧库路径全部留兼容壳;网关与 Nginx 的接入点契约改名为 gateway_contract.py(避免与真实现 gateway.py 撞名)。实逮并修掉三处:① 壳里 sys.path 插错层(scripts/ 的 parent 不是安装根);② serve/gateway 没有 main()(入口在 __main__ 守卫里直接起服务)⇒ 壳改为"有 main 调 main、没有就 runpy.run_path(run_name='__main__')";③ P0 的 gateway.py 接口契约与 P4 真实现撞名(真实现被挡在门外)。验收:服务起停 + 六条路由全 200(/、/detail/v2、/detail/api/fleet、/ops、/ops/api/state、/cms/、/sim/)。

依据:docs/重构方案_模块化_v0.1.md(用户令 2026-09-22:只重构目录与接口、零行为变化、逐版本可回滚)。

P4 后续消缺(2.11.5 / 2026-09-28):service.py 在 Windows 上的 restart 原先直接调 sc.exe restart <名> —— 而 sc.exe 根本没有 restart 子命令(这是与 systemctl restart 的差异),所以该命令一直是"打印用法帮助 + 非零退出",服务从未真正重启过(stop/start 是有效的,所以此前靠手动两步绕过)。现改为 停 → 轮询 SCM 直到 STOPPED(最长 90 s)→ 起:sc.exe stop 是异步的,不等停稳就 start 会吃 1056/1058 错,中间必须等。--dry-run 会把这两条命令与"等待"这一步一并打印出来。

同一条命令的第二次修正(2.11.6 / 2026-09-28,远端实测):2.11.5 的等待判据是"状态不是 RUNNING 就算停稳",而 sc.exe stop 之后 SCM 先回 STOP_PENDING ⇒ 判据立刻为真、start 抢跑,远端服务实测报 1056("服务的一个实例已在运行"),网关/仿真/三维端口被停掉约一分钟。现改为 win_state() + wait_state("STOPPED", 120s)(必须等于 STOPPED),start 再给三次机会(间隔 5 s)。教训:异步动作的"完成"判据要认目标态,不能认"不是起始态"。