| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package jobs
- import (
- "IotAdmin/common/jobs/models"
- "IotAdmin/core/sdk"
- "IotAdmin/core/sdk/pkg/cronjob"
- "gorm.io/gorm"
- )
- func init() {
- jobList = make(map[string]JobExec)
- }
- var (
- // jobList 定义的job
- jobList map[string]JobExec
- )
- // InitJob 初始化job
- func InitJob() {
- initJobList()
- Setup(sdk.Runtime.GetDb())
- }
- // 需要将定义的struct 添加到字典中;
- // 字典 key 可以配置到 自动任务 调用目标 中;
- func initJobList() {
- }
- func AddJobs(mp map[string]JobExec) {
- for k, v := range mp {
- jobList[k] = v
- }
- }
- // Setup 初始化
- func Setup(dbs map[string]*gorm.DB) {
- jobLogger.Info("STARTING...")
- for k, db := range dbs {
- sdk.Runtime.SetCrontab(k, cronjob.NewWithSecondsLogger(jobLogger))
- setup(k, db)
- }
- }
- func setup(key string, db *gorm.DB) {
- crontab := sdk.Runtime.GetCrontabKey(key)
- sysJob := models.SysJob{}
- jobList := make([]models.SysJob, 0)
- err := sysJob.GetList(db, &jobList)
- if err != nil {
- jobLogger.Errorf("INIT [%s] ERROR: %s", key, err.Error())
- }
- if len(jobList) == 0 {
- jobLogger.Infof("TOTAL:0")
- }
- _, err = sysJob.RemoveAllEntryID(db)
- if err != nil {
- jobLogger.Errorf("REMOVE ALL ENTRY [%s] ERROR: %s", key, err.Error())
- }
- for i := 0; i < len(jobList); i++ {
- if jobList[i].JobType == 1 {
- j := &HttpJob{}
- j.InvokeTarget = jobList[i].InvokeTarget
- j.CronExpression = jobList[i].CronExpression
- j.JobId = jobList[i].JobId
- j.Name = jobList[i].JobName
- j.DbKey = key
- j.Logger = jobLogger
- sysJob.EntryId, err = AddJob(crontab, j)
- } else if jobList[i].JobType == 2 {
- j := &ExecJob{}
- j.InvokeTarget = jobList[i].InvokeTarget
- j.CronExpression = jobList[i].CronExpression
- j.JobId = jobList[i].JobId
- j.Name = jobList[i].JobName
- j.Args = jobList[i].Args
- j.DbKey = key
- j.Logger = jobLogger
- sysJob.EntryId, err = AddJob(crontab, j)
- }
- jobLogger.Infof("ADD JOB: %s", jobList[i].JobName)
- err = sysJob.Update(db, jobList[i].JobId)
- }
- // 启动任务
- crontab.Start()
- jobLogger.Infof("START [%s] SUCCESS", key)
- // 关闭任务
- defer func() {
- jobLogger.Infof("STOP [%s]\r\n\r\n", key)
- crontab.Stop()
- }()
- select {}
- }
- // GetJobKeys 获取job key列表
- func GetJobKeys() map[string]string {
- var mp = make(map[string]string)
- for k, v := range jobList {
- mp[k] = v.GetName()
- }
- return mp
- }
|