diff --git a/internal/rpc/services/service_firewall.go b/internal/rpc/services/service_firewall.go index 3c41ddf2..0f916819 100644 --- a/internal/rpc/services/service_firewall.go +++ b/internal/rpc/services/service_firewall.go @@ -12,6 +12,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/types" timeutil "github.com/iwind/TeaGo/utils/time" + "sort" "strconv" "time" ) @@ -158,10 +159,14 @@ func (this *FirewallService) ComposeFirewallGlobalBoard(ctx context.Context, req } // 规则分组 - groupStats, err := stats.SharedServerHTTPFirewallDailyStatDAO.GroupDailyCount(tx, 0, 0, dayFrom, day, 0, 10) + var today = timeutil.Format("Ymd") + groupStats, err := stats.SharedServerHTTPFirewallDailyStatDAO.GroupDailyCount(tx, 0, 0, today, today, 0, 20) if err != nil { return nil, err } + + // 合并同名 + var groupNamedStatsMap = map[string]*stats.ServerHTTPFirewallDailyStat{} // name => *ServerHTTPFirewallDailyStat for _, stat := range groupStats { ruleGroupName, err := models.SharedHTTPFirewallRuleGroupDAO.FindHTTPFirewallRuleGroupName(tx, int64(stat.HttpFirewallRuleGroupId)) if err != nil { @@ -171,11 +176,26 @@ func (this *FirewallService) ComposeFirewallGlobalBoard(ctx context.Context, req continue } + namedStat, ok := groupNamedStatsMap[ruleGroupName] + if ok { + namedStat.Count += stat.Count + } else { + groupNamedStatsMap[ruleGroupName] = stat + } + } + + for ruleGroupName, stat := range groupNamedStatsMap { result.HttpFirewallRuleGroups = append(result.HttpFirewallRuleGroups, &pb.ComposeFirewallGlobalBoardResponse_HTTPFirewallRuleGroupStat{ HttpFirewallRuleGroup: &pb.HTTPFirewallRuleGroup{Id: int64(stat.HttpFirewallRuleGroupId), Name: ruleGroupName}, Count: int64(stat.Count), }) } + sort.Slice(result.HttpFirewallRuleGroups, func(i, j int) bool { + return result.HttpFirewallRuleGroups[i].Count > result.HttpFirewallRuleGroups[j].Count + }) + if len(result.HttpFirewallRuleGroups) > 10 { + result.HttpFirewallRuleGroups = result.HttpFirewallRuleGroups[:10] + } // 节点排行 topNodeStats, err := stats.SharedNodeTrafficHourlyStatDAO.FindTopNodeStatsWithAttack(tx, "node", hourFrom, hourTo, 10) diff --git a/internal/rpc/services/service_server_http_firewall_daily_stat.go b/internal/rpc/services/service_server_http_firewall_daily_stat.go index 07fea744..3c7b9757 100644 --- a/internal/rpc/services/service_server_http_firewall_daily_stat.go +++ b/internal/rpc/services/service_server_http_firewall_daily_stat.go @@ -8,6 +8,7 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/types" timeutil "github.com/iwind/TeaGo/utils/time" + "sort" "time" ) @@ -90,10 +91,13 @@ func (this *ServerHTTPFirewallDailyStatService) ComposeServerHTTPFirewallDashboa } // 规则分组 - groupStats, err := stats.SharedServerHTTPFirewallDailyStatDAO.GroupDailyCount(tx, userId, req.ServerId, monthFrom, monthTo, 0, 10) + groupStats, err := stats.SharedServerHTTPFirewallDailyStatDAO.GroupDailyCount(tx, userId, req.ServerId, monthFrom, monthTo, 0, 20) if err != nil { return nil, err } + + // 合并同名 + var groupNamedStatsMap = map[string]*stats.ServerHTTPFirewallDailyStat{} // name => *ServerHTTPFirewallDailyStat for _, stat := range groupStats { ruleGroupName, err := models.SharedHTTPFirewallRuleGroupDAO.FindHTTPFirewallRuleGroupName(tx, int64(stat.HttpFirewallRuleGroupId)) if err != nil { @@ -103,11 +107,26 @@ func (this *ServerHTTPFirewallDailyStatService) ComposeServerHTTPFirewallDashboa continue } + namedStat, ok := groupNamedStatsMap[ruleGroupName] + if ok { + namedStat.Count += stat.Count + } else { + groupNamedStatsMap[ruleGroupName] = stat + } + } + + for ruleGroupName, stat := range groupNamedStatsMap { resp.HttpFirewallRuleGroups = append(resp.HttpFirewallRuleGroups, &pb.ComposeServerHTTPFirewallDashboardResponse_HTTPFirewallRuleGroupStat{ HttpFirewallRuleGroup: &pb.HTTPFirewallRuleGroup{Id: int64(stat.HttpFirewallRuleGroupId), Name: ruleGroupName}, Count: int64(stat.Count), }) } + sort.Slice(resp.HttpFirewallRuleGroups, func(i, j int) bool { + return resp.HttpFirewallRuleGroups[i].Count > resp.HttpFirewallRuleGroups[j].Count + }) + if len(resp.HttpFirewallRuleGroups) > 10 { + resp.HttpFirewallRuleGroups = resp.HttpFirewallRuleGroups[:10] + } // 每日趋势 dayBefore := timeutil.Format("Ymd", date.AddDate(0, 0, -14))