From 6e1c6fcadb59276700fe343e786a427106cf6257 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 14 Mar 2022 16:44:56 +0800 Subject: [PATCH] =?UTF-8?q?WAF=E5=85=A8=E5=B1=80=E7=9C=8B=E6=9D=BF?= =?UTF-8?q?=E4=B8=AD=E6=8B=A6=E6=88=AA=E7=B1=BB=E5=9E=8B=E5=8F=AA=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=BD=93=E5=A4=A9=E7=9A=84=E7=BB=9F=E8=AE=A1/?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=90=8C=E5=90=8D=E8=A7=84=E5=88=99=E5=88=86?= =?UTF-8?q?=E7=BB=84=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/rpc/services/service_firewall.go | 22 ++++++++++++++++++- ...service_server_http_firewall_daily_stat.go | 21 +++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) 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))