package cron
|
|
import (
|
"github.com/go-co-op/gocron"
|
"model-engine/models"
|
"model-engine/pkg/logger"
|
"model-engine/pkg/safe"
|
"model-engine/service"
|
"time"
|
)
|
|
var s *gocron.Scheduler
|
|
func init() {
|
s = gocron.NewScheduler(time.Local)
|
}
|
|
func Dispatch() {
|
tasks, err := service.GetTasks()
|
if err != nil {
|
panic(err)
|
}
|
for _, task := range tasks {
|
model, err := models.GetModel(task.ModelID)
|
if err != nil {
|
logger.Errorf("can not find model for id:%v", task.ModelID)
|
continue
|
}
|
task := task
|
safe.Go(func() {
|
if err := model.Init(task); err != nil {
|
return
|
}
|
if err := model.Run(); err != nil {
|
return
|
}
|
if err := model.Shutdown(); err != nil {
|
return
|
}
|
})
|
}
|
}
|
|
func Run() (err error) {
|
_, err = s.Every(1).Minute().StartImmediately().Do(Dispatch)
|
if err != nil {
|
return err
|
}
|
|
s.StartAsync()
|
return nil
|
}
|