Skip to content

Latest commit

 

History

History
119 lines (82 loc) · 6.09 KB

File metadata and controls

119 lines (82 loc) · 6.09 KB

Nginx UI Topology:路由排障重构规格

状态:已确认,可作为实施基线。

目标

缩短用户从导入 nginx -T 到理解请求路径、定位配置问题的时间。

首要场景:线上排障。用户输入 hostpath、协议和端口,系统给出可解释的候选路由,并把结果连接到拓扑、问题列表和配置源码。

核心体验

  1. 有效配置加载后,默认进入请求排障模式。

  2. 从配置提取可尝试的 server_namelistenlocation;不再使用固定示例请求作为真实默认值。

  3. 路由追踪是主结果,拓扑画布是空间上下文:

    请求 → server → location → rewrite/try_files → upstream → backend

  4. 每一步显示匹配理由、置信度、来源文件和行号;画布同步高亮节点与边。

  5. 结果采用“候选路径 + 解释”,不伪装成完整 Nginx 运行时模拟。

  6. 无法命中或无法确定时,说明失败阶段、候选项、排除理由或静态分析限制。

功能要求

路由分析

  • 首阶段支持常见开源 Nginx 路由语义:serverlistenserver_namelocation 匹配与优先级、rewritereturntry_files、常见 *_passupstream
  • 精确匹配、明确静态目标等结果可标为高置信度。
  • 变量、Lua、njs、第三方模块和复杂运行时行为标为未知或低置信度,不给出虚假确定结论。
  • 多候选路径必须保留分支和各自理由。

问题定位

  • 默认展示当前请求路径相关问题,并可切换全部配置问题。
  • 排序固定为 error > warning > info,必要时再按路径关联度和源码位置排序。
  • error:解析失败或路由结论可能不可信。
  • warning:配置可运行,但当前请求可能走错、漏匹配或存在高风险。
  • info:不阻断请求的维护性建议。
  • 每条问题包含影响、证据、建议和源码位置。
  • 首阶段不直接自动修改配置;提供修复建议、片段、可复制示例,后续再评估 diff 应用和撤销。

三向联动

  • 点击问题:编辑器跳到源码位置,画布聚焦相关节点或边。
  • 点击节点/边:问题列表过滤关联问题,编辑器定位对应指令。
  • 点击追踪步骤:展示匹配理由、不确定性和来源位置。
  • 解析错误时保留可用拓扑,明确显示“结果不完整”;不可推断时不得显示为正常命中。

来源信息

  • 识别 nginx -T# configuration file ...: 分段。
  • 节点、边、问题和追踪步骤记录 filename + line
  • 没有文件分段时退化为输入文本行号。

输入、导出与隐私

  • 路由输入实时更新,防抖约 150–200msEnter 可作为显式提交兜底。
  • 首次访问可加载内置示例,但必须明确标注示例配置;导入真实配置后不得自动覆盖。
  • 默认不写入 localStorage,配置只保存在当前会话。
  • 支持复制纯文本路由追踪、导出 JSON、导出 PNG;默认不导出原始配置,包含配置时必须显式确认。
  • 配置、解析结果和诊断数据不上传服务器。

工程边界

  • 保留 React + TypeScript + Vite + React Flow;不做框架迁移。
  • 将 tokenizer、parser、graph、analyzer、routing 维持为纯领域逻辑,UI 只负责适配和呈现。
  • 按领域拆分页面状态:配置/解析、请求模拟、拓扑视图、问题联动、用户偏好。
  • 不引入全局状态库;优先使用 useReducer、领域 hooks 和明确事件流。
  • 拆分 App.tsx,避免让解析、路由、状态和视图继续耦合。
  • 解析和计算先以纯函数和基准测试为基础;只有主线程超过性能预算时才迁移 Web Worker。
  • 建立语义化设计 token,组件消费 token;样式按功能组件拆分,不引入大型 UI 框架。
  • 中文/英文使用类型安全 locale;禁止组件内散落双语字符串。

性能与设备

  • 目标规模:约 10,000nginx -T、约 1,000 个拓扑节点。
  • 常规编辑后约 200ms 内反馈;超出预算时降低实时更新频率并提示用户。
  • 桌面优先,最低目标宽度 1280px
  • 900–1279px 保留核心排障能力并折叠详情面板;移动端只保证查看和问题定位。
  • 首次访问主题/语言跟随系统;用户选择持久化。
  • 键盘快捷键只覆盖搜索、请求输入、适配画布、清除选择、切换问题和帮助。
  • 遵守 WCAG 2.1 AA、键盘可操作、非颜色状态表达和 prefers-reduced-motion

分阶段交付

阶段一:路由排障主链路

路由结果模型、候选路径与置信度、请求输入、路由追踪、来源定位、问题关联、解析容错、性能基准和核心测试。

阶段二:工作台体验

信息架构和视觉 token、三向联动细节、编辑器定位、主题/语言治理、快捷键、导出、响应式和无障碍完善。

阶段三:扩展能力

更多 Nginx 语义、复杂运行时提示、可选 diff 应用/撤销,以及基于反馈的诊断增强。

测试与完成条件

必须通过:

  • TypeScript strict 检查和生产构建。
  • ESLint、Prettier,以及 locale key 完整性检查。
  • parser、路由匹配、候选解释、置信度、问题关联和来源位置单元测试。
  • fixture/golden tests,覆盖多 server、默认 server、通配符/正则 server_name、各种 location 优先级、rewrite、try_files、proxy URI、upstream、变量和解析错误。
  • Playwright 核心流程:导入配置 → 输入请求 → 高亮路径 → 点击问题 → 跳回源码。
  • 关键键盘、深浅主题、中英文和 reduced-motion 场景验证。

非目标

  • 不实现完整 Nginx 运行时模拟器。
  • 不首期支持 Lua/njs/第三方模块的精确执行。
  • 不首期自动改写配置或引入在线协作/云端服务。
  • 不做移动端完整编辑和复杂命令面板。
  • 不为视觉现代化引入营销页式装饰、玻璃拟态、无语义渐变或大型 UI 依赖。

兼容性

JSON 导出保留现有字段并新增 schemaVersion;新增字段可选,破坏性变化必须提供迁移或明确错误信息。