From 8fdde978eabd2541f513e0b1c01ea354bc1cc92c Mon Sep 17 00:00:00 2001 From: butubb <1422726308@qq.com> Date: Thu, 24 Sep 2026 08:55:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=AE=BE=E5=A4=87=E5=90=8D):=20=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E8=AE=BE=E5=A4=87=E4=B8=8E=E6=89=80=E6=9C=89=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E9=83=BD=E6=98=BE=E7=A4=BA=E5=90=8D=E7=A7=B0=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=20IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈:① 元素抓取的选择设备列表显示的是 IP;② 所有 webhook 通知里都是 IP; 要都显示设备名。 - 通知链路统一补名字(调用点不用动):`core/notifier.py` · 新增 `set_device_name_resolver()` + `fill_device_names()`,在 `notify()` 与 `build_message()`(预览/测试发送也走它)里把 `serial` 补成 `device_name`、 把 `serials`/`devices` 列表逐项换成名字。 · 补一处就全带名字了——标题主体、字段表、聚合样本认的都是 `device_name`。 · **做成"纯内存回调"是刻意的**:notify() 的硬红线是零 DB,不能为了取个名字去查库 (那等于在业务线程里加一次阻塞查询)。 · 降级规则:调用点自己传了 device_name 就用它的;查不到名字(没命名/不在池里) 保留原地址;解析器缺失或抛异常都只是降级,绝不影响发送。 - `core/device_pool.py`:维护 `serial → 名称` 内存快照——`init_app` 同步刷一次、 增删改名/迁址后各刷一次(改名立刻生效)、`device-names` 线程每 60s 兜底刷一次 (覆盖整库恢复这类进程外改动)。`name_of()` 只读内存,可在通知路径上安全调用。 - `web_server.py`:装配层接上 `notifier.set_device_name_resolver(device_pool.name_of)`。 - 元素抓取/测试此步骤的设备列表:`GET /api/uiauto/devices` 的 `name` 改用**平台名**, 前端 `editor.js` 新增共用的 `_devCard()`——名字做主标题(粗体), `型号 · 地址` 作副标题。 · 池外设备**退回地址而不是 uiautodev 的 name**:实测那份 name 是设备 codename (一柜子机器全叫 "earth"),拿它认设备等于没名字,地址至少唯一。 · 「测试此步骤」的设备列表原来连状态角标都没有,一并统一成同一个卡片。 - 顺带修一个**既有 bug(不是本次需求)**:`/locate` 设备端定位页从 ce47a5b 那次 web 蓝图拆分起就一直 500——拆分时漏掉了 `render_template_string` 与 `markupsafe.escape as _esc` 两个 import。后者不只是缺个名字:定位页把 query 里的 serial 拼进 HTML,而 `render_template_string` 的模板名是 "