ping.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package funcs
  2. import (
  3. "github.com/cihub/seelog"
  4. "net"
  5. "node_monitor/g"
  6. "node_monitor/nettools"
  7. "sync"
  8. "time"
  9. )
  10. func Ping() {
  11. // var wg sync.WaitGroup
  12. //for _, target := range g.SelfCfg.Ping {
  13. // wg.Add(1)
  14. // go PingTask(g.Cfg.Network[target], &wg)
  15. //}
  16. //wg.Wait()
  17. //go StartAlert()
  18. }
  19. func PingTask(t string, wg *sync.WaitGroup) {
  20. //var ipSlice []string
  21. //ipSlice = append(ipSlice, "kdvkr-02.xyz")
  22. //ipSlice = append(ipSlice, "kdvkr-04.xyz")
  23. stat := g.PingSt{}
  24. stat.MinDelay = -1
  25. lossPK := 0
  26. addr, err := net.ResolveIPAddr("ip", t)
  27. seelog.Info("Start Ping " + t + "..")
  28. if err == nil {
  29. for i := 0; i < 10; i++ {
  30. starttime := time.Now().UnixNano()
  31. //tcpping := nettools.NewTcpPing(addr.String(), 22, time.Second*4)
  32. icmping := nettools.NewIcmpPing(addr.String(), time.Second*4)
  33. rest := icmping.Ping()
  34. if rest.Error() == nil {
  35. delay := rest.Result()
  36. //seelog.Info("[func:IcmpPing] Finish Addr:", addr, delay, "ms")
  37. stat.AvgDelay = stat.AvgDelay + rest.Result()
  38. if stat.MaxDelay < delay {
  39. stat.MaxDelay = delay
  40. }
  41. if stat.MinDelay == -1 || stat.MinDelay > delay {
  42. stat.MinDelay = delay
  43. }
  44. stat.RevcPk = stat.RevcPk + 1
  45. stat.SendPk = stat.SendPk + 1
  46. stat.LossPk = int((float64(lossPK) / float64(stat.SendPk)) * 100)
  47. duringtime := time.Now().UnixNano() - starttime
  48. time.Sleep(time.Duration(3000*1000000-duringtime) * time.Nanosecond)
  49. } else {
  50. seelog.Debug("[func:StartPing IcmpPing] ID:", i, " IP:", addr, "| err:", rest.Error())
  51. lossPK = lossPK + 1
  52. }
  53. }
  54. if stat.RevcPk > 0 {
  55. stat.AvgDelay = stat.AvgDelay / stat.RevcPk
  56. } else {
  57. stat.AvgDelay = 0.0
  58. }
  59. seelog.Debug("[func:IcmpPing] Finish Addr:", addr, " MaxDelay:", stat.MaxDelay, " MinDelay:", stat.MinDelay, " AvgDelay:", stat.AvgDelay, " Revc:", stat.RevcPk, " LossPK:", stat.LossPk)
  60. } else {
  61. stat.AvgDelay = 0.00
  62. stat.MinDelay = 0.00
  63. stat.MaxDelay = 0.00
  64. stat.SendPk = 0
  65. stat.RevcPk = 0
  66. stat.LossPk = 100
  67. seelog.Debug("[func:IcmpPing] Finish Addr:", addr, " Unable to resolve destination host")
  68. }
  69. }