Files
nexus-terminal/.helloagents/archive/2026-03/202603260043_dashboard-live-session-metrics/proposal.md
T
yinjianm 3f6e2bffc6 feat(frontend): 增强工作台快捷指令与仪表盘能力
补充快捷指令动态变量解析与编辑弹窗一键插入,
统一列表执行、粘贴到终端和批量发送的处理链路

扩展快捷命令右键菜单动作,并为文件面板新增
多根目录资源管理器式侧栏浏览体验

为首页 dashboard 增加当前用户与系统总览双视角的
实时会话指标展示,并同步更新相关知识库记录
2026-03-26 01:39:42 +08:00

8.0 KiB

变更提案: dashboard-live-session-metrics

元信息

类型: 新功能
方案类型: implementation
优先级: P1
状态: 草稿
创建: 2026-03-26

1. 需求

背景

首页 dashboard 已经具备稳定统计能力,但仍缺少运行态视角。用户继续要求补“在线会话数/实时指标”,并明确选择“混合视角”,意味着首页同时需要展示当前登录用户的运行态会话信息,以及整个系统范围内的总在线会话概况。

目标

  • 在现有 dashboard summary 基础上补充运行态指标,而不是另起一套接口。
  • 同时展示“当前用户视角”和“系统总览视角”的在线 SSH / 挂起会话指标。
  • 补充能体现实时性的附加指标,例如被监控中的活跃状态流数量,让首页更接近真实运维总控台。
  • 保持首页首屏仍为单次 summary 请求,不要求前端直接订阅 WebSocket 状态。

约束条件

时间约束: 本轮内完成前后端联动与基础构建验证
性能约束: 运行态统计应在现有 dashboard summary 接口内组合返回,避免首页新增额外请求
兼容性约束: 不改变现有 workspace WebSocket 协议与挂起会话 API 语义
业务约束: 当前用户口径必须与后端登录态一致;系统口径必须来自后端共享运行态,而不是浏览器本地 session store 猜测

验收标准

  • GET /api/v1/dashboard/summary 返回新增的 live metrics 字段
  • 首页同时展示当前用户在线 SSH / 挂起会话数与系统总在线 SSH / 挂起会话数
  • 首页补充至少一个与实时运行态有关的附加指标,例如当前活跃状态监控流数量
  • 前端 UI 对新增实时指标完成中英日文案适配
  • packages/backendpackages/frontend 构建通过

2. 方案

技术方案

延续现有 dashboard 业务域,但把运行态统计从纯数据库聚合扩展为“数据库统计 + 内存运行态组合”。数据库部分继续由 dashboard.repository.ts 提供稳定统计;运行态部分由 dashboard.service.ts 直接组合后端共享的 clientStatessshSuspendService:前者提供系统范围和按当前 req.session.userId 过滤的在线 SSH 会话数量,并进一步统计处于状态监控中的会话数量;后者补充当前用户与系统范围的挂起会话数。前端沿用现有 dashboard.store.ts,在 DashboardOverviewPanel.vue 中新增“实时会话”板块,使用清晰的双列卡片同时呈现“我的会话”和“系统会话”。

影响范围

涉及模块:
  - backend: 扩展 dashboard summary 组合逻辑,补运行态统计
  - backend: 为 sshSuspendService 暴露系统级计数方法
  - frontend: 扩展 summary 类型与总览组件
  - frontend: 更新 dashboard 文案
预计变更文件: 6-9

风险评估

风险 等级 应对
前端本地 session store 与后端真实在线会话不一致 在线/挂起口径统一以后端运行态为准,只在首页展示后端汇总结果
clientStates 中可能包含正在恢复、挂起标记中或半断开的会话 统计时显式按状态字段过滤,优先统计未被服务接管的可用活跃会话
sshSuspendService 目前只有按用户列出接口,没有系统汇总接口 为服务补一个只读统计方法,不改现有对外 API

3. 技术设计

架构设计

flowchart LR
    A[DashboardController] --> B[DashboardService]
    B --> C[dashboard.repository.ts]
    B --> D[clientStates]
    B --> E[sshSuspendService]
    B --> F[req.session.userId]

API设计

