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/xray
diff options
context:
space:
mode:
authorAlireza Ahmadi <alireza7@gmail.com>2023-12-10 15:07:50 +0300
committerAlireza Ahmadi <alireza7@gmail.com>2023-12-10 15:07:50 +0300
commit070fd52d86451fe28ba508b211987adea7accc4f (patch)
tree467295bababb886a9f6c03bc45c991f0c75e0352 /xray
parent4cb67fd1c3129b83f3750f863caba081453f42b1 (diff)
[logs] combine with xray logs #1300
Diffstat (limited to 'xray')
-rw-r--r--xray/log_writer.go53
-rw-r--r--xray/process.go64
2 files changed, 59 insertions, 58 deletions
diff --git a/xray/log_writer.go b/xray/log_writer.go
new file mode 100644
index 00000000..c2f66e8f
--- /dev/null
+++ b/xray/log_writer.go
@@ -0,0 +1,53 @@
+package xray
+
+import (
+ "strings"
+ "x-ui/logger"
+)
+
+func NewLogWriter() *LogWriter {
+ return &LogWriter{}
+}
+
+type LogWriter struct {
+ lastLine string
+}
+
+func (lw *LogWriter) Write(m []byte) (n int, err error) {
+ // Convert the data to a string
+ message := strings.TrimSpace(string(m))
+ messages := strings.Split(message, "\n")
+ lw.lastLine = messages[len(messages)-1]
+
+ for _, msg := range messages {
+ // Remove timestamp
+ messageBody := strings.TrimSpace(strings.SplitN(msg, " ", 3)[2])
+
+ // Find level in []
+ startIndex := strings.Index(messageBody, "[")
+ endIndex := strings.Index(messageBody, "]")
+ if startIndex != -1 && endIndex != -1 {
+ level := strings.TrimSpace(messageBody[startIndex+1 : endIndex])
+ msgBody := "XRAY: " + strings.TrimSpace(messageBody[endIndex+1:])
+
+ // Map the level to the appropriate logger function
+ switch level {
+ case "Debug":
+ logger.Debug(msgBody)
+ case "Info":
+ logger.Info(msgBody)
+ case "Warning":
+ logger.Warning(msgBody)
+ case "Error":
+ logger.Error(msgBody)
+ default:
+ logger.Debug("XRAY: " + msg)
+ }
+ } else if msg != "" {
+ logger.Debug("XRAY: " + msg)
+ return len(m), nil
+ }
+ }
+
+ return len(m), nil
+}
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()