mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-18 20:00:25 +08:00
优化统计相关程序
This commit is contained in:
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models/clients"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models/dns"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models/regions"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
@@ -1627,52 +1626,33 @@ func (this *ServerService) UploadServerHTTPRequestStat(ctx context.Context, req
|
||||
// IP => 地理位置
|
||||
err := func() error {
|
||||
// 区域
|
||||
if len(result.CountryName) > 0 {
|
||||
countryId, err := regions.SharedRegionCountryDAO.FindCountryIdWithNameCacheable(tx, result.CountryName)
|
||||
if err != nil {
|
||||
return err
|
||||
if result.CountryId > 0 {
|
||||
var countryKey = fmt.Sprintf("%d@%d@%s", result.ServerId, result.CountryId, day)
|
||||
serverStatLocker.Lock()
|
||||
stat, ok := serverHTTPCountryStatMap[countryKey]
|
||||
if !ok {
|
||||
stat = &TrafficStat{}
|
||||
serverHTTPCountryStatMap[countryKey] = stat
|
||||
}
|
||||
if countryId > 0 {
|
||||
countryKey := fmt.Sprintf("%d@%d@%s", result.ServerId, countryId, day)
|
||||
stat.CountRequests += result.CountRequests
|
||||
stat.Bytes += result.Bytes
|
||||
stat.CountAttackRequests += result.CountAttackRequests
|
||||
stat.AttackBytes += result.AttackBytes
|
||||
serverStatLocker.Unlock()
|
||||
|
||||
// 省份
|
||||
if result.ProvinceId > 0 {
|
||||
var provinceKey = fmt.Sprintf("%d@%d@%s", result.ServerId, result.ProvinceId, month)
|
||||
serverStatLocker.Lock()
|
||||
stat, ok := serverHTTPCountryStatMap[countryKey]
|
||||
if !ok {
|
||||
stat = &TrafficStat{}
|
||||
serverHTTPCountryStatMap[countryKey] = stat
|
||||
}
|
||||
stat.CountRequests += result.CountRequests
|
||||
stat.Bytes += result.Bytes
|
||||
stat.CountAttackRequests += result.CountAttackRequests
|
||||
stat.AttackBytes += result.AttackBytes
|
||||
serverHTTPProvinceStatMap[provinceKey] += result.CountRequests
|
||||
serverStatLocker.Unlock()
|
||||
|
||||
// 省份
|
||||
if len(result.ProvinceName) > 0 {
|
||||
provinceId, err := regions.SharedRegionProvinceDAO.FindProvinceIdWithNameCacheable(tx, countryId, result.ProvinceName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if provinceId > 0 {
|
||||
key := fmt.Sprintf("%d@%d@%s", result.ServerId, provinceId, month)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPProvinceStatMap[key] += result.CountRequests
|
||||
serverStatLocker.Unlock()
|
||||
|
||||
// 城市
|
||||
if len(result.CityName) > 0 {
|
||||
cityId, err := regions.SharedRegionCityDAO.FindCityIdWithNameCacheable(tx, provinceId, result.CityName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if cityId > 0 {
|
||||
key := fmt.Sprintf("%d@%d@%s", result.ServerId, cityId, month)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPCityStatMap[key] += result.CountRequests
|
||||
serverStatLocker.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 城市
|
||||
if result.CityId > 0 {
|
||||
var cityKey = fmt.Sprintf("%d@%d@%s", result.ServerId, result.CityId, month)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPCityStatMap[cityKey] += result.CountRequests
|
||||
serverStatLocker.Unlock()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1688,17 +1668,10 @@ func (this *ServerService) UploadServerHTTPRequestStat(ctx context.Context, req
|
||||
for _, result := range req.RegionProviders {
|
||||
// IP => 地理位置
|
||||
err := func() error {
|
||||
if len(result.Name) == 0 {
|
||||
return nil
|
||||
}
|
||||
providerId, err := regions.SharedRegionProviderDAO.FindProviderIdWithNameCacheable(tx, result.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if providerId > 0 {
|
||||
key := fmt.Sprintf("%d@%d@%s", result.ServerId, providerId, month)
|
||||
if result.ProviderId > 0 {
|
||||
var providerKey = fmt.Sprintf("%d@%d@%s", result.ServerId, result.ProviderId, month)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPProviderStatMap[key] += result.Count
|
||||
serverHTTPProviderStatMap[providerKey] += result.Count
|
||||
serverStatLocker.Unlock()
|
||||
}
|
||||
return nil
|
||||
@@ -1759,7 +1732,7 @@ func (this *ServerService) UploadServerHTTPRequestStat(ctx context.Context, req
|
||||
// 直接返回不再进行操作
|
||||
return nil
|
||||
}
|
||||
key := fmt.Sprintf("%d@%d@%s@%s", result.ServerId, browserId, result.Version, month)
|
||||
var key = fmt.Sprintf("%d@%d@%s@%s", result.ServerId, browserId, result.Version, month)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPBrowserStatMap[key] += result.Count
|
||||
serverStatLocker.Unlock()
|
||||
@@ -1776,7 +1749,7 @@ func (this *ServerService) UploadServerHTTPRequestStat(ctx context.Context, req
|
||||
if result.HttpFirewallRuleGroupId <= 0 {
|
||||
return nil
|
||||
}
|
||||
key := fmt.Sprintf("%d@%d@%s@%s", result.ServerId, result.HttpFirewallRuleGroupId, result.Action, day)
|
||||
var key = fmt.Sprintf("%d@%d@%s@%s", result.ServerId, result.HttpFirewallRuleGroupId, result.Action, day)
|
||||
serverStatLocker.Lock()
|
||||
serverHTTPFirewallRuleGroupStatMap[key] += result.Count
|
||||
serverStatLocker.Unlock()
|
||||
|
||||
@@ -54,7 +54,7 @@ func init() {
|
||||
// 测试条件下缩短时间,以便进行观察
|
||||
duration = 10 * time.Second
|
||||
}
|
||||
ticker := time.NewTicker(duration)
|
||||
var ticker = time.NewTicker(duration)
|
||||
for range ticker.C {
|
||||
err := service.dumpServerHTTPStats()
|
||||
if err != nil {
|
||||
@@ -69,11 +69,11 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 地区
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPCountryStatMap
|
||||
var m = serverHTTPCountryStatMap
|
||||
serverHTTPCountryStatMap = map[string]*TrafficStat{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, stat := range m {
|
||||
pieces := strings.Split(k, "@")
|
||||
var pieces = strings.Split(k, "@")
|
||||
if len(pieces) != 3 {
|
||||
continue
|
||||
}
|
||||
@@ -101,7 +101,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 省份
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPProvinceStatMap
|
||||
var m = serverHTTPProvinceStatMap
|
||||
serverHTTPProvinceStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, count := range m {
|
||||
@@ -119,7 +119,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 城市
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPCityStatMap
|
||||
var m = serverHTTPCityStatMap
|
||||
serverHTTPCityStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, countRequests := range m {
|
||||
@@ -137,7 +137,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 运营商
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPProviderStatMap
|
||||
var m = serverHTTPProviderStatMap
|
||||
serverHTTPProviderStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, count := range m {
|
||||
@@ -155,7 +155,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 操作系统
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPSystemStatMap
|
||||
var m = serverHTTPSystemStatMap
|
||||
serverHTTPSystemStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, count := range m {
|
||||
@@ -173,7 +173,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 浏览器
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPBrowserStatMap
|
||||
var m = serverHTTPBrowserStatMap
|
||||
serverHTTPBrowserStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, count := range m {
|
||||
@@ -191,7 +191,7 @@ func (this *ServerService) dumpServerHTTPStats() error {
|
||||
// 防火墙
|
||||
{
|
||||
serverStatLocker.Lock()
|
||||
m := serverHTTPFirewallRuleGroupStatMap
|
||||
var m = serverHTTPFirewallRuleGroupStatMap
|
||||
serverHTTPFirewallRuleGroupStatMap = map[string]int64{}
|
||||
serverStatLocker.Unlock()
|
||||
for k, count := range m {
|
||||
|
||||
@@ -19,17 +19,17 @@ func TestServerService_UploadServerHTTPRequestStat(t *testing.T) {
|
||||
RegionCities: []*pb.UploadServerHTTPRequestStatRequest_RegionCity{
|
||||
{
|
||||
ServerId: 1,
|
||||
CountryName: "中国",
|
||||
ProvinceName: "安徽省",
|
||||
CityName: "阜阳市",
|
||||
CountryId: 1, // 中国
|
||||
ProvinceId: 12, // 安徽省
|
||||
CityId: 108, // 阜阳市
|
||||
CountRequests: 1,
|
||||
},
|
||||
},
|
||||
RegionProviders: []*pb.UploadServerHTTPRequestStatRequest_RegionProvider{
|
||||
{
|
||||
ServerId: 1,
|
||||
Name: "电信",
|
||||
Count: 1,
|
||||
ServerId: 1,
|
||||
ProviderId: 1, // 电信
|
||||
Count: 1,
|
||||
},
|
||||
},
|
||||
Systems: []*pb.UploadServerHTTPRequestStatRequest_System{
|
||||
|
||||
Reference in New Issue
Block a user