cron.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package oncron
  2. import (
  3. "github.com/OliveTin/OliveTin/internal/auth"
  4. "github.com/OliveTin/OliveTin/internal/config"
  5. "github.com/OliveTin/OliveTin/internal/executor"
  6. "github.com/robfig/cron/v3"
  7. log "github.com/sirupsen/logrus"
  8. )
  9. func Schedule(cfg *config.Config, ex *executor.Executor) {
  10. var scheduler *cron.Cron
  11. if cfg.CronSupportForSeconds {
  12. scheduler = cron.New(cron.WithSeconds())
  13. } else {
  14. scheduler = cron.New()
  15. }
  16. for _, action := range cfg.Actions {
  17. for _, cronline := range action.ExecOnCron {
  18. scheduleAction(cfg, scheduler, cronline, ex, action)
  19. }
  20. }
  21. scheduler.Start()
  22. }
  23. func scheduleAction(cfg *config.Config, scheduler *cron.Cron, cronline string, ex *executor.Executor, action *config.Action) {
  24. log.WithFields(log.Fields{
  25. "action": action.Title,
  26. "cronline": cronline,
  27. }).Infof("Scheduling Action for cron")
  28. _, err := scheduler.AddFunc(cronline, func() {
  29. req := &executor.ExecutionRequest{
  30. Binding: ex.FindBindingWithNoEntity(action),
  31. Cfg: cfg,
  32. Tags: []string{},
  33. AuthenticatedUser: auth.UserFromSystem(cfg, "cron"),
  34. }
  35. ex.ExecRequest(req)
  36. })
  37. if err != nil {
  38. log.WithFields(log.Fields{
  39. "action": action.Title,
  40. "cronError": err,
  41. }).Errorf("CRON schedule error")
  42. return
  43. }
  44. }