跳到主要内容

Dash HTTP API

基础路径:

/api

错误格式:

{ "code": "<string>", "message": "<string>" }

鉴权

方式用途
管理员密码POST /api/auth/login
refresh cookie + X-CSRF-TokenPOST /api/auth/refreshPOST /api/auth/logout
Authorization: Bearer <access_token>管理 API 和可选鉴权读取
X-Node-Secret节点上报、节点身份读取和 deploy 资产下载
upgrade_token query只给旧 Agent 自动升级使用的临时 deploy 资产下载授权

公开和可选鉴权

方法路径鉴权说明
GET/api/version/Dash 和打包 node 版本
GET/api/front/brand可选 Bearer品牌信息
GET/api/front/metrics可选 Bearer当前看板指标
GET/api/front/groups可选 Bearer前台分组
GET/api/metrics/online可选 Bearer在线率
GET/api/metrics/history可选 Bearer历史指标
GET/api/statistics/access可选 Bearer匿名访问设置
GET/api/statistics/traffic/settings可选 Bearer流量设置
GET/api/statistics/traffic/ifaces可选 Bearer节点网卡列表
GET/api/statistics/traffic/summary可选 Bearer当前账期流量
GET/api/statistics/traffic/daily可选 Bearer日流量,要求 billing 模式
GET/api/statistics/traffic/monthly可选 Bearer月流量

Bearer 可选端点会把无效 Bearer 当作匿名请求。

认证会话

POST /api/auth/login 请求体必须包含 passwordpersistencepersistence 允许 sessionpersistent。成功响应包含 access_tokenexpires_atcsrf_token,并写入 refresh/CSRF cookie。

方法路径鉴权成功
GET/api/auth/sessions/Bearer200
DELETE/api/auth/sessions/currentBearer204
DELETE/api/auth/sessions/Bearer204
DELETE/api/auth/sessions/{sid}Bearer204

GET /api/auth/sessions/ 返回当前 Bearer token 用户的 { "sessions": [...] }。每项包含 idexpires_atsession_onlycurrent

节点接口

方法路径鉴权Body成功
POST/api/node/identityX-Node-Secret{}200
POST/api/node/metricsX-Node-SecretNodeReport200
POST/api/node/staticX-Node-SecretStatic200

/api/node/metrics 成功响应:

{
"ok": true,
"update": null
}

或:

{
"ok": true,
"update": {
"id": "release-id",
"version": "1.2.3",
"url": "https://dash.example.com/deploy/windows/node_windows_amd64.exe?upgrade_token=...",
"sha256": "...",
"size": 12345678
}
}

url 可能包含短期有效的 upgrade_token,让旧 Agent 不发送 X-Node-Secret 也能下载本次升级的精确资产。客户端必须按原样使用返回的 URL。

待升级任务是易失状态,Agent 上报完全相同的目标版本或 SemVer 优先级更高的版本后清除。同一 SemVer 优先级但 build metadata 不同的版本视为不同节点二进制,仍可下发。

管理:分组

方法路径Body成功
GET/api/admin/groups/200
GET/api/admin/groups/map200
POST/api/admin/groups/{ "name": "...", "remark": "..." }204
PATCH/api/admin/groups/{id}{ "name": "...", "remark": "..." }204
DELETE/api/admin/groups/{id}204

name 会 trim,不能为空。

管理:节点

方法路径Body成功
GET/api/admin/nodes/200
GET/api/admin/nodes/deploy200
POST/api/admin/nodes/204
PUT/api/admin/nodes/display-order节点 ID 顺序204
PATCH/api/admin/nodes/traffic-p95{ "ids": [1, 2], "enabled": true }204
PATCH/api/admin/nodes/{id}节点补丁204
POST/api/admin/nodes/{id}/upgrade204
GET/api/admin/nodes/traffic/rebuild200
POST/api/admin/nodes/{id}/traffic/rebuild202
DELETE/api/admin/nodes/{id}204

节点补丁字段:

{
"name": "node-a",
"is_guest_visible": true,
"traffic_p95_enabled": true,
"traffic_cycle_mode": "default",
"traffic_billing_start_day": 1,
"traffic_billing_anchor_date": "",
"traffic_billing_timezone": "Asia/Shanghai",
"traffic_direction_mode": "default",
"display_order": 1,
"tags": ["prod", "hk"],
"secret": "new-secret",
"group_ids": [1, 2]
}

tags 必须是字符串数组,空值和重复值会被移除。

提交空 secret 时返回 400 invalid_secret;提交的 secret 已属于其他节点时返回 409 duplicate_secret

节点账期覆盖字段是原子组。只要提交 traffic_cycle_modetraffic_billing_start_daytraffic_billing_anchor_datetraffic_billing_timezone 中任意字段,就必须同时提交 traffic_cycle_mode 和该模式使用的全部字段,否则返回 400 invalid_traffic_cycle_settingstraffic_cycle_mode 允许 defaultcalendar_monthwhmcs_compatibleclamp_to_month_end

traffic_direction_mode 允许 defaultoutbothmaxdefault 继承全局统计方向,其他值覆盖该节点。

