mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-12 22:40:25 +08:00
优化统计性能
This commit is contained in:
@@ -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()
|
||||||
// 只有有记录了才会添加
|
// 只有有记录了才会添加
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user