From 070fd52d86451fe28ba508b211987adea7accc4f Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Sun, 10 Dec 2023 13:07:50 +0100 Subject: [logs] combine with xray logs #1300 --- xray/process.go | 64 ++++++--------------------------------------------------- 1 file changed, 6 insertions(+), 58 deletions(-) (limited to 'xray/process.go') diff --git a/xray/process.go b/xray/process.go index a3c37fd5..9289362f 100644 --- a/xray/process.go +++ b/xray/process.go @@ -1,7 +1,6 @@ package xray import ( - "bufio" "bytes" "encoding/json" "errors" @@ -10,16 +9,12 @@ import ( "os" "os/exec" "runtime" - "strings" - "sync" "syscall" "time" "x-ui/config" "x-ui/logger" "x-ui/util/common" - - "github.com/Workiva/go-datastructures/queue" ) func GetBinaryName() string { @@ -101,7 +96,7 @@ type process struct { onlineClients []string config *Config - lines *queue.Queue + logWriter *LogWriter exitErr error startTime time.Time } @@ -110,7 +105,7 @@ func newProcess(config *Config) *process { return &process{ version: "Unknown", config: config, - lines: queue.New(100), + logWriter: NewLogWriter(), startTime: time.Now(), } } @@ -130,17 +125,10 @@ func (p *process) GetErr() error { } func (p *process) GetResult() string { - if p.lines.Empty() && p.exitErr != nil { + if len(p.logWriter.lastLine) == 0 && p.exitErr != nil { return p.exitErr.Error() } - items, _ := p.lines.TakeUntil(func(item interface{}) bool { - return true - }) - lines := make([]string, 0, len(items)) - for _, item := range items { - lines = append(lines, item.(string)) - } - return strings.Join(lines, "\n") + return p.logWriter.lastLine } func (p *process) GetVersion() string { @@ -215,54 +203,14 @@ func (p *process) Start() (err error) { cmd := exec.Command(GetBinaryPath(), "-c", configPath) p.cmd = cmd - stdReader, err := cmd.StdoutPipe() - if err != nil { - return err - } - errReader, err := cmd.StderrPipe() - if err != nil { - return err - } - - var wg sync.WaitGroup - wg.Add(2) - - go func() { - defer wg.Done() - reader := bufio.NewReaderSize(stdReader, 8192) - for { - line, _, err := reader.ReadLine() - if err != nil { - return - } - if p.lines.Len() >= 100 { - p.lines.Get(1) - } - p.lines.Put(string(line)) - } - }() - - go func() { - defer wg.Done() - reader := bufio.NewReaderSize(errReader, 8192) - for { - line, _, err := reader.ReadLine() - if err != nil { - return - } - if p.lines.Len() >= 100 { - p.lines.Get(1) - } - p.lines.Put(string(line)) - } - }() + cmd.Stdout = p.logWriter + cmd.Stderr = p.logWriter go func() { err := cmd.Run() if err != nil { p.exitErr = err } - wg.Wait() }() p.refreshVersion() -- cgit v1.2.3