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:
authorSaeid <43953720+surbiks@users.noreply.github.com>2024-01-29 23:37:20 +0300
committerGitHub <noreply@github.com>2024-01-29 23:37:20 +0300
commit6c0775b12055e4546cb0fd86e1d8d569d886eefa (patch)
tree8f7ee64e54f83f9c563a178c4afaee10e072eddc /web/service
parent9fbaede59f87dd9d8b77479a3fb295c3c882630e (diff)
Show outbound traffic in outbounds table (#1711)
* store outbound traffic in database * show outbound traffic in outbounds table * add refresh button
Diffstat (limited to 'web/service')
-rw-r--r--web/service/inbound.go4
-rw-r--r--web/service/outbound.go80
2 files changed, 82 insertions, 2 deletions
diff --git a/web/service/inbound.go b/web/service/inbound.go
index f3445101..291c0dee 100644
--- a/web/service/inbound.go
+++ b/web/service/inbound.go
@@ -682,7 +682,7 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin
return needRestart, tx.Save(oldInbound).Error
}
-func (s *InboundService) AddTraffic(inboundTraffics []*xray.Traffic, clientTraffics []*xray.ClientTraffic) (error, bool) {
+func (s *InboundService) AddTraffic(traffics []*xray.Traffic, clientTraffics []*xray.ClientTraffic) (error, bool) {
var err error
db := database.GetDB()
tx := db.Begin()
@@ -694,7 +694,7 @@ func (s *InboundService) AddTraffic(inboundTraffics []*xray.Traffic, clientTraff
tx.Commit()
}
}()
- err = s.addInboundTraffic(tx, inboundTraffics)
+ err = s.addInboundTraffic(tx, traffics)
if err != nil {
return err, false
}
diff --git a/web/service/outbound.go b/web/service/outbound.go
new file mode 100644
index 00000000..dc0e0742
--- /dev/null
+++ b/web/service/outbound.go
@@ -0,0 +1,80 @@
+package service
+
+import (
+ "x-ui/database"
+ "x-ui/database/model"
+ "x-ui/logger"
+ "x-ui/xray"
+
+ "gorm.io/gorm"
+)
+
+type OutboundService struct {
+ xrayApi xray.XrayAPI
+}
+
+func (s *OutboundService) AddTraffic(traffics []*xray.Traffic, clientTraffics []*xray.ClientTraffic) (error, bool) {
+ var err error
+ db := database.GetDB()
+ tx := db.Begin()
+
+ defer func() {
+ if err != nil {
+ tx.Rollback()
+ } else {
+ tx.Commit()
+ }
+ }()
+
+ err = s.addOutboundTraffic(tx, traffics)
+ if err != nil {
+ return err, false
+ }
+
+ return nil, false
+}
+
+func (s *OutboundService) addOutboundTraffic(tx *gorm.DB, traffics []*xray.Traffic) error {
+ if len(traffics) == 0 {
+ return nil
+ }
+
+ var err error
+
+ for _, traffic := range traffics {
+ if traffic.IsOutbound {
+
+ var outbound model.OutboundTraffics
+
+ err = tx.Model(&model.OutboundTraffics{}).Where("tag = ?", traffic.Tag).
+ FirstOrCreate(&outbound).Error
+ if err != nil {
+ return err
+ }
+
+ outbound.Tag = traffic.Tag
+ outbound.Up = outbound.Up + traffic.Up
+ outbound.Down = outbound.Down + traffic.Down
+ outbound.Total = outbound.Up + outbound.Down
+
+ err = tx.Save(&outbound).Error
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
+func (s *OutboundService) GetOutboundsTraffic() ([]*model.OutboundTraffics, error) {
+ db := database.GetDB()
+ var traffics []*model.OutboundTraffics
+
+ err := db.Model(model.OutboundTraffics{}).Find(&traffics).Error
+ if err != nil {
+ logger.Warning(err)
+ return nil, err
+ }
+
+ return traffics, nil
+}