package main import ( "fmt" "io/ioutil" "log" "net" "net/http" "strings" "sync" "time" ) var udptaskmap = &sync.Map{} var tomail string var api string type udpNode struct { data []byte addr *net.UDPAddr timestamp int64 retry int } func checkMapJob() { //阿里云内网无法发送邮件 jkmail, _ := Sysconfig["jkmail"].(map[string]interface{}) if jkmail != nil { tomail, _ = jkmail["to"].(string) api, _ = jkmail["api"].(string) } log.Println("start checkMapJob", tomail, Sysconfig["jkmail"]) for { udptaskmap.Range(func(k, v interface{}) bool { now := time.Now().Unix() node, _ := v.(*udpNode) if now-node.timestamp > 120 { udptaskmap.Delete(k) info_str := "" if strings.Contains(k.(string),"project") { info_str = fmt.Sprintf("下节点~项目合并~未响应~相关人员检查~%s",k.(string)) }else { info_str = fmt.Sprintf("下节点~索引~未响应~相关人员检查~%s",k.(string)) } res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, "增量判重程序~严重警告",info_str)) if err == nil { defer res.Body.Close() read, err := ioutil.ReadAll(res.Body) log.Println("邮件发送:", string(read), err) } } return true }) time.Sleep(60 * time.Second) } }