From 32bba1bd8400015b16f2b3d91988512a580c35da Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Thu, 27 Aug 2026 15:55:32 +0800 Subject: [PATCH] record s55 ui performance deployment --- IMPLEMENTATION_STATUS.md | 11 +++++ .../20260827_UI_PERFORMANCE_RELEASE_REPORT.md | 45 +++++++++++++++++++ .../reports/REMOTE_SMOKE_20260827T073955Z.md | 24 ++++++++++ 3 files changed, 80 insertions(+) create mode 100644 docs/20260827_UI_PERFORMANCE_RELEASE_REPORT.md create mode 100644 tests/reports/REMOTE_SMOKE_20260827T073955Z.md diff --git a/IMPLEMENTATION_STATUS.md b/IMPLEMENTATION_STATUS.md index fff0910..fd3d335 100644 --- a/IMPLEMENTATION_STATUS.md +++ b/IMPLEMENTATION_STATUS.md @@ -90,6 +90,17 @@ ## 交接记录 +### 2026-08-27 15:50 - UI 性能整改提交、推送并发布 B s55 + +- 状态:已完成,存在一项与本次代码无关的环境告警 +- 操作服务器:B、本地;未修改 A/T、TLS、数据库 schema、Redis 配置或 SIP 路由 +- 完成内容:提交并推送 `ecb567c0dacd749607808fbed09648267757be6f`;B 从精确 Git bundle 在 Linux 上构建并生成固定 artifact,发布为 `/opt/lisglosips/releases/s55-ui-performance-20260827153500`,由 s54 原子切换到 s55。Dashboard 使用 overview 聚合接口,话单默认 25 条并行查询,页面统一 2 秒加载弹窗和 10 秒请求超时。 +- 发布证据:artifact SHA256 `acc49bb21506448527732e965c345a5e71e83090781be76df750a93cffccaece`,19,681 个文件;MySQL/Redis 备份均为 `/data/backups/*/20260827T073857Z` 且 SHA 校验通过;B preflight、API ready、Nginx 配置与外部 smoke 通过,新首页引用 `index-DcpB-OOG.js` 和 `index-u-EPfKoT.css`。 +- 性能回读:真实管理员认证后,`/dashboard/overview` 外部耗时 1,843ms、24 个趋势桶;`/cdrs?take=25` 外部耗时 2,357ms,返回 25/97 条,较整改前约 5.5 秒下降,但仍会按设计在 2 秒后显示加载弹窗。 +- 验证结果:本地 ESLint、TypeScript、Prisma validate、95 条 Vitest、Web build 通过;B Linux workspace build、release artifact、服务 preflight、匿名 smoke、真实认证 Dashboard/CDR 只读检查通过。完整 Playwright UI 巡检因本机缺少 Chromium 二进制未执行,未临时安装软件。 +- 回滚方式:`sudo /opt/lisglosips/current/infra/server-b/s30/lisglosips-release-rollback.sh /opt/lisglosips/releases/s54-cmpp-ui-style-20260702103305`;发布脚本自身带失败自动回切,本次未触发。 +- 环境告警:B 到 A `100.90.90.90` 的 Tailscale ping 和录音专用 SSH 均超时,导致 recording-worker 约每 135 秒由 systemd 自动重启;本次未改 worker 源码,B 其他服务均 active。需 A 恢复在线后复核录音 Worker,不应通过回滚 s55 掩盖 A 不可达问题。 + ### 2026-06-30 14:20 - `20260630release` 稳定版封版 - 状态:已完成 diff --git a/docs/20260827_UI_PERFORMANCE_RELEASE_REPORT.md b/docs/20260827_UI_PERFORMANCE_RELEASE_REPORT.md new file mode 100644 index 0000000..13186db --- /dev/null +++ b/docs/20260827_UI_PERFORMANCE_RELEASE_REPORT.md @@ -0,0 +1,45 @@ +# LisgloSIPS UI 性能整改 B 发布报告 + +## 发布信息 + +| 项目 | 值 | +| --- | --- | +| 发布时间 | 2026-08-27 15:39 +08:00 | +| 代码提交 | `ecb567c0dacd749607808fbed09648267757be6f` | +| Git 分支 | `main`,已推送 `origin/main` | +| 新 release | `/opt/lisglosips/releases/s55-ui-performance-20260827153500` | +| 回滚 release | `/opt/lisglosips/releases/s54-cmpp-ui-style-20260702103305` | +| Artifact SHA256 | `acc49bb21506448527732e965c345a5e71e83090781be76df750a93cffccaece` | +| Web 资产 | `index-DcpB-OOG.js`、`index-u-EPfKoT.css` | + +## 发布门禁 + +- 本地 ESLint、TypeScript、Prisma schema validate 通过。 +- Vitest 26 个测试文件、95 项测试通过。 +- 本地 Web production build 和发布结构检查通过。 +- B 使用 Linux `node_modules` 从精确 Git bundle 构建,workspace build 通过。 +- Linux release artifact 生成成功,共 19,681 个文件。 +- 发布前 MySQL、Redis 备份 SHA256 校验通过:`/data/backups/mysql/20260827T073857Z`、`/data/backups/redis/20260827T073857Z`。 + +## 发布后验证 + +- `current` 已切换到 s55,`.deployed-commit` 写入业务提交。 +- Nginx 配置测试通过,首页返回 200 并引用新 Web 资产。 +- B release preflight 通过;MySQL、Redis、Nginx、API、CDR Worker、Recording Worker、Heplify、Prometheus、Grafana 在 preflight 时均为 active。 +- API live/ready、验证码接口和外部匿名 smoke 全部通过,报告见 `tests/reports/REMOTE_SMOKE_20260827T073955Z.md`。 +- 真实管理员只读回读:Dashboard overview 1,843ms、24 个趋势桶;话单接口 2,357ms、默认 `take=25`、返回 25/97 条。 + +## 已知环境问题 + +B 到 A `100.90.90.90` 的 Tailscale ping 和录音专用 SSH 当前超时。Recording Worker 启动后在扫描 A 录音目录时约 135 秒失败,systemd 会自动拉起。该模块在本次提交中没有代码变化,回滚 s55不能恢复 A 网络;待 A 上线后应复核 Worker 连续稳定和录音积压。 + +完整 Playwright UI 巡检未完成,原因是本机没有对应 Chromium 二进制;未为本次发布临时下载安装浏览器。真实认证 API、页面静态资产和匿名 Web smoke 已通过。 + +## 回滚命令 + +```bash +sudo /opt/lisglosips/current/infra/server-b/s30/lisglosips-release-rollback.sh \ + /opt/lisglosips/releases/s54-cmpp-ui-style-20260702103305 +``` + +本次没有数据库迁移、TLS、Redis 热路径或 A/T 配置回滚项。 diff --git a/tests/reports/REMOTE_SMOKE_20260827T073955Z.md b/tests/reports/REMOTE_SMOKE_20260827T073955Z.md new file mode 100644 index 0000000..4271af4 --- /dev/null +++ b/tests/reports/REMOTE_SMOKE_20260827T073955Z.md @@ -0,0 +1,24 @@ +# Remote Smoke Test Report + +Date: 2026-08-27T07:39:55.055Z +Base URL: https://100.90.90.91 +Timeout: 30000ms +Attempts: 2 + +| Result | Check | Detail | +| --- | --- | --- | +| PASS | / returns 200 | status=200, duration=1373ms, attempt=1 | +| PASS | frontend HTML contains app root | contentType=text/html, bytes=466, attempt=1 | +| PASS | /api/v2/health/live returns 200 | status=200, duration=376ms, attempt=1 | +| PASS | live health reports ok | body={"status":"ok","service":"api","timestamp":"2026-08-27T07:39:54.555Z","checks":{"process":"ok"}} | +| PASS | /api/v2/health/ready returns 200 | status=200, duration=377ms, attempt=1 | +| PASS | ready health reports database and redis ok | body={"status":"ok","service":"api","timestamp":"2026-08-27T07:39:54.933Z","checks":{"config":"ok","database":"ok","redis":"ok"}} | +| PASS | /api/v2/auth/captcha returns 200 | status=200, duration=389ms, attempt=1 | +| PASS | captcha endpoint returns id, image, and expiry | captchaId=4a8cafd9-270b-4fe7-bd53-08e0d0e587ec, expiresAt=2026-08-27T07:44:55.308Z, attempt=1 | + +## Raw Endpoints + +- /: status=200, duration=1373ms, attempt=1, contentType=text/html +- /api/v2/health/live: status=200, duration=376ms, attempt=1, contentType=application/json; charset=utf-8 +- /api/v2/health/ready: status=200, duration=377ms, attempt=1, contentType=application/json; charset=utf-8 +- /api/v2/auth/captcha: status=200, duration=389ms, attempt=1, contentType=application/json; charset=utf-8