package jobs import ( "IotAdmin/core/sdk/pkg" "time" "github.com/robfig/cron/v3" ) // HttpJob 任务类型 http type HttpJob struct { JobCore } // Run http 任务接口 func (h *HttpJob) Run() { startTime := time.Now() err := CallExec(h, &h.JobCore) // 结束时间 endTime := time.Now() // 执行时间 latencyTime := endTime.Sub(startTime) if err != nil { jobLogger.Errorf("%s EXEC ERROR , SPEND :%v, ERROR: %s", h.Name, latencyTime, err.Error()) return } jobLogger.Infof("%s EXEC SUCCESS , SPEND :%v", h.Name, latencyTime) return } func (h *HttpJob) Exec(jobCore *JobCore) (err error) { var count = 0 var str string /* 循环 */ LOOP: if count < retryCount { /* 跳过迭代 */ str, err = pkg.Get(h.InvokeTarget) if err != nil { // 如果失败暂停一段时间重试 jobLogger.Errorf("【%s】 EXEC FAILED! %s", h.Name, err.Error()) jobLogger.Infof("【%s】 RETRY AFTER %d SECONDS [%s]", h.Name, (count+1)*15, str) time.Sleep(time.Duration(count+1) * 15 * time.Second) count = count + 1 goto LOOP } } return } func (h *HttpJob) GetName() string { return "" } func (h *HttpJob) addJob(c *cron.Cron) (int, error) { id, err := c.AddJob(h.CronExpression, h) if err != nil { jobLogger.Errorf("ADDJOB ERROR: %s", err.Error()) return 0, err } EntryId := int(id) return EntryId, nil }