141 lines
3.6 KiB
Go
141 lines
3.6 KiB
Go
package skd
|
|
|
|
import (
|
|
"context"
|
|
"math/rand"
|
|
"stat/common/enum/consts"
|
|
"stat/common/log"
|
|
"stat/common/statutils"
|
|
"stat/skd/job/advertisejob"
|
|
applicationjob "stat/skd/job/application"
|
|
"stat/skd/job/blocstatdaily"
|
|
"stat/skd/job/blocstatdistrict"
|
|
"stat/skd/job/limitstat"
|
|
"stat/skd/job/statdaily"
|
|
"stat/skd/job/statdailyhour"
|
|
"stat/skd/job/statdistrict"
|
|
"stat/skd/job/stathour"
|
|
"stat/skd/job/statlandpage"
|
|
"stat/statg"
|
|
"time"
|
|
|
|
"github.com/robfig/cron/v3"
|
|
)
|
|
|
|
var (
|
|
skdCron *cron.Cron
|
|
)
|
|
|
|
func init() {
|
|
skdCron = cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(&log.Logger{}))) // 秒级定时任务
|
|
}
|
|
|
|
// Start 定时器任务启动
|
|
func Start() {
|
|
log.Info("skd start...")
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
if statg.Conf.RunMod != consts.RunModRelease {
|
|
return
|
|
}
|
|
|
|
// 获取默认统计开始日期
|
|
defaultStatDate, err := getDefaultStatDate()
|
|
if err != nil {
|
|
log.Error("defaultStatDate invalid", log.E(err))
|
|
return
|
|
}
|
|
|
|
if statg.Conf.RunMod == consts.RunModRelease {
|
|
// IP限制统计
|
|
_, _ = skdCron.AddFunc("0 5 */1 * * ?", func() {
|
|
statutils.ServerMon.Run(limitstat.IpAddressLimitStat)
|
|
})
|
|
// 广告点击统计
|
|
_, _ = skdCron.AddFunc("0 5 */1 * * ?", func() {
|
|
statutils.ServerMon.Run(advertisejob.StatAdvertiseHourStat)
|
|
})
|
|
// 落地页小时统计
|
|
_, _ = skdCron.AddFunc("0 28 */1 * * ?", func() {
|
|
defaultTime, _ := time.Parse(time.RFC3339, "2023-08-01T00:00:00+08:00")
|
|
statutils.ServerMon.Run1(statlandpage.RunStatHour, defaultTime)
|
|
})
|
|
// 落地页每日统计
|
|
_, _ = skdCron.AddFunc("0 40 0 * * ?", func() {
|
|
defaultTime, _ := time.Parse(time.RFC3339, "2023-08-01T00:00:00+08:00")
|
|
statutils.ServerMon.Run1(statlandpage.RunStatDaily, defaultTime)
|
|
})
|
|
// 日活统计,统计上一天日活,校正
|
|
_, _ = skdCron.AddFunc("0 35 0 * * ?", func() {
|
|
statutils.ServerMon.Run1(statdaily.RunStat, defaultStatDate)
|
|
|
|
if statg.Conf.ServerIndex.IsMadou() {
|
|
statutils.ServerMon.Run1(blocstatdaily.RunStat, defaultStatDate)
|
|
statutils.ServerMon.Run1(blocstatdistrict.RunStat, defaultStatDate)
|
|
}
|
|
})
|
|
|
|
// 日活统计,统计上一天日活,校正
|
|
if statg.Conf.ServerIndex.IsMadou() {
|
|
_, _ = skdCron.AddFunc("0 35 2 * * ?", func() {
|
|
statutils.ServerMon.Run1(statdistrict.RunStat, defaultStatDate)
|
|
})
|
|
}
|
|
|
|
// 日常统计数据、每小时数据
|
|
_, _ = skdCron.AddFunc("0 0/5 * * * ?", func() {
|
|
statutils.ServerMon.Run(statdaily.RunStatToday)
|
|
statutils.ServerMon.Run1(statdailyhour.RunStat, defaultStatDate)
|
|
})
|
|
|
|
// 统计首页曲线图
|
|
_, _ = skdCron.AddFunc("0 0/5 * * * ?", func() {
|
|
statutils.ServerMon.Run1(stathour.RunStat, defaultStatDate)
|
|
})
|
|
|
|
}
|
|
|
|
// 应用点击统计
|
|
id, err := skdCron.AddFunc("0 5 */1 * * ?", func() {
|
|
statutils.ServerMon.Run(applicationjob.StatAppHourClick)
|
|
})
|
|
|
|
// 过期广告
|
|
_, _ = skdCron.AddFunc("0 0 10 * * ?", func() {
|
|
statutils.ServerMon.Run(advertisejob.AdvertiseExpireSend)
|
|
})
|
|
|
|
// 过期应用检测告警
|
|
_, _ = skdCron.AddFunc("0 1 10 * * ?", func() {
|
|
statutils.ServerMon.Run(advertisejob.ApplicationExpireSend)
|
|
})
|
|
|
|
// 广告配置
|
|
skdCron.AddFunc("0 0/5 * * * ?", func() {
|
|
statutils.ServerMon.Run(advertisejob.LoadTgbotsend)
|
|
})
|
|
|
|
if err != nil {
|
|
log.Error("defaultStatDate invalid", log.E(err), log.Any("id", id))
|
|
return
|
|
}
|
|
skdCron.Start()
|
|
}
|
|
|
|
// Stop 定时器任务停止
|
|
func Stop() {
|
|
ctx := skdCron.Stop()
|
|
<-ctx.Done()
|
|
err := ctx.Err()
|
|
if err != nil && err != context.Canceled {
|
|
log.Error("skd job stop error", log.E(err))
|
|
return
|
|
}
|
|
log.Info("skd jobs end!", log.Any("end at", time.Now()))
|
|
}
|
|
|
|
func getDefaultStatDate() (time.Time, error) {
|
|
return time.ParseInLocation("2006-01-02", "2021-03-01", time.Local)
|
|
}
|