init.go 2.0 KB

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