job_http.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package jobs
  2. import (
  3. log "IotAdmin/core/logger"
  4. "IotAdmin/core/sdk/pkg"
  5. "fmt"
  6. "time"
  7. "github.com/robfig/cron/v3"
  8. )
  9. // HttpJob 任务类型 http
  10. type HttpJob struct {
  11. JobCore
  12. }
  13. // Run http 任务接口
  14. func (h *HttpJob) Run() {
  15. startTime := time.Now()
  16. var count = 0
  17. var err error
  18. var str string
  19. /* 循环 */
  20. LOOP:
  21. if count < retryCount {
  22. /* 跳过迭代 */
  23. str, err = pkg.Get(h.InvokeTarget)
  24. if err != nil {
  25. // 如果失败暂停一段时间重试
  26. fmt.Println(time.Now().Format(timeFormat), " [ERROR] mission failed! ", err)
  27. fmt.Printf(time.Now().Format(timeFormat)+" [INFO] Retry after the task fails %d seconds! %s \n", (count+1)*5, str)
  28. time.Sleep(time.Duration(count+1) * 5 * time.Second)
  29. count = count + 1
  30. goto LOOP
  31. }
  32. }
  33. // 结束时间
  34. endTime := time.Now()
  35. // 执行时间
  36. latencyTime := endTime.Sub(startTime)
  37. //TODO: 待完善部分
  38. log.Infof("[Job] JobCore %s exec success , spend :%v", h.Name, latencyTime)
  39. return
  40. }
  41. func (h *HttpJob) addJob(c *cron.Cron) (int, error) {
  42. id, err := c.AddJob(h.CronExpression, h)
  43. if err != nil {
  44. fmt.Println(time.Now().Format(timeFormat), " [ERROR] JobCore AddJob error", err)
  45. return 0, err
  46. }
  47. EntryId := int(id)
  48. return EntryId, nil
  49. }