diff options
| author | AAA <theakhgar@gmail.com> | 2025-02-22 12:45:14 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-22 12:45:14 +0300 |
| commit | 1bbf31df9f61d92c5343e7867567171b6655c4de (patch) | |
| tree | 02d4b2c02a94a146e53d90e38e052df99dd4052c /web/job | |
| parent | 49bfff9fa5a6acb50c8f51710a3e4005daf0ca32 (diff) | |
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 <root@vm3562019.stark-industries.solutions>
Co-authored-by: root <root@vm3688062.stark-industries.solutions>
Diffstat (limited to 'web/job')
| -rw-r--r-- | web/job/xray_traffic_job.go | 34 |
1 files changed, 34 insertions, 0 deletions
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) + } +} |
