task.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package server
  2. import (
  3. "context"
  4. "github.com/go-co-op/gocron"
  5. "github.com/go-nunu/nunu-layout-advanced/internal/task"
  6. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  7. "go.uber.org/zap"
  8. "time"
  9. )
  10. type TaskServer struct {
  11. log *log.Logger
  12. scheduler *gocron.Scheduler
  13. userTask task.UserTask
  14. gameShieldTask task.GameShieldTask
  15. wafTask task.WafTask
  16. }
  17. func NewTaskServer(
  18. log *log.Logger,
  19. userTask task.UserTask,
  20. gameShieldTask task.GameShieldTask,
  21. wafTask task.WafTask,
  22. ) *TaskServer {
  23. return &TaskServer{
  24. log: log,
  25. userTask: userTask,
  26. gameShieldTask: gameShieldTask,
  27. wafTask: wafTask,
  28. }
  29. }
  30. func (t *TaskServer) Start(ctx context.Context) error {
  31. gocron.SetPanicHandler(func(jobName string, recoverData interface{}) {
  32. t.log.Error("TaskServer Panic", zap.String("job", jobName), zap.Any("recover", recoverData))
  33. })
  34. // eg: crontab task
  35. t.scheduler = gocron.NewScheduler(time.UTC)
  36. // if you are in China, you will need to change the time zone as follows
  37. // t.scheduler = gocron.NewScheduler(time.FixedZone("PRC", 8*60*60))
  38. //_, err := t.scheduler.Every("3s").Do(func()
  39. //_, err := t.scheduler.CronWithSeconds("0/3 * * * * *").Do(func() {
  40. // err := t.userTask.CheckUser(ctx)
  41. // if err != nil {
  42. // t.log.Error("CheckUser error", zap.Error(err))
  43. // }
  44. //})
  45. //if err != nil {
  46. // t.log.Error("CheckUser error", zap.Error(err))
  47. //}
  48. // 添加游戏盾检查任务 - 每1小时执行
  49. //_, err := t.scheduler.Cron("0 */1 * * *").Do(func() {
  50. // err := t.gameShieldTask.CheckGameShield(ctx)
  51. // if err != nil {
  52. // t.log.Error("CheckGameShield error", zap.Error(err))
  53. // }
  54. //})
  55. //if err != nil {
  56. // t.log.Error("Register CheckGameShield task error", zap.Error(err))
  57. //}
  58. //
  59. //// 添加游戏盾数据同步任务 - 每天凌晨3点执行
  60. //_, err = t.scheduler.Cron("0 3 * * *").Do(func() {
  61. // err := t.gameShieldTask.SyncAllExpireTimeFromHost(ctx)
  62. // if err != nil {
  63. // t.log.Error("SyncAllExpireTimeFromHost error", zap.Error(err))
  64. // }
  65. //})
  66. //if err != nil {
  67. // t.log.Error("Register SyncAllExpireTimeFromHost task error", zap.Error(err))
  68. //}
  69. //_, err := t.scheduler.Cron("* * * * *").Do(func() {
  70. // err := t.wafTask.SynchronizationTime(ctx)
  71. // if err != nil {
  72. // t.log.Error("同步到期时间失败", zap.Error(err))
  73. // }
  74. //})
  75. //if err != nil {
  76. // t.log.Error("同步到期时间注册任务失败", zap.Error(err))
  77. //}
  78. //
  79. //_, err = t.scheduler.Cron("* * * * *").Do(func() {
  80. // err := t.wafTask.StopPlan(ctx)
  81. // if err != nil {
  82. // t.log.Error("停止套餐失败", zap.Error(err))
  83. // }
  84. //})
  85. //if err != nil {
  86. // t.log.Error("停止套餐注册任务失败", zap.Error(err))
  87. //}
  88. //
  89. //
  90. //_, err = t.scheduler.Cron("* * * * *").Do(func() {
  91. // err := t.wafTask.RecoverStopPlan(ctx)
  92. // if err != nil {
  93. // t.log.Error("续费失败", zap.Error(err))
  94. // }
  95. //})
  96. //if err != nil {
  97. // t.log.Error("续费注册任务失败", zap.Error(err))
  98. //}
  99. // 使用非阻塞方式启动调度器,添加一条日志表明任务服务已启动
  100. t.scheduler.StartAsync()
  101. t.log.Info("task server starting...")
  102. return nil
  103. }
  104. func (t *TaskServer) Stop(ctx context.Context) error {
  105. t.scheduler.Stop()
  106. t.log.Info("TaskServer stop...")
  107. return nil
  108. }