mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-07 21:54:10 +00:00
Add task tracking records for commits that were missing documentation: - 2026-04-10: multi-node backend foundation (7 commits) - 2026-04-15: improve mariadb flow and traffic flush - 2026-04-23: install cron before acme.sh - 2026-04-24: resolve client traffic InboundId from DB - 2026-04-24: fix traffic flush blocked by stale inboundId=0 delta
2 KiB
2 KiB
Task Record: Resolve client traffic InboundId from DB in shared mode
Date: 2026-04-24 Related Module: web/service/traffic_flush.go, web/job/xray_traffic_job.go — 共享模式流量收集 Change Type: Fix
Background
共享模式(MariaDB 多节点)下,Xray gRPC Stats API 返回的客户端流量只包含 email,不包含 InboundId(始终为 0)。Collect() 函数直接使用了这个 InboundId: 0,导致流量无法正确关联到 inbound,写入数据库时违反外键约束或写入错误的 inbound。
Changes
web/service/traffic_flush.go:Collect()新增emailToInboundID映射:在处理客户端流量前,先从client_traffics表查询所有 email 对应的inbound_id- 用查询到的真实
InboundId替换 Xray API 返回的InboundId: 0 - 未知 email(数据库中无对应记录)跳过并记录 warning 日志
- 新增测试用例:
TestCollectResolvesInboundIdFromDB、TestCollectSkipsUnknownEmail、TestCollectClampsNegativeResidualAndLogsDetailedWarning
web/job/xray_traffic_job.go:- 共享模式下跳过
addClientTraffic()(因为Collect()已处理),改为手动计算并设置在线客户端列表
- 共享模式下跳过
web/service/inbound.go:- 新增
SetOnlineClients()和GetOnlineClients()方法,供共享模式设置在线状态
- 新增
x-ui.sh:- 节点配置菜单增加
trafficFlushInterval输入提示
- 节点配置菜单增加
Impact
web/service/traffic_flush.go: Collect() 逻辑变更,影响所有共享模式节点的流量收集web/job/xray_traffic_job.go: 共享模式的在线客户端检测逻辑- 不影响非共享模式(SQLite/单节点 MariaDB)
Verification
go test ./web/service/ -run TestCollect -v— PASSgo test ./web/service/ -run TestTraffic -v— PASS
Risks And Follow-Up
- 如果
client_traffics表为空(首次部署),所有客户端流量都会被跳过,直到第一个 inbound 被创建并产生client_traffics行 - 旧的
inboundId: 0残留 delta 仍可能存在于traffic-pending.json中(后续 commit 修复)