outbound.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package service
  2. import (
  3. "x-ui/database"
  4. "x-ui/database/model"
  5. "x-ui/logger"
  6. "x-ui/xray"
  7. "gorm.io/gorm"
  8. )
  9. type OutboundService struct {
  10. xrayApi xray.XrayAPI
  11. }
  12. func (s *OutboundService) AddTraffic(traffics []*xray.Traffic, clientTraffics []*xray.ClientTraffic) (error, bool) {
  13. var err error
  14. db := database.GetDB()
  15. tx := db.Begin()
  16. defer func() {
  17. if err != nil {
  18. tx.Rollback()
  19. } else {
  20. tx.Commit()
  21. }
  22. }()
  23. err = s.addOutboundTraffic(tx, traffics)
  24. if err != nil {
  25. return err, false
  26. }
  27. return nil, false
  28. }
  29. func (s *OutboundService) addOutboundTraffic(tx *gorm.DB, traffics []*xray.Traffic) error {
  30. if len(traffics) == 0 {
  31. return nil
  32. }
  33. var err error
  34. for _, traffic := range traffics {
  35. if traffic.IsOutbound {
  36. var outbound model.OutboundTraffics
  37. err = tx.Model(&model.OutboundTraffics{}).Where("tag = ?", traffic.Tag).
  38. FirstOrCreate(&outbound).Error
  39. if err != nil {
  40. return err
  41. }
  42. outbound.Tag = traffic.Tag
  43. outbound.Up = outbound.Up + traffic.Up
  44. outbound.Down = outbound.Down + traffic.Down
  45. outbound.Total = outbound.Up + outbound.Down
  46. err = tx.Save(&outbound).Error
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. }
  52. return nil
  53. }
  54. func (s *OutboundService) GetOutboundsTraffic() ([]*model.OutboundTraffics, error) {
  55. db := database.GetDB()
  56. var traffics []*model.OutboundTraffics
  57. err := db.Model(model.OutboundTraffics{}).Find(&traffics).Error
  58. if err != nil {
  59. logger.Warning(err)
  60. return nil, err
  61. }
  62. return traffics, nil
  63. }