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 }