diff options
| author | Saeid <43953720+surbiks@users.noreply.github.com> | 2024-01-29 23:37:20 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-29 23:37:20 +0300 |
| commit | 6c0775b12055e4546cb0fd86e1d8d569d886eefa (patch) | |
| tree | 8f7ee64e54f83f9c563a178c4afaee10e072eddc /web/service | |
| parent | 9fbaede59f87dd9d8b77479a3fb295c3c882630e (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.go | 4 | ||||
| -rw-r--r-- | web/service/outbound.go | 80 |
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 +} |
