123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package server
- import (
- "context"
- "github.com/go-co-op/gocron"
- "github.com/go-nunu/nunu-layout-advanced/internal/task"
- "github.com/go-nunu/nunu-layout-advanced/pkg/log"
- "go.uber.org/zap"
- "time"
- )
- type TaskServer struct {
- log *log.Logger
- scheduler *gocron.Scheduler
- userTask task.UserTask
- gameShieldTask task.GameShieldTask
- wafTask task.WafTask
- }
- func NewTaskServer(
- log *log.Logger,
- userTask task.UserTask,
- gameShieldTask task.GameShieldTask,
- wafTask task.WafTask,
- ) *TaskServer {
- return &TaskServer{
- log: log,
- userTask: userTask,
- gameShieldTask: gameShieldTask,
- wafTask: wafTask,
- }
- }
- func (t *TaskServer) Start(ctx context.Context) error {
- gocron.SetPanicHandler(func(jobName string, recoverData interface{}) {
- t.log.Error("TaskServer Panic", zap.String("job", jobName), zap.Any("recover", recoverData))
- })
- // eg: crontab task
- t.scheduler = gocron.NewScheduler(time.UTC)
- // if you are in China, you will need to change the time zone as follows
- // t.scheduler = gocron.NewScheduler(time.FixedZone("PRC", 8*60*60))
- //_, err := t.scheduler.Every("3s").Do(func()
- //_, err := t.scheduler.CronWithSeconds("0/3 * * * * *").Do(func() {
- // err := t.userTask.CheckUser(ctx)
- // if err != nil {
- // t.log.Error("CheckUser error", zap.Error(err))
- // }
- //})
- //if err != nil {
- // t.log.Error("CheckUser error", zap.Error(err))
- //}
- // 添加游戏盾检查任务 - 每1小时执行
- //_, err := t.scheduler.Cron("0 */1 * * *").Do(func() {
- // err := t.gameShieldTask.CheckGameShield(ctx)
- // if err != nil {
- // t.log.Error("CheckGameShield error", zap.Error(err))
- // }
- //})
- //if err != nil {
- // t.log.Error("Register CheckGameShield task error", zap.Error(err))
- //}
- //
- //// 添加游戏盾数据同步任务 - 每天凌晨3点执行
- //_, err = t.scheduler.Cron("0 3 * * *").Do(func() {
- // err := t.gameShieldTask.SyncAllExpireTimeFromHost(ctx)
- // if err != nil {
- // t.log.Error("SyncAllExpireTimeFromHost error", zap.Error(err))
- // }
- //})
- //if err != nil {
- // t.log.Error("Register SyncAllExpireTimeFromHost task error", zap.Error(err))
- //}
- _, err := t.scheduler.Cron("* 1 * * *").Do(func() {
- err := t.wafTask.SynchronizationTime(ctx)
- if err != nil {
- t.log.Error("同步到期时间失败", zap.Error(err))
- }
- })
- if err != nil {
- t.log.Error("同步到期时间注册任务失败", zap.Error(err))
- }
- _, err = t.scheduler.Cron("* 1 * * *").Do(func() {
- err := t.wafTask.StopPlan(ctx)
- if err != nil {
- t.log.Error("停止套餐失败", zap.Error(err))
- }
- })
- if err != nil {
- t.log.Error("停止套餐注册任务失败", zap.Error(err))
- }
- _, err = t.scheduler.Cron("* 1 * * *").Do(func() {
- err := t.wafTask.RecoverRecentPlan(ctx)
- if err != nil {
- t.log.Error("续费失败", zap.Error(err))
- }
- })
- if err != nil {
- t.log.Error("续费注册任务失败", zap.Error(err))
- }
- _, err = t.scheduler.Cron("* 1 * * *").Do(func() {
- err := t.wafTask.CleanUpStaleRecords(ctx)
- if err != nil {
- t.log.Error("续费失败", zap.Error(err))
- }
- })
- if err != nil {
- t.log.Error("续费注册任务失败", zap.Error(err))
- }
- // 使用非阻塞方式启动调度器,添加一条日志表明任务服务已启动
- t.scheduler.StartAsync()
- t.log.Info("task server starting...")
- return nil
- }
- func (t *TaskServer) Stop(ctx context.Context) error {
- t.scheduler.Stop()
- t.log.Info("TaskServer stop...")
- return nil
- }
|