|
@@ -7,6 +7,7 @@ import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"maps"
|
|
"maps"
|
|
|
"slices"
|
|
"slices"
|
|
|
|
|
+ "strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
@@ -837,15 +838,27 @@ func (s *InboundService) DelDepletedClients(id int) (err error) {
|
|
|
|
|
|
|
|
func (s *InboundService) GetClientTrafficTgBot(tgId int64) ([]*xray.ClientTraffic, error) {
|
|
func (s *InboundService) GetClientTrafficTgBot(tgId int64) ([]*xray.ClientTraffic, error) {
|
|
|
db := database.GetDB()
|
|
db := database.GetDB()
|
|
|
- var inbounds []*model.Inbound
|
|
|
|
|
|
|
|
|
|
- // Retrieve inbounds where settings contain the given tgId
|
|
|
|
|
- err := db.Model(model.Inbound{}).Where("settings LIKE ?", fmt.Sprintf(`%%"tgId": %d%%`, tgId)).Find(&inbounds).Error
|
|
|
|
|
- if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
|
|
|
+ idQuery := fmt.Sprintf(
|
|
|
|
|
+ "SELECT DISTINCT inbounds.id %s WHERE %s = ?",
|
|
|
|
|
+ database.JSONClientsFromInbound(),
|
|
|
|
|
+ database.JSONFieldText("client.value", "tgId"),
|
|
|
|
|
+ )
|
|
|
|
|
+ var inboundIds []int
|
|
|
|
|
+ if err := db.Raw(idQuery, strconv.FormatInt(tgId, 10)).Scan(&inboundIds).Error; err != nil {
|
|
|
logger.Errorf("Error retrieving inbounds with tgId %d: %v", tgId, err)
|
|
logger.Errorf("Error retrieving inbounds with tgId %d: %v", tgId, err)
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ var inbounds []*model.Inbound
|
|
|
|
|
+ if len(inboundIds) > 0 {
|
|
|
|
|
+ err := db.Model(model.Inbound{}).Where("id IN ?", inboundIds).Find(&inbounds).Error
|
|
|
|
|
+ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
|
+ logger.Errorf("Error retrieving inbounds with tgId %d: %v", tgId, err)
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
var emails []string
|
|
var emails []string
|
|
|
for _, inbound := range inbounds {
|
|
for _, inbound := range inbounds {
|
|
|
clients, err := s.GetClients(inbound)
|
|
clients, err := s.GetClients(inbound)
|
|
@@ -866,7 +879,7 @@ func (s *InboundService) GetClientTrafficTgBot(tgId int64) ([]*xray.ClientTraffi
|
|
|
traffics := make([]*xray.ClientTraffic, 0, len(uniqEmails))
|
|
traffics := make([]*xray.ClientTraffic, 0, len(uniqEmails))
|
|
|
for _, batch := range chunkStrings(uniqEmails, sqliteMaxVars) {
|
|
for _, batch := range chunkStrings(uniqEmails, sqliteMaxVars) {
|
|
|
var page []*xray.ClientTraffic
|
|
var page []*xray.ClientTraffic
|
|
|
- if err = db.Model(xray.ClientTraffic{}).Where("email IN ?", batch).Find(&page).Error; err != nil {
|
|
|
|
|
|
|
+ if err := db.Model(xray.ClientTraffic{}).Where("email IN ?", batch).Find(&page).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|