仪表盘重做:ECharts 曲线、常驻遥测、路由行直达详情
采集从仪表盘组件挪进模块级单例(web/telemetry.ts),流量曲线和每路 吞吐的历史跨页面留存——跟着组件走的话切一次页面就清零一次。每路吞吐 从 /connections 快照按连接逐条求差再按 inboundName 聚合:先求和再求差 会在连接关闭时算出负数。 图表换 ECharts(按需注册):手写 SVG 折线做不出平滑曲线和时间轴, 颜色在运行时从 CSS 变量取,跟随主题切换重取。 路由列表每行带走势、速率和可选的公网 IP 检测,点击跳路由页并选中 那一路(外壳传 focus 给 RouterPage 消费)。
This commit is contained in:
@@ -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()}`
|
||||
}
|
||||
|
||||
/**
|
||||
* 走规则表的流量最后交给谁。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user