b8425cc059
Co-authored-by: Cursor <cursoragent@cursor.com>
1.1 KiB
1.1 KiB
服务器列表实时字段排序设计
日期: 2026-06-08
背景
GET /api/servers/ 在 MySQL 层 ORDER BY 后分页,再用 Redis heartbeat 覆盖 is_online、last_heartbeat、agent_version、status。展示值与排序键不一致,导致状态/心跳/Agent 列排序无效。
目标
对 sort_by ∈ {status, heartbeat, agent_version}:overlay 全量筛选结果后内存排序,再分页返回。
方案
server_repo.get_filtered()拉取筛选后全量(上限 5000)- Redis pipeline 批量
HGETALL heartbeat:{id} server_list_sort.sort_server_items()按 UI 语义排序slice[offset:offset+per_page]
静态列(name/domain/category/target_path/id)仍 DB 排序。
排序语义
| 字段 | 键 |
|---|---|
| status | online(0) → offline(1) → unknown(2),tiebreaker name |
| heartbeat | ISO 时间;缺失置后(升序/降序均置后) |
| agent_version | 字符串;空置后 |
性能
≤5000 台 × 一次 pipeline + 内存 sort;运维列表低频可接受。
验收
见 docs/changelog/2026-06-08-servers-live-sort-fix.md