3x-ui/web/job
WatchDogsDev bef6b45848 fix: prevent multi-GB traffic overages after bandwidth limit is reached
Three layered fixes targeting the distinct causes of overage:

Bucket C (catastrophic): flush pending Xray stats to DB before every
scheduled Xray restart so in-memory counters are never silently zeroed.
- web/service/xray.go: add FlushTrafficToDB()
- web/web.go: call FlushTrafficToDB() in the 30 s restart cron before
  RestartXray(false)

Bucket A (in-flight gap): drain per-user Xray stats counters immediately
after RemoveUser() succeeds, capturing bytes accumulated since the last
bulk GetTraffic(reset=true) cycle.
- xray/api.go: add DrainUserTraffic(email) using GetStats gRPC with reset
- web/service/inbound.go: call DrainUserTraffic and persist delta in
  disableInvalidClients()

Bucket B (active TCP connections survive removal): insert iptables DROP
rules for each known client IP on the inbound port so established
connections are killed immediately, not just new ones.
- util/iptables/iptables.go: new package managing the 3X-UI-BLOCK chain
  (EnsureChain, FlushChain, BlockIP, UnblockIP, ListRules); gracefully
  degrades when iptables is unavailable
- web/job/unblock_ips_job.go: @every 5m cleanup job removes rules older
  than maxBlockAgeSecs
- web/service/inbound.go: blockClientIPs() called after successful
  RemoveUser(); unblockClientIPs() called after successful AddUser() in
  autoRenewClients() so renewed clients can reconnect
- web/web.go: EnsureChain + FlushChain on startup; register unblock job
2026-03-22 06:21:05 +03:30
..
check_client_ip_job.go fix: Ban new IPs with fail2ban instead of disconnected the client. (#3919) 2026-03-17 21:18:10 +01:00
check_cpu_usage.go fix: handle CPU threshold error to prevent false notifications (#3603) 2025-12-12 14:29:27 +01:00
check_hash_storage.go docs: add comments for all functions 2025-09-20 09:35:50 +02:00
check_xray_running_job.go docs: add comments for all functions 2025-09-20 09:35:50 +02:00
clear_logs_job.go Refactor code and fix linter warnings (#3627) 2026-01-05 05:54:56 +01:00
ldap_sync_job.go update dependencies 2026-03-04 13:05:29 +01:00
periodic_traffic_reset_job.go fix: improve error handling in periodic traffic reset job (#3572) 2025-10-01 23:12:09 +02:00
stats_notify_job.go docs: add comments for all functions 2025-09-20 09:35:50 +02:00
unblock_ips_job.go fix: prevent multi-GB traffic overages after bandwidth limit is reached 2026-03-22 06:21:05 +03:30
xray_traffic_job.go Add url speed test for outbound (#3767) 2026-02-09 21:43:17 +01:00