udptaskmap.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "jygit.jydev.jianyu360.cn/data_processing/common_utils/udp"
  6. "log"
  7. "net"
  8. "net/http"
  9. "project/config"
  10. "sync"
  11. "time"
  12. )
  13. var udptaskmap = &sync.Map{}
  14. type udpNode struct {
  15. data []byte
  16. addr *net.UDPAddr
  17. timestamp int64
  18. retry int
  19. }
  20. func checkMapJob() {
  21. //阿里云内网无法发送邮件
  22. if config.Conf.Mail.Send {
  23. for {
  24. udptaskmap.Range(func(k, v interface{}) bool {
  25. now := time.Now().Unix()
  26. node, _ := v.(*udpNode)
  27. if now-node.timestamp > 120 {
  28. node.retry++
  29. if node.retry > 5 {
  30. log.Println("udp重试失败", k)
  31. udptaskmap.Delete(k)
  32. res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", config.Conf.Mail.Api, config.Conf.Mail.To, "project-send-fail", k.(string)))
  33. if err == nil {
  34. defer res.Body.Close()
  35. read, err := ioutil.ReadAll(res.Body)
  36. log.Println("邮件发发送:", string(read), err)
  37. }
  38. } else {
  39. log.Println("udp重发", k)
  40. udpclient.WriteUdp(node.data, udp.OP_TYPE_DATA, node.addr)
  41. }
  42. } else if now-node.timestamp > 10 {
  43. log.Println("udp任务超时中..", k)
  44. }
  45. return true
  46. })
  47. time.Sleep(60 * time.Second)
  48. }
  49. }
  50. }