job_http.go 1.3 KB

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