forked from all_user/stat_center
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package cacheSer
|
|
|
|
import (
|
|
"runtime"
|
|
"stat/common/log"
|
|
"stat/common/redis"
|
|
"stat/common/statutils"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/robfig/cron/v3"
|
|
|
|
"github.com/patrickmn/go-cache"
|
|
)
|
|
|
|
type IpStatCache struct {
|
|
Lock sync.RWMutex
|
|
IpLimitBucketTopToday redis.BucketList
|
|
IpLimitBucketTopYesterday redis.BucketList
|
|
}
|
|
|
|
var (
|
|
Cache *cache.Cache
|
|
IpLimitStatCache = IpStatCache{
|
|
IpLimitBucketTopToday: make(redis.BucketList, 0),
|
|
IpLimitBucketTopYesterday: make(redis.BucketList, 0),
|
|
}
|
|
Writers struct {
|
|
LandPageVisitWriter BaseWriter
|
|
LandPageClickWriter BaseWriter
|
|
}
|
|
_cron *cron.Cron
|
|
)
|
|
|
|
func Init() {
|
|
Cache = cache.New(10*time.Minute, 10*time.Minute)
|
|
Writers.LandPageVisitWriter = NewWriter(landPageVisitSync)
|
|
Writers.LandPageClickWriter = NewWriter(landPageClickSync)
|
|
_cron = cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(&log.Logger{}))) // 秒级定时任务
|
|
_, _ = _cron.AddFunc("*/5 * * * * ?", func() {
|
|
err := statutils.ServerMon.RunWithName(SyncWriters, statutils.GetFuncName(SyncWriters))
|
|
if err != nil {
|
|
log.Error("SyncWriters err", log.E(err))
|
|
}
|
|
})
|
|
_cron.Start()
|
|
}
|
|
|
|
func SyncWriters() error {
|
|
err := Writers.LandPageVisitWriter.Sync()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return Writers.LandPageClickWriter.Sync()
|
|
}
|
|
|
|
func Key(key string) string {
|
|
pc, _, _, _ := runtime.Caller(1)
|
|
return runtime.FuncForPC(pc).Name() + "##" + key
|
|
}
|