task.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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("0 * * * *").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. _, err = t.scheduler.Cron("0 * * * *").Do(func() {
  79. err := t.wafTask.StopPlan(ctx)
  80. if err != nil {
  81. t.log.Error("停止套餐失败", zap.Error(err))
  82. }
  83. })
  84. if err != nil {
  85. t.log.Error("停止套餐注册任务失败", zap.Error(err))
  86. }
  87. _, err = t.scheduler.Cron("0 * * * *").Do(func() {
  88. err := t.wafTask.RecoverRecentPlan(ctx)
  89. if err != nil {
  90. t.log.Error("续费失败", zap.Error(err))
  91. }
  92. })
  93. if err != nil {
  94. t.log.Error("续费注册任务失败", zap.Error(err))
  95. }
  96. _, err = t.scheduler.Cron("0 * * * *").Do(func() {
  97. err := t.wafTask.CleanUpStaleRecords(ctx)
  98. if err != nil {
  99. t.log.Error("清理过期记录失败", zap.Error(err))
  100. }
  101. })
  102. if err != nil {
  103. t.log.Error("清理过期记录注册任务失败", zap.Error(err))
  104. }
  105. // 使用非阻塞方式启动调度器,添加一条日志表明任务服务已启动
  106. t.scheduler.StartAsync()
  107. t.log.Info("task server starting...")
  108. return nil
  109. }
  110. func (t *TaskServer) Stop(ctx context.Context) error {
  111. t.scheduler.Stop()
  112. t.log.Info("TaskServer stop...")
  113. return nil
  114. }