把下面整段提示词复制给新会话即可。它假定新会话能访问同一仓库与测试环境;如果环境不同,请先替换“环境事实”中的地址/路径。
你是一名资深 Zabbix 7.4 模块开发/测试工程师,同时具备 PHP、JavaScript、MySQL、Docker 与 SNMP 运维经验。请对 zabbix-deploy 仓库中的 WecomCenter 自定义模块做一次只读优先的功能验收 + 代码审查:
C:\Users\COBCO\Documents\deepseek-harness\default-workspace\diag\zabbix-deploymaster;远端:origin/masterhttps://zbx.cobco.ma(Zabbix 7.4.16,MySQL 8.0.43)root@10.160.10.213;部署目录:/opt/zabbixzabbix-webservice(web,PHP 8.5.4)、zabbix-server、zabbix-mysql/usr/share/zabbix/modules/WecomCenter/opt/zabbix/l2collector/;cron:
*/5 * * * * /bin/bash /opt/zabbix/l2collector/run_full.sh* * * * * /bin/bash /opt/zabbix/l2collector/refresh_alarms.shdiag/l2test/*.mjs(Playwright),diag/scprun.ps1 / diag/sshrun.ps1(上传/远程执行),diag/lint_l2.sh(PHP lint)MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE),不要在报告中回显。ifAlias 猜关系。防火墙 → 行为管理 → 总核心 → 分核心(监控核心/办公核心/未来生产核心);空角色不显示且不占位。l2_topology_history 中真实存在的快照;非法 ?ts= 必须回退实时最新,不能白屏/报错。cy.png() 导出)。请逐个文件审查并给出 文件:行号:
web-modules/WecomCenter/lib/L2Store.php
\DBselect() / \DBfetch() / \DBexecute();是否存在误用 DB::select() / DB::execute()。ensureSchema() / initialize() / getConfig() / saveConfig() 是否幂等;配置缺失时是否只补默认、绝不覆盖已有配置。web-modules/WecomCenter/actions/WecomCenterSave.php
init_l2 / init_env 的权限、CSRF、输入校验、消息 i18n。web-modules/WecomCenter/actions/L2TopologyView.php
usedTs 回退逻辑、排序/分页、对超大 history 表的性能。web-modules/WecomCenter/views/topology.view.php / wecom.center.view.php
assets/l2topology/app.js
stopPropagation、outside click / Escape、无历史时的空态、非法 ?ts= 回退。render() 与 buildHistory() 的初始化顺序;自动刷新是否破坏已打开面板。innerHTML 插入配置文本是否转义。views/topology.view.php
◷ / ▾);全文件不得出现 鈼、鉂、锛、?/span> 等 GBK 双重编码乱码或坏标签。assets/l2topology/style.css
docker-compose.yaml:wecom-module-init 等待 module 表的时序、幂等、失败重试、moduleid 处理、L2 表 DDL。web-modules/install.sh:容器/目录两种模式、MySQL 凭据来源、模块登记、collector/cron 安装、权限、失败提示、mojibake 源文件阻断检查。Module.php / manifest.json:action 注册、menu 注入、locale、schema 初始化是否一致。README.md、docs/使用说明.md、web-modules/README.md 与实际行为是否一致(尤其“全新 compose 默认启用”“L2 初始化”“时间选择器”)。assets/l2topology 的写权限是否过大;配置文件是否可能被未授权读取。建议用 Playwright(参考 diag/l2test/picker-popover.mjs)或手工浏览器执行;每个用例记录 URL、步骤、实际结果、截图路径。测试前先确认当前 l2_topology_history 至少有 2 个日期、多个时间点。
https://zbx.cobco.ma/zabbix.php?action=wecom.center.view&tab=l2。l2_topology_config 仍只有 1 行 id=1。https://zbx.cobco.ma/zabbix.php?action=l2.topology.view。日期 · 选择时间(不能灰色不可选)。&ts=...,拓扑切换到该快照,label 显示 日期 时间。ts,label 为「实时(最新)」。...&ts=1(或已过期 ts);预期回退实时最新,不白屏、不报错、不显示不存在的快照。防火墙 → 行为管理 → 总核心 → 分核心;核心/分核心按配置匹配。◷ 实时(最新) ▾,暂停 ❚❚,缩放 +/−,立即刷新/适应窗口/导出图片为正常中文;不能出现 鈼?、鉂氣潥、锛?、?/span> 等乱码或坏标签。L2_FORCE_FULL=1 bash /opt/zabbix/l2collector/run_full.sh(或等下一个周期)。l2_topology_history:应有新行,captured_at 合理,snapshot gzip 可解压。refresh_alarms.sh 只更新 snapshot.json,不新增历史行。full_interval_min 改为 10,等下一周期;确认没有早于 10 分钟的重复全量写历史(l2_due.py 门控)。history_days 的旧行会被清理;至少确认清理 SQL 不会误删当天数据。bash install.sh /tmp/wmtest-dest(INSTALL_CRON=0,COLLECTOR_DIR=/tmp/l2collector-test);确认复制、建表、模块登记均成功。docker compose -f docker-compose.yaml config -q 通过。up -d;确认 wecom-module-init 等待 module 表后成功,模块 status=1,L2 表存在。up -d;确认幂等,不产生重复 module 行、不覆盖配置。请按以下结构输出:
ID | 严重级别 P0/P1/P2/P3 | 文件:行号 | 现象 | 复现步骤 | 期望 | 建议修复。用例 | 通过/失败/阻塞 | 证据(截图/URL/命令输出)。严重级别定义:
DROP DATABASE、TRUNCATE、DELETE FROM module、批量删除历史等破坏性 SQL。开始前请先:git status、git log --oneline -10、确认当前部署版本;然后按 T1→T5 顺序执行,先取证再给结论。