package main import ( "fmt" "io/ioutil" "jygit.jydev.jianyu360.cn/data_processing/common_utils/udp" "log" "net" "net/http" "project/config" "sync" "time" ) var udptaskmap = &sync.Map{} type udpNode struct { data []byte addr *net.UDPAddr timestamp int64 retry int } func checkMapJob() { //阿里云内网无法发送邮件 if config.Conf.Mail.Send { for { udptaskmap.Range(func(k, v interface{}) bool { now := time.Now().Unix() node, _ := v.(*udpNode) if now-node.timestamp > 120 { node.retry++ if node.retry > 5 { log.Println("udp重试失败", k) udptaskmap.Delete(k) 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))) if err == nil { defer res.Body.Close() read, err := ioutil.ReadAll(res.Body) log.Println("邮件发发送:", string(read), err) } } else { log.Println("udp重发", k) udpclient.WriteUdp(node.data, udp.OP_TYPE_DATA, node.addr) } } else if now-node.timestamp > 10 { log.Println("udp任务超时中..", k) } return true }) time.Sleep(60 * time.Second) } } }