cron.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package oncron
  2. import (
  3. "github.com/OliveTin/OliveTin/internal/acl"
  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. scheduler := cron.New(cron.WithSeconds())
  11. for _, action := range cfg.Actions {
  12. for _, cronline := range action.ExecOnCron {
  13. scheduleAction(cfg, scheduler, cronline, ex, action)
  14. }
  15. }
  16. scheduler.Start()
  17. }
  18. func scheduleAction(cfg *config.Config, scheduler *cron.Cron, cronline string, ex *executor.Executor, action config.Action) {
  19. log.WithFields(log.Fields{
  20. "action": action.Title,
  21. "cronline": cronline,
  22. }).Infof("Scheduling Action for cron")
  23. _, err := scheduler.AddFunc(cronline, func() {
  24. req := &executor.ExecutionRequest{
  25. ActionName: action.Title,
  26. Cfg: cfg,
  27. Tags: []string{"cron"},
  28. AuthenticatedUser: &acl.AuthenticatedUser{
  29. Username: "cron",
  30. },
  31. }
  32. ex.ExecRequest(req)
  33. })
  34. if err != nil {
  35. log.WithFields(log.Fields{
  36. "action": action.Title,
  37. "cronError": err,
  38. }).Errorf("CRON schedule error")
  39. return
  40. }
  41. }