task.go 874 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package server
  2. import (
  3. "context"
  4. "github.com/go-co-op/gocron"
  5. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  6. "go.uber.org/zap"
  7. "time"
  8. )
  9. type Task struct {
  10. log *log.Logger
  11. scheduler *gocron.Scheduler
  12. }
  13. func NewTask(log *log.Logger) *Task {
  14. return &Task{
  15. log: log,
  16. }
  17. }
  18. func (t *Task) Start(ctx context.Context) error {
  19. // eg: crontab task
  20. t.scheduler = gocron.NewScheduler(time.UTC)
  21. _, err := t.scheduler.CronWithSeconds("0/3 * * * * *").Do(func() {
  22. t.log.Info("I'm a Task1.")
  23. })
  24. if err != nil {
  25. t.log.Error("Task1 error", zap.Error(err))
  26. }
  27. _, err = t.scheduler.Every("3s").Do(func() {
  28. t.log.Info("I'm a Task2.")
  29. })
  30. if err != nil {
  31. t.log.Error("Task2 error", zap.Error(err))
  32. }
  33. t.scheduler.StartBlocking()
  34. return nil
  35. }
  36. func (t *Task) Stop(ctx context.Context) error {
  37. t.scheduler.Stop()
  38. t.log.Info("Task stop...")
  39. return nil
  40. }