/api/admin/nodes/traffic-p95 接受 idsenabledenabled 必填。ids 必须是非空正整数数组,不能重复,最多 10000 项。该命令先校验全部节点 ID,再在一个事务中更新 P95 开关。成功返回 204;任一节点不存在或已删除时返回 404 not_found,且不会更新任何节点。

GET /api/admin/nodes/traffic/rebuild 返回最近一次进程内重建任务状态。还没有任务时返回 status=idle;运行中时包含 server_idrunning=truestarted_at;任务结束后可能继续返回 completedfailed,直到下一次任务替换。该状态不会跨进程重启持久化。失败状态只暴露稳定的 codeerror,不会返回内部错误字符串。

POST /api/admin/nodes/{id}/traffic/rebuild 按节点启动流量重建,基于保留窗口内的 nic_metrics 重写该节点的 5 分钟事实。成功返回 202 和状态体;节点不存在或已删除时返回 404 not_found;已有任意重建任务运行时返回 409 traffic_rebuild_running;重建任务不可用时返回 503 traffic_rebuild_unavailable。任务启动时会让该节点保留窗口内重叠的月度快照失效,不同步重写月度快照。

GET /api/admin/nodes/version.supports_auto_update 表示当前节点版本是否满足 Dash 管理台自动下发更新要求。最低版本为 0.2.1

POST /api/admin/nodes/{id}/upgrade 要求 version.supports_auto_update=true。当前节点版本低于 0.2.1 时返回 409 node_upgrade_unsupported;打包版本、平台或资产不可用时返回 409;Dash 无法生成旧 Agent 临时下载授权时返回 503 node_upgrade_grant_error

管理:流量设置

方法路径Body成功
PATCH/api/statistics/traffic/settings局部字段204

字段见 流量统计和账期

流量查询

  • GET /api/statistics/traffic/daily 要求 usage_mode=billing,否则返回 409 traffic_daily_requires_billingperiod 可选,允许 currentprevious,省略时为 current
  • GET /api/statistics/traffic/monthly 支持 monthsperiodmonths 最大 24;period=current 从本账期开始,period=previous 从上账期开始,省略时为 current。响应字段 includes_currentperiod=current 时为 true,在 period=previous 时为 false
  • 流量查询使用节点有效流量配置。节点 traffic_cycle_mode=default 时继承全局账期;节点 traffic_direction_mode=default 时继承全局统计方向。
  • 流量 summary、daily、monthly 响应保留原始 in_*out_* 字段,并通过 selected_bytesselected_p95_bytes_per_secselected_peak_bytes_per_sec 及其方向字段暴露当前计费视图。
  • 客户端应使用 coverage_ratio 展示样本覆盖率和准确性提示。partial 仅为兼容保留,新的展示逻辑不应依赖该字段。

历史指标

GET /api/front/metrics 的节点结构可以包含 node.tagsdisk.smartdisk.temperature_devices[]、顶层 thermal 和顶层 pressure。SMART、thermal 和 pressure 运行时 payload 与前台节点快照分开缓存,只有 received_at 匹配时才会重新挂回节点快照。

GET /api/metrics/history 支持温度指标:

指标来源设备参数
cpu.temp_cCPU 温度传感器最高温度不需要
disk.temp_cSMART 物理磁盘温度历史必须传 device

disk.temp_cdevice 可以匹配物理磁盘 namerefpath。温度历史不使用 rollup 前缀。

SMART 温度历史只来自后端确认的物理盘。虚拟盘和 RAID 设备不会写入 disk.temp_c 历史。

GET /api/metrics/history 也支持 PSI 平均值指标:

  • pressure.cpu.some_avg10pressure.cpu.some_avg60pressure.cpu.some_avg300
  • pressure.memory.some_avg10pressure.memory.some_avg60pressure.memory.some_avg300
  • pressure.memory.full_avg10pressure.memory.full_avg60pressure.memory.full_avg300
  • pressure.io.some_avg10pressure.io.some_avg60pressure.io.some_avg300
  • pressure.io.full_avg10pressure.io.full_avg60pressure.io.full_avg300

管理:告警

方法路径说明
GET/api/admin/alerts/rules/列出规则
POST/api/admin/alerts/rules/创建规则
PATCH/api/admin/alerts/rules/{id}更新规则
DELETE/api/admin/alerts/rules/{id}删除规则
GET/api/admin/alerts/mounts/列出挂载
PUT/api/admin/alerts/mounts/设置挂载
GET/api/admin/alerts/settings/读取全局设置
PUT/api/admin/alerts/settings/替换全局设置
GET/api/admin/alerts/channels/列出渠道
POST/api/admin/alerts/channels/创建渠道
GET/api/admin/alerts/channels/{id}读取渠道
PUT/api/admin/alerts/channels/{id}替换渠道
PUT/api/admin/alerts/channels/{id}/enabled切换启用
POST/api/admin/alerts/channels/{id}/test测试发送
DELETE/api/admin/alerts/channels/{id}删除渠道

管理:系统

方法路径说明
GET/api/admin/system/settings/读取系统设置
PUT/api/admin/system/settings/替换系统设置
PATCH/api/admin/system/settings/局部更新
GET/api/admin/system/themes/列出主题
POST/api/admin/system/themes/upload上传主题 zip
POST/api/admin/system/themes/{id}/apply应用主题
DELETE/api/admin/system/themes/{id}删除主题