init.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package jobs
  2. import (
  3. "IotAdmin/common/jobs/models"
  4. "IotAdmin/core/sdk"
  5. "IotAdmin/core/sdk/pkg/cronjob"
  6. "gorm.io/gorm"
  7. )
  8. func init() {
  9. jobList = make(map[string]JobExec)
  10. }
  11. var (
  12. // jobList 定义的job
  13. jobList map[string]JobExec
  14. )
  15. // InitJob 初始化job
  16. func InitJob() {
  17. initJobList()
  18. Setup(sdk.Runtime.GetDb())
  19. }
  20. // 需要将定义的struct 添加到字典中;
  21. // 字典 key 可以配置到 自动任务 调用目标 中;
  22. func initJobList() {
  23. }
  24. func AddJobs(mp map[string]JobExec) {
  25. for k, v := range mp {
  26. jobList[k] = v
  27. }
  28. }
  29. // Setup 初始化
  30. func Setup(dbs map[string]*gorm.DB) {
  31. jobLogger.Info("STARTING...")
  32. for k, db := range dbs {
  33. sdk.Runtime.SetCrontab(k, cronjob.NewWithSecondsLogger(jobLogger))
  34. setup(k, db)
  35. }
  36. }
  37. func setup(key string, db *gorm.DB) {
  38. crontab := sdk.Runtime.GetCrontabKey(key)
  39. sysJob := models.SysJob{}
  40. jobList := make([]models.SysJob, 0)
  41. err := sysJob.GetList(db, &jobList)
  42. if err != nil {
  43. jobLogger.Errorf("INIT [%s] ERROR: %s", key, err.Error())
  44. }
  45. if len(jobList) == 0 {
  46. jobLogger.Infof("TOTAL:0")
  47. }
  48. _, err = sysJob.RemoveAllEntryID(db)
  49. if err != nil {
  50. jobLogger.Errorf("REMOVE ALL ENTRY [%s] ERROR: %s", key, err.Error())
  51. }
  52. for i := 0; i < len(jobList); i++ {
  53. if jobList[i].JobType == 1 {
  54. j := &HttpJob{}
  55. j.InvokeTarget = jobList[i].InvokeTarget
  56. j.CronExpression = jobList[i].CronExpression
  57. j.JobId = jobList[i].JobId
  58. j.Name = jobList[i].JobName
  59. j.DbKey = key
  60. j.Logger = jobLogger
  61. sysJob.EntryId, err = AddJob(crontab, j)
  62. } else if jobList[i].JobType == 2 {
  63. j := &ExecJob{}
  64. j.InvokeTarget = jobList[i].InvokeTarget
  65. j.CronExpression = jobList[i].CronExpression
  66. j.JobId = jobList[i].JobId
  67. j.Name = jobList[i].JobName
  68. j.Args = jobList[i].Args
  69. j.DbKey = key
  70. j.Logger = jobLogger
  71. sysJob.EntryId, err = AddJob(crontab, j)
  72. }
  73. jobLogger.Infof("ADD JOB: %s", jobList[i].JobName)
  74. err = sysJob.Update(db, jobList[i].JobId)
  75. }
  76. // 启动任务
  77. crontab.Start()
  78. jobLogger.Infof("START [%s] SUCCESS", key)
  79. // 关闭任务
  80. defer func() {
  81. jobLogger.Infof("STOP [%s]\r\n\r\n", key)
  82. crontab.Stop()
  83. }()
  84. select {}
  85. }
  86. // GetJobKeys 获取job key列表
  87. func GetJobKeys() map[string]string {
  88. var mp = make(map[string]string)
  89. for k, v := range jobList {
  90. mp[k] = v.GetName()
  91. }
  92. return mp
  93. }