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
diff options
context:
space:
mode:
authorMHSanaei <ho3ein.sanaei@gmail.com>2023-06-05 00:02:19 +0300
committerMHSanaei <ho3ein.sanaei@gmail.com>2023-06-05 00:02:19 +0300
commit70f250dfe1e24249a4cc8102e3fef65959dfb15a (patch)
tree9fdc990d656267abf6facafd851ab7b4835be977 /xray/process.go
parent1030bcf321f15ada665ca3c55436d7c2449b5faf (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.go91
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
-}