优化统计性能

This commit is contained in:
GoEdgeLab
2023-04-07 11:23:37 +08:00
parent 93c5d03a49
commit 6c6317af56
4 changed files with 49 additions and 15 deletions

View File

@@ -11,6 +11,7 @@ import (
"github.com/TeaOSLab/EdgeNode/internal/goman" "github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/remotelogs"
"github.com/TeaOSLab/EdgeNode/internal/rpc" "github.com/TeaOSLab/EdgeNode/internal/rpc"
"github.com/TeaOSLab/EdgeNode/internal/utils"
"github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/logs"
"github.com/iwind/TeaGo/types" "github.com/iwind/TeaGo/types"
@@ -184,10 +185,9 @@ func (this *BandwidthStatManager) AddBandwidth(userId int64, serverId int64, pee
return return
} }
var now = time.Now() var timestamp = utils.UnixTime() / bandwidthTimestampDelim * bandwidthTimestampDelim // 将时间戳均分成N等份
var timestamp = now.Unix() / bandwidthTimestampDelim * bandwidthTimestampDelim // 将时间戳均分成N等份 var day = utils.Ymd()
var day = timeutil.Format("Ymd", now) var timeAt = utils.Round5Hi()
var timeAt = timeutil.FormatTime("Hi", now.Unix()/300*300)
var key = types.String(serverId) + "@" + day + "@" + timeAt var key = types.String(serverId) + "@" + day + "@" + timeAt
// 增加TCP Header尺寸这里默认MTU为1500且默认为IPv4 // 增加TCP Header尺寸这里默认MTU为1500且默认为IPv4
@@ -230,9 +230,8 @@ func (this *BandwidthStatManager) AddBandwidth(userId int64, serverId int64, pee
// AddTraffic 添加请求数据 // AddTraffic 添加请求数据
func (this *BandwidthStatManager) AddTraffic(serverId int64, cachedBytes int64, countRequests int64, countCachedRequests int64, countAttacks int64, attackBytes int64) { func (this *BandwidthStatManager) AddTraffic(serverId int64, cachedBytes int64, countRequests int64, countCachedRequests int64, countAttacks int64, attackBytes int64) {
var now = time.Now() var day = utils.Ymd()
var day = timeutil.Format("Ymd", now) var timeAt = utils.Round5Hi()
var timeAt = timeutil.FormatTime("Hi", now.Unix()/300*300)
var key = types.String(serverId) + "@" + day + "@" + timeAt var key = types.String(serverId) + "@" + day + "@" + timeAt
this.locker.Lock() this.locker.Lock()
// 只有有记录了才会添加 // 只有有记录了才会添加

View File

@@ -34,6 +34,17 @@ func TestBandwidthStatManager_Loop(t *testing.T) {
} }
} }
func BenchmarkBandwidthStatManager_Add(b *testing.B) {
var manager = stats.NewBandwidthStatManager()
b.RunParallel(func(pb *testing.PB) {
var i int
for pb.Next() {
i++
manager.AddBandwidth(1, int64(i%100), 10, 10)
}
})
}
func BenchmarkBandwidthStatManager_Slice(b *testing.B) { func BenchmarkBandwidthStatManager_Slice(b *testing.B) {
runtime.GOMAXPROCS(1) runtime.GOMAXPROCS(1)

View File

@@ -4,12 +4,15 @@ import (
teaconst "github.com/TeaOSLab/EdgeNode/internal/const" teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
"github.com/TeaOSLab/EdgeNode/internal/goman" "github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/iwind/TeaGo/types" "github.com/iwind/TeaGo/types"
timeutil "github.com/iwind/TeaGo/utils/time"
"time" "time"
) )
var unixTime = time.Now().Unix() var unixTime = time.Now().Unix()
var unixTimeMilli = time.Now().UnixMilli() var unixTimeMilli = time.Now().UnixMilli()
var unixTimeMilliString = types.String(unixTimeMilli) var unixTimeMilliString = types.String(unixTimeMilli)
var ymd = timeutil.Format("Ymd")
var round5Hi = timeutil.FormatTime("Hi", time.Now().Unix()/300*300)
func init() { func init() {
if !teaconst.IsMain { if !teaconst.IsMain {
@@ -22,6 +25,8 @@ func init() {
unixTime = time.Now().Unix() unixTime = time.Now().Unix()
unixTimeMilli = time.Now().UnixMilli() unixTimeMilli = time.Now().UnixMilli()
unixTimeMilliString = types.String(unixTimeMilli) unixTimeMilliString = types.String(unixTimeMilli)
ymd = timeutil.Format("Ymd")
round5Hi = timeutil.FormatTime("Hi", time.Now().Unix()/300*300)
} }
}) })
} }
@@ -66,3 +71,13 @@ func GMTTime(t time.Time) time.Time {
_, offset := time.Now().Zone() _, offset := time.Now().Zone()
return t.Add(-time.Duration(offset) * time.Second) return t.Add(-time.Duration(offset) * time.Second)
} }
// Ymd 读取YYYYMMDD
func Ymd() string {
return ymd
}
// Round5Hi 读取5分钟间隔时间
func Round5Hi() string {
return round5Hi
}

View File

@@ -1,6 +1,7 @@
package utils package utils_test
import ( import (
"github.com/TeaOSLab/EdgeNode/internal/utils"
timeutil "github.com/iwind/TeaGo/utils/time" timeutil "github.com/iwind/TeaGo/utils/time"
"testing" "testing"
"time" "time"
@@ -8,23 +9,31 @@ import (
func TestUnixTime(t *testing.T) { func TestUnixTime(t *testing.T) {
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
t.Log(UnixTime(), "real:", time.Now().Unix()) t.Log(utils.UnixTime(), "real:", time.Now().Unix())
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
} }
} }
func TestGMTUnixTime(t *testing.T) { func TestGMTUnixTime(t *testing.T) {
t.Log(GMTUnixTime(time.Now().Unix())) t.Log(utils.GMTUnixTime(time.Now().Unix()))
} }
func TestGMTTime(t *testing.T) { func TestGMTTime(t *testing.T) {
t.Log(GMTTime(time.Now())) t.Log(utils.GMTTime(time.Now()))
} }
func TestFloorUnixTime(t *testing.T) { func TestFloorUnixTime(t *testing.T) {
var timestamp = time.Now().Unix() var timestamp = time.Now().Unix()
t.Log("floor 60:", timestamp, FloorUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(60))) t.Log("floor 60:", timestamp, utils.FloorUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", utils.FloorUnixTime(60)))
t.Log("ceil 60:", timestamp, CeilUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", CeilUnixTime(60))) t.Log("ceil 60:", timestamp, utils.CeilUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", utils.CeilUnixTime(60)))
t.Log("floor 300:", timestamp, FloorUnixTime(300), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(300))) t.Log("floor 300:", timestamp, utils.FloorUnixTime(300), timeutil.FormatTime("Y-m-d H:i:s", utils.FloorUnixTime(300)))
t.Log("next minute:", NextMinuteUnixTime()) t.Log("next minute:", utils.NextMinuteUnixTime())
}
func TestYmd(t *testing.T) {
t.Log(utils.Ymd())
}
func TestRound5Hi(t *testing.T) {
t.Log(utils.Round5Hi())
} }