# S57 UI、查询与号码库发布报告(2026-08-27) ## 发布结论 - 代码提交:`c36709f366422b9dc5d37156d42d6e2f78bea051` - B 发布目录:`/opt/lisglosips/releases/s57-ui-number-library-20260827T124730Z` - 配置/回滚备份:`/var/backups/lisglosips-s57/20260827T124730Z` - 数据备份:`/data/backups/mysql/20260827T124730Z`、`/data/backups/redis/20260827T124730Z` - 发布前检查:MySQL、Redis、Nginx、API、CDR Worker、录音 Worker、HEP、Prometheus、Grafana 均为 active,API ready 与 Nginx 配置检查通过。 - 第一次切换因发布脚本误检查不存在的 `/health` 路径得到 404,自动回滚成功;修正为 `/health/ready` 后重新发布并通过,没有遗留半切换状态。 ## 生产数据结果 | 数据表 | 生产数量 | | --- | ---: | | 行政城市 | 371 | | 手机前 7 位号段 | 517,258 | | 城市区号 | 321 | | 运营商前三位规则 | 70 | - 数据文件上传前后 SHA256 一致。 - 生产干跑:`phone.dat` 2502 版本,有效号段 517,258,行政区未匹配 0。 - 导入器拒绝向非空号码库重复写入,并在导入前由发布流程完成 MySQL/Redis 备份。 - Prisma 并行计数和首屏 25 条直查共 85 ms。 ## 生产接口证据 以下耗时来自 B 的 API 完成日志: | 接口 | 状态 | 服务端耗时 | | --- | ---: | ---: | | `/api/v2/active-calls` | 200 | 首次 46 ms,后续 4-6 ms | | `/api/v2/number-library/cities?take=25&skip=0` | 200 | 9 ms | | `/api/v2/number-library/phone-segments?take=25&skip=0` | 200 | 74 ms | | `/api/v2/cdrs` 最近一周 | 200 | 7 ms | | `/api/v2/recordings` 最近一周 | 200 | 5 ms | | `/api/v2/audit-logs` 最近一周 | 200 | 5 ms | 当前通话页面已显示“控制面:就绪”,空闲时返回 0 路真实 dialog,不再出现 OpenSIPS control plane unavailable。 ## 浏览器验收 - 登录态下 Dashboard 只保留两个趋势模块,“客户消费 TOP 10”和“失败响应码分布”已删除。 - 客户网关页标题和列表按内容高度从顶部连续排列,截图所示大面积空白消失。 - 号码库首屏 25 条,显示 1-25 / 371;手机号码库显示 1-25 / 517,258,上一页/下一页状态正确。 - 话单、质检、操作日志日期均默认 `2026-08-21` 至 `2026-08-27`;请求转换为上海时区自然日对应的 UTC 起止值。 - 页面 DOM 均有真实业务内容,没有框架错误覆盖层;关键请求均在 API 日志中返回 200。 ## 本地质量门禁 - ESLint:通过。 - TypeScript project build/typecheck:通过。 - Web production build:通过。 - Vitest:27 个测试文件、98 个测试全部通过。 - 号码库导入器本地与生产干跑:均为未匹配 0。 ## 回滚 如需回滚代码和 API 配置:恢复 `/var/backups/lisglosips-s57/20260827T124730Z/api.env`,将 `/opt/lisglosips/current` 指回该目录内 `previous-release` 记录的版本,并重启 `lisglosips@api`。号码库数据回滚应使用本次发布前 MySQL 备份,不应直接无条件清空四张表。