mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	商业版WAF看板增加地图
This commit is contained in:
		@@ -94,8 +94,10 @@ func (this *ServerRegionCountryDailyStatDAO) ListServerStats(tx *dbs.Tx, serverI
 | 
			
		||||
		query.Desc("countRequests")
 | 
			
		||||
	case "attackBytes":
 | 
			
		||||
		query.Desc("attackBytes")
 | 
			
		||||
		query.Gt("attackBytes", 0)
 | 
			
		||||
	case "countAttackRequests":
 | 
			
		||||
		query.Desc("countAttackRequests")
 | 
			
		||||
		query.Gt("countAttackRequests", 0)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = query.FindAll()
 | 
			
		||||
@@ -119,21 +121,30 @@ func (this *ServerRegionCountryDailyStatDAO) ListSumStats(tx *dbs.Tx, day string
 | 
			
		||||
		query.Desc("countRequests")
 | 
			
		||||
	case "attackBytes":
 | 
			
		||||
		query.Desc("attackBytes")
 | 
			
		||||
		query.Gt("attackBytes", 0)
 | 
			
		||||
	case "countAttackRequests":
 | 
			
		||||
		query.Desc("countAttackRequests")
 | 
			
		||||
		query.Gt("countAttackRequests", 0)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = query.FindAll()
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SumDailyBytes 计算总流量
 | 
			
		||||
// SumDailyTotalBytes 计算总流量
 | 
			
		||||
func (this *ServerRegionCountryDailyStatDAO) SumDailyTotalBytes(tx *dbs.Tx, day string) (int64, error) {
 | 
			
		||||
	return this.Query(tx).
 | 
			
		||||
		Attr("day", day).
 | 
			
		||||
		SumInt64("bytes", 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SumDailyTotalAttackRequests 计算总攻击次数
 | 
			
		||||
func (this *ServerRegionCountryDailyStatDAO) SumDailyTotalAttackRequests(tx *dbs.Tx, day string) (int64, error) {
 | 
			
		||||
	return this.Query(tx).
 | 
			
		||||
		Attr("day", day).
 | 
			
		||||
		SumInt64("countAttackRequests", 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Clean 清理统计数据
 | 
			
		||||
func (this *ServerRegionCountryDailyStatDAO) Clean(tx *dbs.Tx) error {
 | 
			
		||||
	// 只保留7天的
 | 
			
		||||
 
 | 
			
		||||
@@ -736,14 +736,14 @@ func (this *AdminService) ComposeAdminDashboard(ctx context.Context, req *pb.Com
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 流量排行
 | 
			
		||||
	// 地区流量排行
 | 
			
		||||
	if isPlus {
 | 
			
		||||
		totalBytes, err := stats.SharedServerRegionCountryDailyStatDAO.SumDailyTotalBytes(tx, timeutil.Format("Ymd"))
 | 
			
		||||
		totalCountryBytes, err := stats.SharedServerRegionCountryDailyStatDAO.SumDailyTotalBytes(tx, timeutil.Format("Ymd"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if totalBytes > 0 {
 | 
			
		||||
		if totalCountryBytes > 0 {
 | 
			
		||||
			topCountryStats, err := stats.SharedServerRegionCountryDailyStatDAO.ListSumStats(tx, timeutil.Format("Ymd"), "bytes", 0, 100)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
@@ -758,7 +758,9 @@ func (this *AdminService) ComposeAdminDashboard(ctx context.Context, req *pb.Com
 | 
			
		||||
					CountryName:         countryName,
 | 
			
		||||
					Bytes:               int64(stat.Bytes),
 | 
			
		||||
					CountRequests:       int64(stat.CountRequests),
 | 
			
		||||
					Percent:       float32(stat.Bytes*100) / float32(totalBytes),
 | 
			
		||||
					AttackBytes:         int64(stat.AttackBytes),
 | 
			
		||||
					CountAttackRequests: int64(stat.CountAttackRequests),
 | 
			
		||||
					Percent:             float32(stat.Bytes*100) / float32(totalCountryBytes),
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,7 @@ package services
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models/regions"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models/stats"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/utils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
 | 
			
		||||
@@ -215,6 +216,34 @@ func (this *FirewallService) ComposeFirewallGlobalBoard(ctx context.Context, req
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 地区流量排行
 | 
			
		||||
	totalCountryRequests, err := stats.SharedServerRegionCountryDailyStatDAO.SumDailyTotalAttackRequests(tx, timeutil.Format("Ymd"))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if totalCountryRequests > 0 {
 | 
			
		||||
		topCountryStats, err := stats.SharedServerRegionCountryDailyStatDAO.ListSumStats(tx, timeutil.Format("Ymd"), "countAttackRequests", 0, 100)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for _, stat := range topCountryStats {
 | 
			
		||||
			countryName, err := regions.SharedRegionCountryDAO.FindRegionCountryName(tx, int64(stat.CountryId))
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			result.TopCountryStats = append(result.TopCountryStats, &pb.ComposeFirewallGlobalBoardResponse_CountryStat{
 | 
			
		||||
				CountryName:         countryName,
 | 
			
		||||
				Bytes:               int64(stat.Bytes),
 | 
			
		||||
				CountRequests:       int64(stat.CountRequests),
 | 
			
		||||
				AttackBytes:         int64(stat.AttackBytes),
 | 
			
		||||
				CountAttackRequests: int64(stat.CountAttackRequests),
 | 
			
		||||
				Percent:             float32(stat.CountAttackRequests*100) / float32(totalCountryRequests),
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user