mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-28 08:34:22 +00:00
fe025e8af3
* feat(xray): add tunnel health monitor * fix(tunnelmonitor): reuse netproxy client and init logger in tests Replace the duplicated newHTTPClient/dialContextWithProxy with netproxy.NewHTTPClient, which centralises the http/https/socks5 handling and avoids the dial-goroutine connection leak on context cancellation. Cap failures at the threshold during cooldown so the counter stays a true consecutive-failure count. Add TestMain to initialise the logger and fix the nil-pointer panic in the success-after-failure path. * fix(tunnelmonitor): observable recovery, signal headroom, and hardening Address the remaining review findings on the tunnel health monitor: - Recovery is now synchronous and observable: the callback calls server.RestartXray() directly and returns its error instead of just enqueuing SIGUSR1, so a failed restart no longer masks as success and arms the cooldown while the tunnel is still down. - Give the OS signal channel headroom (buffer 8) so producers cannot starve a SIGTERM/SIGINT out of the single slot. - Warn at startup when the monitor is enabled without a proxy, since the probe then measures host connectivity rather than the xray tunnel. - Cap failures at the threshold in the nil-recover branch too, matching the cooldown cap. - Document the XUI_TUNNEL_HEALTH_* vars in .env.example and the README. - Add tests for status-code classification, Normalize bounds, New proxy scheme errors, the recovery-error and nil-recover paths, the cooldown cap, and Run context cancellation (coverage 90%). --------- Co-authored-by: Sanaei <ho3ein.sanaei@gmail.com>
20 lines
757 B
Bash
20 lines
757 B
Bash
XUI_DEBUG=true
|
|
XUI_DB_FOLDER=x-ui
|
|
XUI_LOG_FOLDER=x-ui
|
|
XUI_BIN_FOLDER=x-ui
|
|
XUI_INIT_WEB_BASE_PATH=/
|
|
# XUI_PORT=8080
|
|
|
|
# Optional tunnel health monitor (disabled by default). It periodically probes a
|
|
# URL and restarts xray-core after repeated failures. Point XUI_TUNNEL_HEALTH_PROXY
|
|
# at a local xray inbound so the probe tests the tunnel; without it the probe only
|
|
# checks host connectivity and a restart will not fix host network issues. A restart
|
|
# drops every connected client.
|
|
# XUI_TUNNEL_HEALTH_MONITOR=true
|
|
# XUI_TUNNEL_HEALTH_PROXY=socks5://127.0.0.1:1080
|
|
# XUI_TUNNEL_HEALTH_URL=https://www.cloudflare.com/cdn-cgi/trace
|
|
# XUI_TUNNEL_HEALTH_INTERVAL=30s
|
|
# XUI_TUNNEL_HEALTH_TIMEOUT=10s
|
|
# XUI_TUNNEL_HEALTH_FAILURES=3
|
|
# XUI_TUNNEL_HEALTH_COOLDOWN=5m
|