GET /api/v1/dashboard/summary

  • 新增响应字段:
{
  "liveMetrics": {
    "currentUser": {
      "activeSshSessions": 0,
      "suspendedSessions": 0
    },
    "system": {
      "activeSshSessions": 0,
      "suspendedSessions": 0,
      "statusStreams": 0
    }
  }
}

数据模型

字段 类型 说明
liveMetrics.currentUser.activeSshSessions number 当前登录用户的活跃 SSH 会话数
liveMetrics.currentUser.suspendedSessions number 当前登录用户的挂起会话数
liveMetrics.system.activeSshSessions number 系统范围的活跃 SSH 会话数
liveMetrics.system.suspendedSessions number 系统范围的挂起会话数
liveMetrics.system.statusStreams number 当前处于状态轮询中的活跃会话数

4. 核心场景

场景: 当前用户查看自己的在线与挂起会话

模块: frontend / backend 条件: 用户已登录并打开首页 dashboard。 行为: 后端基于当前 session 的 userId 统计用户活跃 SSH 会话和挂起会话,并在首页实时会话面板中显示。 结果: 用户能快速判断“我当前开了多少会话、还有多少挂起会话待恢复”。

场景: 管理员查看系统整体运行态

模块: frontend / backend 条件: 首页 dashboard 已完成 summary 拉取。 行为: 后端同时返回系统总活跃 SSH 会话数、总挂起会话数和状态监控流数量。 结果: 首页能同时表达“我的视角”和“系统视角”,满足混合视角需求。


5. 技术决策

dashboard-live-session-metrics#D001: 运行态指标继续并入 summary 接口,而不是前端再建额外实时 API

日期: 2026-03-26 状态: 采纳 背景: 现有 dashboard 已经是单接口驱动。继续拆新接口只会增加首页请求数和前端状态拼装复杂度。 选项分析:

选项 优点 缺点
A: 扩展现有 /api/v1/dashboard/summary 首页保持单请求,口径集中,最适合当前仪表盘架构 service 层需同时组合数据库与运行态来源
B: 新增独立 /api/v1/dashboard/live 可把稳定统计和实时统计分离 首页需要二次请求和额外错误处理,前端复杂度上升
决策: 选择方案A
理由: 这轮增强是现有 dashboard 的自然延展,不值得拆出第二条首页专用链路。
影响: backend, frontend

dashboard-live-session-metrics#D002: 在线/挂起统计口径以后端运行态为准,不使用浏览器本地 session store 作为首页事实来源

日期: 2026-03-26 状态: 采纳 背景: 前端 session store 只能反映当前浏览器标签页,无法代表同一用户其他浏览器窗口、恢复中的会话或后端已接管的挂起状态。 选项分析:

选项 优点 缺点
A: 后端 clientStates + sshSuspendService 统一统计 口径统一,能同时覆盖系统和当前用户 需要后端 service 增加只读组合逻辑
B: 首页直接读前端 session.store 实现快 只能看到当前浏览器局部状态,无法满足混合视角
决策: 选择方案A
理由: 用户明确要“当前用户 + 系统总览”混合视角,只能以后端运行态作为事实源。
影响: backend, frontend

6. 成果设计

设计方向

  • 美学基调: 保持现有 dashboard 驾驶舱风格,但把运行态指标做成更“控制台式”的双层面板
  • 记忆点: 首页同时出现“我的会话 / 系统会话”两组清晰分栏,不再只有静态总量
  • 参考: 当前 dashboard 卡片体系 + 运维控制台常见的 live session summary

视觉要素

  • 配色: 当前用户指标偏主色和绿色,系统总览指标偏青蓝和琥珀,避免与稳定总量卡片混淆
  • 字体: 沿用现有项目后台字体体系
  • 布局: 运行态指标独立为一块 summary panel,位于统计卡片区之后、图表区之前
  • 动效: 只保留轻量 hover 和数字层级,不增加复杂动画
  • 氛围: 强调“控制面板”而非“报表页”,以密度和清晰分组为主

技术约束

  • 可访问性: 每个实时指标必须带文字标签,不用纯 icon 表达
  • 响应式: 窄屏下“当前用户 / 系统总览”两组指标要能自然折叠为单栏