mirror of
https://github.com/OliveTin/OliveTin
synced 2025-12-12 00:55:34 +00:00
51 lines
1.1 KiB
Go
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
|
|
}
|
|
|
|
}
|