From 1bbf31df9f61d92c5343e7867567171b6655c4de Mon Sep 17 00:00:00 2001 From: AAA Date: Sat, 22 Feb 2025 13:15:14 +0330 Subject: feat(externalTrafficJob): External Traffic Inform (#2660) * Add Setting entity + GUI field in panel settings * Add a missing 'Traffic' in InformEnabale field * Add ExternalTrafficURL Post request call * Add translation + cleanup * Move options to General tab --------- Co-authored-by: root Co-authored-by: root --- web/job/xray_traffic_job.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'web/job') diff --git a/web/job/xray_traffic_job.go b/web/job/xray_traffic_job.go index dbbbb059..12c64092 100644 --- a/web/job/xray_traffic_job.go +++ b/web/job/xray_traffic_job.go @@ -1,11 +1,16 @@ package job import ( + "encoding/json" "x-ui/logger" "x-ui/web/service" + "x-ui/xray" + + "github.com/valyala/fasthttp" ) type XrayTrafficJob struct { + settingService service.SettingService xrayService service.XrayService inboundService service.InboundService outboundService service.OutboundService @@ -31,7 +36,36 @@ func (j *XrayTrafficJob) Run() { if err != nil { logger.Warning("add outbound traffic failed:", err) } + if ExternalTrafficInformEnable, err := j.settingService.GetExternalTrafficInformEnable(); ExternalTrafficInformEnable { + j.informTrafficToExternalAPI(traffics, clientTraffics) + } else if err != nil { + logger.Warning("get ExternalTrafficInformEnable failed:", err) + } if needRestart0 || needRestart1 { j.xrayService.SetToNeedRestart() } } + +func (j *XrayTrafficJob) informTrafficToExternalAPI(inboundTraffics []*xray.Traffic, clientTraffics []*xray.ClientTraffic) { + informURL, err := j.settingService.GetExternalTrafficInformURI() + if err != nil { + logger.Warning("get ExternalTrafficInformURI failed:", err) + return + } + requestBody, err := json.Marshal(map[string]interface{}{"clientTraffics": clientTraffics, "inboundTraffics": inboundTraffics}) + if err != nil { + logger.Warning("parse client/inbound traffic failed:", err) + return + } + request := fasthttp.AcquireRequest() + defer fasthttp.ReleaseRequest(request) + request.Header.SetMethod("POST") + request.Header.SetContentType("application/json; charset=UTF-8") + request.SetBody([]byte(requestBody)) + request.SetRequestURI(informURL) + response := fasthttp.AcquireResponse() + defer fasthttp.ReleaseResponse(response) + if err := fasthttp.Do(request, response); err != nil { + logger.Warning("POST ExternalTrafficInformURI failed:", err) + } +} -- cgit v1.2.3