Files
OliveTin/internal/oncron/cron.go
2023-02-03 08:53:10 +00:00

51 lines
1.1 KiB
Go

package oncron
import (
"github.com/OliveTin/OliveTin/internal/acl"
"github.com/OliveTin/OliveTin/internal/config"
"github.com/OliveTin/OliveTin/internal/executor"
"github.com/robfig/cron/v3"
log "github.com/sirupsen/logrus"
)
func Schedule(cfg *config.Config, ex *executor.Executor) {
scheduler := cron.New(cron.WithSeconds())
for _, action := range cfg.Actions {
for _, cronline := range action.ExecOnCron {
scheduleAction(cfg, scheduler, cronline, ex, action)
}
}
scheduler.Start()
}
func scheduleAction(cfg *config.Config, scheduler *cron.Cron, cronline string, ex *executor.Executor, action config.Action) {
log.WithFields(log.Fields{
"action": action.Title,
"cronline": cronline,
}).Infof("Scheduling Action for cron")
_, err := scheduler.AddFunc(cronline, func() {
req := &executor.ExecutionRequest{
ActionName: action.Title,
Cfg: cfg,
Tags: []string{"cron"},
AuthenticatedUser: &acl.AuthenticatedUser{
Username: "cron",
},
}
ex.ExecRequest(req)
})
if err != nil {
log.WithFields(log.Fields{
"action": action.Title,
"cronError": err,
}).Errorf("CRON schedule error")
return
}
}