zhangzengfei
2024-12-20 99bce33a987cb389b1867e1224bef5331e6229a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package cron
 
import (
    "time"
 
    "github.com/go-co-op/gocron"
 
    "model-engine/models"
    "model-engine/pkg/logger"
    "model-engine/pkg/safe"
    "model-engine/service"
)
 
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
        }
 
        t := task
        safe.Go(func() {
            if err := model.Init(t); err != nil {
                logger.Warnf("Init task %s. %s", t.Name, err.Error())
                return
            }
 
            model.KeepAlive()
 
            if err := model.Run(); err != nil {
                logger.Warnf("Run task %s. %s", t.Name, err.Error())
                return
            }
            if err := model.Shutdown(); err != nil {
                return
            }
        })
    }
}
 
func Run() (err error) {
    _, err = s.Every(10).Minute().StartImmediately().Do(Dispatch)
    if err != nil {
        return err
    }
 
    s.StartAsync()
    return nil
}