record s55 ui performance deployment

This commit is contained in:
hectorzhao
2026-08-27 15:55:32 +08:00
parent ecb567c0da
commit 32bba1bd84
3 changed files with 80 additions and 0 deletions
+11
View File
@@ -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` 稳定版封版 ### 2026-06-30 14:20 - `20260630release` 稳定版封版
- 状态:已完成 - 状态:已完成
@@ -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 配置回滚项。
@@ -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