udptaskmap.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "net"
  7. "net/http"
  8. "strings"
  9. "sync"
  10. "time"
  11. )
  12. var udptaskmap = &sync.Map{}
  13. var tomail string
  14. var api string
  15. type udpNode struct {
  16. data []byte
  17. addr *net.UDPAddr
  18. timestamp int64
  19. retry int
  20. }
  21. func checkMailJob() {
  22. //阿里云内网无法发送邮件
  23. jkmail, _ := Sysconfig["jkmail"].(map[string]interface{})
  24. if jkmail != nil {
  25. tomail, _ = jkmail["to"].(string)
  26. api, _ = jkmail["api"].(string)
  27. }
  28. log.Println("start checkMailJob", tomail, Sysconfig["jkmail"])
  29. for {
  30. udptaskmap.Range(func(k, v interface{}) bool {
  31. now := time.Now().Unix()
  32. node, _ := v.(*udpNode)
  33. if now-node.timestamp > 120 {
  34. udptaskmap.Delete(k)
  35. info_str := ""
  36. if strings.Contains(k.(string), "project") {
  37. info_str = fmt.Sprintf("下节点~项目合并~未响应~相关人员检查~%s", k.(string))
  38. } else {
  39. info_str = fmt.Sprintf("下节点~同步数据~未响应~相关人员检查~%s", k.(string))
  40. }
  41. res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, "增量判重程序~严重警告", info_str))
  42. if err == nil {
  43. defer res.Body.Close()
  44. read, err := ioutil.ReadAll(res.Body)
  45. log.Println("邮件发送:", string(read), err)
  46. }
  47. }
  48. return true
  49. })
  50. time.Sleep(60 * time.Second)
  51. }
  52. }
  53. func sendErrMailApi(title, body string) {
  54. jkmail, _ := Sysconfig["jkmail"].(map[string]interface{})
  55. if jkmail != nil {
  56. tomail, _ = jkmail["to"].(string)
  57. api, _ = jkmail["api"].(string)
  58. }
  59. log.Println(tomail, api)
  60. res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, title, body))
  61. if err == nil {
  62. defer res.Body.Close()
  63. read, err := ioutil.ReadAll(res.Body)
  64. log.Println("邮件发送成功:", string(read), err)
  65. } else {
  66. log.Println("邮件发送失败:", err)
  67. }
  68. }