5958c21048
5 项新功能: - H2: 服务器搜索过滤 — 目标服务器下拉加搜索框实时过滤 - H3: 推送对比 Diff 视图 — 预览文件列表加 diff 按钮对比本地与远程差异 - H4: 推送排错面板 — 失败行加诊断按钮检查SSH/磁盘/权限 - H5: 源路径直接输入 — 支持直接输入服务器本地路径推送 - H6: 批量重试 — 一键重试所有失败服务器 新增后端端点: - POST /api/sync/validate-source-path (H5) - POST /api/sync/diagnose (H4) - POST /api/sync/file-diff (H3) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
2026-05-29 推送页面 Round 4 迭代
变更摘要
- H2: 服务器搜索过滤 — 目标服务器下拉列表上方加搜索框,按名称/域名实时过滤
- H3: 推送对比 Diff 视图 — 预览文件列表中加"📄 diff"按钮,点击后对比本地与远程文件内容差异
- H4: 推送排错面板 — 失败行加"🔍 诊断"按钮,检查 SSH 连通/磁盘空间/目标路径权限/写入权限
- H5: 源路径直接输入 — 除 ZIP 上传外,支持直接输入服务器本地路径推送
- H6: 批量重试 — 推送完成后,一键重试所有失败服务器
动机
推送页面功能已较完善,但 5 个实际使用痛点:2000+ 服务器下拉无法搜索定位、推送前无法看到文件内容差异、推送失败后需手动 SSH 排查、已有文件需先下载再上传、批量失败需逐台点重试。
涉及文件
后端
server/api/schemas.py— 新增ValidateSourcePath,SyncDiagnose,FileSyncDiff三个 Schemaserver/api/sync_v2.py— 新增 3 个端点POST /api/sync/validate-source-path: 验证本地目录路径有效性(禁止 /etc /root /home 等敏感路径)POST /api/sync/diagnose: 诊断推送失败原因(SSH 连通 → 磁盘空间 → 路径权限 → 写入测试)POST /api/sync/file-diff: 对比本地文件与远程文件差异(difflib.unified_diff,限 100KB)
docs/design/specs/2026-05-29-push-round4-design.md— 设计文档docs/design/plans/2026-05-29-push-round4.md— 技术文档
前端
web/app/push.html— 5 项改动- H2:
<input id="serverSearch">+filterServerOptions()按 oninput 实时过滤 - H3: 预览文件列表渲染 HTML 带 diff 按钮 +
showFileDiff()+ diff 模态框(新增绿/删除红/头部青) - H4: 服务器行加
srv_diag_{id}按钮 +diagnoseServer()+ 诊断模态框 - H5: "或输入源路径" 输入框 + "验证路径" 按钮 +
validateSourcePath() - H6: 进度条区域"🔄 重试全部失败"按钮 +
retryAllFailed()批量提交重试
- H2:
安全影响
- H5 (源路径验证):
os.path.realpath()校验 + 禁止/etc/root/home/var等敏感路径前缀 - H3 (文件对比): realpath 校验 local_file 必须在 source_path 下,source_path 必须
startswith("/tmp/nexus_upload_") - H4 (诊断):
shlex.quote()防注入,SSH 操作复用连接池 - 所有新端点需 JWT 认证 + 审计日志
需要迁移/重启
- 是:后端 Python 需重启(supervisorctl restart nexus)
- 否:无数据库 schema 迁移
验证方式
- H2: 输入 "web" → 下拉只显示名称/域名含 "web" 的服务器
- H3: 预览 → 文件列表 → 点 "📄 diff" → 显示逐行对比(新增绿/删除红)
- H4: 推送失败 → 点"🔍 诊断" → SSH/磁盘/权限检查结果
- H5: 输入
/tmp/nexus_upload_xxx→ 验证成功 → 可推送 - H6: 推送完成后有失败 → 显示"重试全部失败"按钮 → 点击批量重试
进度条
☑实现 ☑WSL验证 ☐审计8步 ☑部署 ☐健康检查 ☐浏览器验证 ☑changelog