job_http.go 1.1 KB

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