仪表盘重做:ECharts 曲线、常驻遥测、路由行直达详情

采集从仪表盘组件挪进模块级单例(web/telemetry.ts),流量曲线和每路
吞吐的历史跨页面留存——跟着组件走的话切一次页面就清零一次。每路吞吐
从 /connections 快照按连接逐条求差再按 inboundName 聚合:先求和再求差
会在连接关闭时算出负数。

图表换 ECharts(按需注册):手写 SVG 折线做不出平滑曲线和时间轴,
颜色在运行时从 CSS 变量取,跟随主题切换重取。

路由列表每行带走势、速率和可选的公网 IP 检测,点击跳路由页并选中
那一路(外壳传 focus 给 RouterPage 消费)。
This commit is contained in:
2026-08-11 22:26:36 +08:00
parent ce181e9ae5
commit eec5b791c8
15 changed files with 1385 additions and 376 deletions
+14
View File
@@ -165,6 +165,20 @@ export function collectInbounds(data: ConfigObject): Inbound[] {
return result
}
/**
* 这一路入站在内核连接快照里的 `inboundName`。
*
* 命名入站带的是配置里的 name 原词(内核源码 `adapter/inbound/addition.go:19`,
* 名字来自 listener 配置的 name 字段)。老式顶层端口没有名字,内核给它们造了
* `DEFAULT-协议` 这样的内部名(如 `listener/mixed/mixed.go:57` 的 DEFAULT-MIXED、
* `listener/http/server.go:61` 的 DEFAULT-HTTP)。按这个名字才能把连接、吞吐这些
* 运行时数据对回界面上的某一路。
*/
export function inboundStatKey(inbound: Inbound): string {
if (!inbound.isDefault) return inbound.name
return `DEFAULT-${inbound.type.toUpperCase()}`
}
/**
* 走规则表的流量最后交给谁。
*