Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/content/config/traffic.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
| **本月流量** | 同上,另存一份 | 跨过这个节点的重置日 |
| **今日流量** | 同上 | 跨过 hub 本地时区的零点 |

三个数字约每分钟更新一次,实时网速不受影响。

## 为什么由 hub 累加

网卡流量来自内核计数器,它每次开机从零开始。直接显示的话,机器一重启,总流量就归零。
Expand Down
12 changes: 10 additions & 2 deletions src/content/dev/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ tcp udp procs
`net_rx_total` / `net_tx_total` 在哪段区间内可以相减:hub 只比较是否相等,变了就重新对基线。重启、
改 `--iface`、网卡增减或被重新归类都走这一条。`iface` 回报当前的 `--iface`,面板用它显示并预填。

hub 按 agent 自己的节奏收,超出的直接丢弃:与上一条间隔不足 500 ms 的 `report`、同一连接的第二个
`hello`、每 5 秒超过 128 条的 `ping.result`(每节点至多 64 个探测,每个最短 5 秒一次)。

### hub → agent

| method | params | 何时发 |
Expand Down Expand Up @@ -138,15 +141,20 @@ POST /api/db/restore POST /api/db/vacuum
|---|---|
| `setting` | key/value 配置,替代配置文件 |
| `node` | 节点配置 + agent 上报的静态信息,含分组、离线通知的开关与状态 |
| `traffic` | **单调递增的流量累计**。1:1 于 node,但每次上报都写 |
| `traffic` | **单调递增的流量累计**。1:1 于 node,约每分钟写一次 |
| `metric` | 历史明细,每节点每分钟一行,按保留天数删 |
| `ping_task` / `ping_node` | 探测任务及其节点分配 |
| `ping_record` | 探测结果,同样按保留天数删 |
| `session` | 登录会话,存 sha256,14 天过期 |

`traffic` 单独一张表,因为它和 `node` 的读写方式完全不同:一个是偶尔修改的配置,一个是每秒都在写的数据。
`traffic` 单独一张表,因为它和 `node` 的读写方式完全不同:一个是偶尔修改的配置,一个是持续累加的数据。
更重要的是,`metric` 可以随意清理而累计流量不受影响,累计值不是从明细算出来的。

累计值约每分钟记一次账:hub 在内存里保留每个节点最新的一条读数,跨分钟时记账,`boot_id` 变化或读数变小
时断点两侧各记一次,连接断开和 hub 正常退出时补记。内核计数器一直在累加,后一次记账包含中间的全部增量,
结果与逐条记账相同。hub 被强行杀掉时少记最后不到一分钟,节点下次上报补回(前提是期间没重启)。探测结果
同样按分钟成批写入。

`metric` 的一行描述的是它之前的那一分钟,而不是某一时刻:网速由累计值的差算出,其余字段是这一分钟内的
平均值。

Expand Down
9 changes: 5 additions & 4 deletions src/content/dev/theme.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -296,11 +296,12 @@ body 是整个设置对象,会替换已保存的那份,规则和面板相同

## 匿名拿不到什么

匿名访问 `GET /api/nodes` 只返回公开的节点,响应里没有地址(`ip`、`ipv4`、`ipv6`、`ipv4_pin`、`ipv6_pin`)、
`hostname`、`remark`、`token` 这些 key:不是空字符串,而是根本不存在。国家只给一个 `country`,手填的
优先。
匿名访问 `GET /api/nodes` 只返回公开的节点,响应里没有地址(`ip`、`ipv4`、`ipv6`、`ipv4_pin`、`ipv6_pin`、
`ipv4_auto`、`ipv6_auto`、`addresses`)、`hostname`、`remark`、`token` 这些 key:不是空字符串,而是根本
不存在。国家只给一个 `country`,手填的优先。

指标部分走白名单,所以 `boot_id`、`iface`、`net_rx_total`、`net_tx_total` 也只给登录后的面板。
指标部分走白名单:内核原始计数器 `net_rx_total`、`net_tx_total` 和 `boot_id` 谁都拿不到,`iface` 和地址
一样只在登录后返回。`metrics` 里的 `total_rx`、`total_tx`、`month_rx`、`month_tx` 由 hub 填入,与顶层同名字段相同。

字段定义以 hub 的源码为准。写主题时按「这个 key 可能不存在」处理。

Expand Down
3 changes: 2 additions & 1 deletion src/content/install/agent.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ curl -fsSL https://hub.example.com/install.sh | sh -s -- \
| 上报间隔 | `--interval <秒>` | 1–3600,默认 1 |
| 指定统计的网卡 | `--iface <列表>` | 见[流量统计](/config/traffic#转发流量的机器要手动指定) |

两项都记在机器上,以后重装或升级时不写就沿用。
两项都记在机器上,以后重装或升级时不写就沿用。节点在线时,弹窗显示并预填它当前的上报间隔和统计网卡;
上报间隔没改就不写进命令。

## 批量安装

Expand Down
Loading