diff options
| author | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-06-05 00:02:19 +0300 |
|---|---|---|
| committer | MHSanaei <ho3ein.sanaei@gmail.com> | 2023-06-05 00:02:19 +0300 |
| commit | 70f250dfe1e24249a4cc8102e3fef65959dfb15a (patch) | |
| tree | 9fdc990d656267abf6facafd851ab7b4835be977 /xray/process.go | |
| parent | 1030bcf321f15ada665ca3c55436d7c2449b5faf (diff) | |
[feature] using xray api and more
Improve DB performance
[api] backward compatibility: add client by update
Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
Diffstat (limited to 'xray/process.go')
| -rw-r--r-- | xray/process.go | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/xray/process.go b/xray/process.go index d0117324..60c53320 100644 --- a/xray/process.go +++ b/xray/process.go @@ -3,30 +3,21 @@ package xray import ( "bufio" "bytes" - "context" "encoding/json" "errors" "fmt" "io/fs" "os" "os/exec" - "regexp" "runtime" "strings" "sync" - "time" "x-ui/config" "x-ui/util/common" "github.com/Workiva/go-datastructures/queue" - statsservice "github.com/xtls/xray-core/app/stats/command" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" ) -var trafficRegex = regexp.MustCompile("(inbound|outbound)>>>([^>]+)>>>traffic>>>(downlink|uplink)") -var ClientTrafficRegex = regexp.MustCompile("(user)>>>([^>]+)>>>traffic>>>(downlink|uplink)") - func GetBinaryName() string { return fmt.Sprintf("xray-%s-%s", runtime.GOOS, runtime.GOARCH) } @@ -238,85 +229,3 @@ func (p *process) Stop() error { } return p.cmd.Process.Kill() } - -func (p *process) GetTraffic(reset bool) ([]*Traffic, []*ClientTraffic, error) { - if p.apiPort == 0 { - return nil, nil, common.NewError("xray api port wrong:", p.apiPort) - } - conn, err := grpc.Dial(fmt.Sprintf("127.0.0.1:%v", p.apiPort), grpc.WithTransportCredentials(insecure.NewCredentials())) - if err != nil { - return nil, nil, err - } - defer conn.Close() - - client := statsservice.NewStatsServiceClient(conn) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) - defer cancel() - request := &statsservice.QueryStatsRequest{ - Reset_: reset, - } - resp, err := client.QueryStats(ctx, request) - if err != nil { - return nil, nil, err - } - tagTrafficMap := map[string]*Traffic{} - emailTrafficMap := map[string]*ClientTraffic{} - - clientTraffics := make([]*ClientTraffic, 0) - traffics := make([]*Traffic, 0) - for _, stat := range resp.GetStat() { - matchs := trafficRegex.FindStringSubmatch(stat.Name) - if len(matchs) < 3 { - - matchs := ClientTrafficRegex.FindStringSubmatch(stat.Name) - if len(matchs) < 3 { - continue - } else { - - isUser := matchs[1] == "user" - email := matchs[2] - isDown := matchs[3] == "downlink" - if !isUser { - continue - } - traffic, ok := emailTrafficMap[email] - if !ok { - traffic = &ClientTraffic{ - Email: email, - } - emailTrafficMap[email] = traffic - clientTraffics = append(clientTraffics, traffic) - } - if isDown { - traffic.Down = stat.Value - } else { - traffic.Up = stat.Value - } - - } - continue - } - isInbound := matchs[1] == "inbound" - tag := matchs[2] - isDown := matchs[3] == "downlink" - if tag == "api" { - continue - } - traffic, ok := tagTrafficMap[tag] - if !ok { - traffic = &Traffic{ - IsInbound: isInbound, - Tag: tag, - } - tagTrafficMap[tag] = traffic - traffics = append(traffics, traffic) - } - if isDown { - traffic.Down = stat.Value - } else { - traffic.Up = stat.Value - } - } - - return traffics, clientTraffics, nil -} |
