diff --git a/internal/stats/bandwidth_stat_manager.go b/internal/stats/bandwidth_stat_manager.go index 9793869..8c12e30 100644 --- a/internal/stats/bandwidth_stat_manager.go +++ b/internal/stats/bandwidth_stat_manager.go @@ -11,6 +11,7 @@ import ( "github.com/TeaOSLab/EdgeNode/internal/goman" "github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/rpc" + "github.com/TeaOSLab/EdgeNode/internal/utils" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/types" @@ -184,10 +185,9 @@ func (this *BandwidthStatManager) AddBandwidth(userId int64, serverId int64, pee return } - var now = time.Now() - var timestamp = now.Unix() / bandwidthTimestampDelim * bandwidthTimestampDelim // 将时间戳均分成N等份 - var day = timeutil.Format("Ymd", now) - var timeAt = timeutil.FormatTime("Hi", now.Unix()/300*300) + var timestamp = utils.UnixTime() / bandwidthTimestampDelim * bandwidthTimestampDelim // 将时间戳均分成N等份 + var day = utils.Ymd() + var timeAt = utils.Round5Hi() var key = types.String(serverId) + "@" + day + "@" + timeAt // 增加TCP Header尺寸,这里默认MTU为1500,且默认为IPv4 @@ -230,9 +230,8 @@ func (this *BandwidthStatManager) AddBandwidth(userId int64, serverId int64, pee // AddTraffic 添加请求数据 func (this *BandwidthStatManager) AddTraffic(serverId int64, cachedBytes int64, countRequests int64, countCachedRequests int64, countAttacks int64, attackBytes int64) { - var now = time.Now() - var day = timeutil.Format("Ymd", now) - var timeAt = timeutil.FormatTime("Hi", now.Unix()/300*300) + var day = utils.Ymd() + var timeAt = utils.Round5Hi() var key = types.String(serverId) + "@" + day + "@" + timeAt this.locker.Lock() // 只有有记录了才会添加 diff --git a/internal/stats/bandwidth_stat_manager_test.go b/internal/stats/bandwidth_stat_manager_test.go index 43e403b..6b63dc9 100644 --- a/internal/stats/bandwidth_stat_manager_test.go +++ b/internal/stats/bandwidth_stat_manager_test.go @@ -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) { runtime.GOMAXPROCS(1) diff --git a/internal/utils/time.go b/internal/utils/time.go index 28fef32..0d872c8 100644 --- a/internal/utils/time.go +++ b/internal/utils/time.go @@ -4,12 +4,15 @@ import ( teaconst "github.com/TeaOSLab/EdgeNode/internal/const" "github.com/TeaOSLab/EdgeNode/internal/goman" "github.com/iwind/TeaGo/types" + timeutil "github.com/iwind/TeaGo/utils/time" "time" ) var unixTime = time.Now().Unix() var unixTimeMilli = time.Now().UnixMilli() var unixTimeMilliString = types.String(unixTimeMilli) +var ymd = timeutil.Format("Ymd") +var round5Hi = timeutil.FormatTime("Hi", time.Now().Unix()/300*300) func init() { if !teaconst.IsMain { @@ -22,6 +25,8 @@ func init() { unixTime = time.Now().Unix() unixTimeMilli = time.Now().UnixMilli() 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() return t.Add(-time.Duration(offset) * time.Second) } + +// Ymd 读取YYYYMMDD +func Ymd() string { + return ymd +} + +// Round5Hi 读取5分钟间隔时间 +func Round5Hi() string { + return round5Hi +} diff --git a/internal/utils/time_test.go b/internal/utils/time_test.go index 260b4f6..902654c 100644 --- a/internal/utils/time_test.go +++ b/internal/utils/time_test.go @@ -1,6 +1,7 @@ -package utils +package utils_test import ( + "github.com/TeaOSLab/EdgeNode/internal/utils" timeutil "github.com/iwind/TeaGo/utils/time" "testing" "time" @@ -8,23 +9,31 @@ import ( func TestUnixTime(t *testing.T) { 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) } } func TestGMTUnixTime(t *testing.T) { - t.Log(GMTUnixTime(time.Now().Unix())) + t.Log(utils.GMTUnixTime(time.Now().Unix())) } func TestGMTTime(t *testing.T) { - t.Log(GMTTime(time.Now())) + t.Log(utils.GMTTime(time.Now())) } func TestFloorUnixTime(t *testing.T) { var timestamp = time.Now().Unix() - t.Log("floor 60:", timestamp, FloorUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(60))) - t.Log("ceil 60:", timestamp, CeilUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", CeilUnixTime(60))) - t.Log("floor 300:", timestamp, FloorUnixTime(300), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(300))) - t.Log("next minute:", NextMinuteUnixTime()) + t.Log("floor 60:", timestamp, utils.FloorUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", utils.FloorUnixTime(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, utils.FloorUnixTime(300), timeutil.FormatTime("Y-m-d H:i:s", utils.FloorUnixTime(300))) + t.Log("next minute:", utils.NextMinuteUnixTime()) +} + +func TestYmd(t *testing.T) { + t.Log(utils.Ymd()) +} + +func TestRound5Hi(t *testing.T) { + t.Log(utils.Round5Hi()) }