1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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
- }
|