Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/web/job
diff options
context:
space:
mode:
Diffstat (limited to 'web/job')
-rw-r--r--web/job/xray_traffic_job.go34
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)
+ }
+}