2.5 KiB
2.5 KiB
2026-05-30 — 服务器列表迭代
日期
2026-05-30
变更摘要
服务器列表页面全面迭代:后端新增服务端分页/搜索/排序/状态筛选,前端完全重写支持新功能。
动机
原服务器列表一次性加载全部数据,2000+ 服务器场景下性能差且无搜索/排序能力。
涉及文件
| 文件 | 变更类型 | 说明 |
|---|---|---|
| server/infrastructure/database/server_repo.py | 修改 | get_paginated() 新增 search/sort_by/sort_order/is_online 参数,白名单排序,DB 级分页 |
| server/api/servers.py | 修改 | list_servers() 新增 4 个 Query 参数 + Redis post-filter;修复 12 个预存 ruff 错误;修复 agent_port F821 bug |
| web/app/servers.html | 重写 | 服务端分页/搜索/排序/状态筛选/自动刷新/键盘快捷键/CSV 导出/骨架屏/空状态优化 |
变更详情
后端 — server_repo.py
get_paginated()签名扩展:新增search(name/domain LIKE)、sort_by(白名单验证)、sort_order(asc/desc)、is_online(MySQL 预过滤)_SORT_COLUMNS白名单:id/name/domain/status/heartbeat/agent_version/categoryis_online过滤时 over-fetch +10 补偿 Redis overlay 修正
后端 — servers.py
list_servers()新增 Query 参数:search/sort_by/sort_order/is_online- Redis post-filter:
is_online过滤时移除 Redis 状态不匹配的记录 - 修复 12 个预先存在的 ruff 错误:F401 unused imports、B904 raise from、S110 try-except-pass、F541 f-string
- 修复 F821 bug:
upgrade_agent()中agent_port变量未定义
前端 — servers.html
- 服务端分页:50/100/200 条/页,首页/上一页/数字页码/下一页/末页
- 防抖搜索(300ms):名称/地址 LIKE 模糊搜索
- 可点击列排序:Agent 状态/名称/地址/分类/Agent/最后心跳,▲▼ 指示器
- 状态筛选下拉:全部/在线/离线
- 自动刷新:30 秒间隔,弹窗编辑时自动暂停
- 键盘快捷键:↑↓/jk 移动、Esc 关闭面板、/ 搜索、r 刷新
- CSV 导出:当前筛选条件下导出最多 5000 条
- 骨架屏加载:8 行脉冲动画替代"加载中..."
- 空状态优化:区分"无数据"和"无匹配结果"
是否需迁移
否
是否需重启
是 — supervisorctl restart nexus
验证方式
- ruff check: ✅ All checks passed
- bandit: ✅ No issues
- import: ✅ 成功
- Playwright 浏览器验证:✅ 搜索/排序/筛选/分页全部通过