From 78cd087d2cfba4f6635313644991aedb0b477c8a Mon Sep 17 00:00:00 2001 From: samwaf Date: Thu, 28 Dec 2023 18:03:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0qps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global/global.go | 2 ++ .../dashboard/base/components/TopPanel.vue | 8 ++++- main.go | 10 +++++++ model/response/waf_stat.go | 29 ++++++++++--------- service/waf_service/waf_stat.go | 3 ++ wafenginecore/wafengine.go | 2 ++ 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/global/global.go b/global/global.go index ddcb45a..7733c0f 100644 --- a/global/global.go +++ b/global/global.go @@ -27,6 +27,8 @@ var ( GWAF_RUNTIME_NEW_VERSION string = "" //最新版本号 GWAF_RUNTIME_NEW_VERSION_DESC string = "" //最新版本描述 + GWAF_RUNTIME_QPS uint64 = 0 //当前qps + /** 遥测数据 */ diff --git a/localwaf/src/pages/dashboard/base/components/TopPanel.vue b/localwaf/src/pages/dashboard/base/components/TopPanel.vue index 1a5a890..0d52529 100644 --- a/localwaf/src/pages/dashboard/base/components/TopPanel.vue +++ b/localwaf/src/pages/dashboard/base/components/TopPanel.vue @@ -177,11 +177,17 @@ export default { upTrend: '0%', leftType: 'echarts-line', }) - that.panelList.push({ + /* that.panelList.push({ title: '今天正常IP(个)', number: that.wafstat_data.NormalIpCountOfToday, upTrend: '0%', leftType: 'echarts-line', + })*/ + that.panelList.push({ + title: '当前QPS', + number: that.wafstat_data.CurrentQps, + upTrend: '0%', + leftType: 'echarts-line', }) } }) diff --git a/main.go b/main.go index 025f2b9..e07f4fb 100644 --- a/main.go +++ b/main.go @@ -27,6 +27,7 @@ import ( "os/signal" "runtime" "strconv" + "sync/atomic" "syscall" "time" ) @@ -136,6 +137,15 @@ func (m *wafSystenService) run() { s := gocron.NewScheduler(timezone) global.GWAF_LAST_UPDATE_TIME = time.Now() + // 每1秒执行qps清空 + s.Every(1).Seconds().Do(func() { + // 清零计数器 + atomic.StoreUint64(&global.GWAF_RUNTIME_QPS, 0) + + // 输出清零后的计数 + //newCount := atomic.LoadUint64(&requestCount) + }) + // 每10秒执行一次 s.Every(10).Seconds().Do(func() { if global.GWAF_SWITCH_TASK_COUNTER == false { diff --git a/model/response/waf_stat.go b/model/response/waf_stat.go index a9076eb..7800a1b 100644 --- a/model/response/waf_stat.go +++ b/model/response/waf_stat.go @@ -3,20 +3,21 @@ package response import "SamWaf/model" type WafStat struct { - AttackCountOfToday int64 //今日攻击数量 - VisitCountOfToday int64 //今天访问数量 - AttackCountOfYesterday int64 //昨日攻击数量 - VisitCountOfYesterday int64 //昨日访问数量 - AttackCountOfLastWeekToday int64 //上周攻击数量 - VisitCountOfLastWeekToday int64 //上周访问数量 - NormalIpCountOfToday int64 //今日正常IP数量 - IllegalIpCountOfToday int64 //今日非法IP数量 - NormalCountryCountOfToday int64 //今日正常国家数量 - IllegalCountryCountOfToday int64 //今日非法国家数量 - NormalProvinceCountOfToday int64 //今日正常省份数量 - IllegalProvinceCountOfToday int64 //今日非法省份数量 - NormalCityCountOfToday int64 //今日正常城市数量 - IllegalCityCountOfToday int64 //今日非法城市数量 + AttackCountOfToday int64 //今日攻击数量 + VisitCountOfToday int64 //今天访问数量 + AttackCountOfYesterday int64 //昨日攻击数量 + VisitCountOfYesterday int64 //昨日访问数量 + AttackCountOfLastWeekToday int64 //上周攻击数量 + VisitCountOfLastWeekToday int64 //上周访问数量 + NormalIpCountOfToday int64 //今日正常IP数量 + IllegalIpCountOfToday int64 //今日非法IP数量 + NormalCountryCountOfToday int64 //今日正常国家数量 + IllegalCountryCountOfToday int64 //今日非法国家数量 + NormalProvinceCountOfToday int64 //今日正常省份数量 + IllegalProvinceCountOfToday int64 //今日非法省份数量 + NormalCityCountOfToday int64 //今日正常城市数量 + IllegalCityCountOfToday int64 //今日非法城市数量 + CurrentQps uint64 //当前QPS } type WafStatRange struct { AttackCountOfRange map[int]int64 //区间攻击数量 diff --git a/service/waf_service/waf_stat.go b/service/waf_service/waf_stat.go index e6cbd53..3e6dc75 100644 --- a/service/waf_service/waf_stat.go +++ b/service/waf_service/waf_stat.go @@ -13,6 +13,7 @@ import ( "github.com/shirou/gopsutil/net" "runtime" "strconv" + "sync/atomic" "time" ) @@ -62,6 +63,7 @@ func (receiver *WafStatService) StatHomeSumDayApi() (response2.WafStat, error) { IllegalProvinceCountOfToday: 0, NormalCityCountOfToday: 0, IllegalCityCountOfToday: 0, + CurrentQps: atomic.LoadUint64(&global.GWAF_RUNTIME_QPS), }, nil } @@ -190,6 +192,7 @@ func (receiver *WafStatService) StatHomeRumtimeSysinfo() []response2.WafNameValu data = append(data, response2.WafNameValue{Name: "软件版本", Value: fmt.Sprintf("%v", global.GWAF_RELEASE_VERSION_NAME)}) data = append(data, response2.WafNameValue{Name: "软件版本Code", Value: fmt.Sprintf("%v", global.GWAF_RELEASE_VERSION)}) + data = append(data, response2.WafNameValue{Name: "当前QPS", Value: fmt.Sprintf("%v", atomic.LoadUint64(&global.GWAF_RUNTIME_QPS))}) return data } diff --git a/wafenginecore/wafengine.go b/wafenginecore/wafengine.go index 8d8f82f..ded396f 100644 --- a/wafenginecore/wafengine.go +++ b/wafenginecore/wafengine.go @@ -40,6 +40,7 @@ import ( "os" "strconv" "strings" + "sync/atomic" "time" ) @@ -62,6 +63,7 @@ func (waf *WafEngine) Error() string { return fmt.Sprintf(fs) } func (waf *WafEngine) ServeHTTP(w http.ResponseWriter, r *http.Request) { + atomic.AddUint64(&global.GWAF_RUNTIME_QPS, 1) // 原子增加计数器 host := r.Host if !strings.Contains(host, ":") { host = host + ":80"