瀏覽代碼

六层链实测(证据) + analyze 运行日志按用户令 2 改落 logs/build

实测: scripts/windcms.py analyze --window w0316 --steps model_run → rc=1, 0.1s:
  python.exe: can't open file 'scripts\rudong_model_run.py': No such file or directory
⇒ 六层链的**壳在包内**(windcms.py analyze 的子集参数 ingest/oem_scan/energy_share/model_run/fusion/
   report/kb 就是那四步的编排), 但四步脚本本体不在包内(rudong_tcm_oem_scan /
   rudong_line_energy_share / rudong_model_run / rudong_fusion_run) —— 正是补件清单 B5 那条。
   对逆向工程的含义: **接口已由壳给出**(每步调哪个脚本、什么参数), 缺的是实现;
   振动线出件那 45 件(23 测量形态 + 22 文本)要"可反推"真正落成"已在重算链上",
   得先按壳的接口补这四个脚本。

顺带逮到并修: analyze 把运行日志写进**产物仓**(out/analyze_log.json, src/windcms/pipeline.py:147),
违反用户令 2「运行日志只在 logs/」⇒ 改落 logs/build/<场>/windcms/analyze_log.json;
plugins.py 的 job_status 读侧同步改(保留旧路径兜底)。产物仓里的旧件已清, 复跑确认落点正确。
zhouyang.xie 3 周之前
父節點
當前提交
065a230637
共有 2 個文件被更改,包括 15 次插入 和 4 次删除
  1. 9 3
      src/windcms/pipeline.py
  2. 6 1
      src/windcms/plugins.py

+ 9 - 3
src/windcms/pipeline.py

@@ -143,8 +143,14 @@ def analyze(cfg, input_path=None, window=None, steps=None, bands='ALL'):
         log.append(dict(step='FAILED', cmd='', rc=1, seconds=0, tail=str(e)[-1500:]))
         status = 'failed'
     summary = dict(status=status, windows=list(data.windows(cfg)), seconds=round(time.time() - t_all, 1), finished=time.strftime('%Y-%m-%d %H:%M:%S'), steps=log)
-    # 日志里有中文命令回显: 缺 encoding 会按系统 locale(cp936) 写 → 中文 Windows 崩
-    with open(out / 'analyze_log.json', 'w', encoding='utf-8') as f:
+    # ★ 2026-09-17 用户令 2: 运行日志只在 logs/ —— 原先写 `out/analyze_log.json`(产物仓),
+    #   于是产物仓里躺着运行日志(反向审计把它当产物、log_audit 也要报了)。改落
+    #   `logs/build/<场>/windcms/analyze_log.json`; 产物仓里的旧件已被清理。
+    #   日志里有中文命令回显: 缺 encoding 会按系统 locale(cp936) 写 → 中文 Windows 崩
+    from src import logfile as _lf
+    logp = _lf.build_log('windcms/analyze_log.json', cfg.get('key', 'rudong'))
+    logp.parent.mkdir(parents=True, exist_ok=True)
+    with open(logp, 'w', encoding='utf-8', newline='\n') as f:
         json.dump(summary, f, ensure_ascii=False, indent=1)
-    print(f'analyze {status}: {summary["seconds"]}s → {out}/analyze_log.json', flush=True)
+    print(f'analyze {status}: {summary["seconds"]}s → {logp}', flush=True)
     return summary

+ 6 - 1
src/windcms/plugins.py

@@ -393,7 +393,12 @@ def farm_overview(ctx):
 @plugin('job_status', '查看后台 analyze 任务进度与上次结果 (analyze_log.json)', {})
 def job_status(ctx):
     out = ctx['cfg']['out']
-    logp, lp = out / 'analyze_stdout.log', out / 'analyze_log.json'
+    # ★ 2026-09-17 用户令 2: analyze 的运行日志与结果都改落 logs/build/ (原先落在产物仓 out/ 下);
+    #   读侧同步改, 并保留旧路径兜底 —— 老机器上可能还留着那时的件, 不该一改就显示"无运行日志"。
+    from src import logfile as _lf
+    _b = _lf.build_log('windcms/analyze_log.json', ctx['cfg'].get('key', 'rudong')).parent
+    logp = (_b / 'analyze_stdout.log') if (_b / 'analyze_stdout.log').exists() else (out / 'analyze_stdout.log')
+    lp = (_b / 'analyze_log.json') if (_b / 'analyze_log.json').exists() else (out / 'analyze_log.json')
     # 日志与结果都是中文文本: 不写 encoding 会按系统 locale(cp936) 读 → 乱码/解码失败
     tail = open(logp, encoding='utf-8').read()[-1200:] if logp.exists() else '(无运行日志)'
     last = json.load(open(lp, encoding='utf-8')) if lp.exists() else None