123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package funcs
- import (
- "github.com/cihub/seelog"
- "net"
- "node_monitor/g"
- "node_monitor/nettools"
- "sync"
- "time"
- )
- func Ping() {
- // var wg sync.WaitGroup
- //for _, target := range g.SelfCfg.Ping {
- // wg.Add(1)
- // go PingTask(g.Cfg.Network[target], &wg)
- //}
- //wg.Wait()
- //go StartAlert()
- }
- func PingTask(t string, wg *sync.WaitGroup) {
- //var ipSlice []string
- //ipSlice = append(ipSlice, "kdvkr-02.xyz")
- //ipSlice = append(ipSlice, "kdvkr-04.xyz")
- stat := g.PingSt{}
- stat.MinDelay = -1
- lossPK := 0
- addr, err := net.ResolveIPAddr("ip", t)
- seelog.Info("Start Ping " + t + "..")
- if err == nil {
- for i := 0; i < 10; i++ {
- starttime := time.Now().UnixNano()
- //tcpping := nettools.NewTcpPing(addr.String(), 22, time.Second*4)
- icmping := nettools.NewIcmpPing(addr.String(), time.Second*4)
- rest := icmping.Ping()
- if rest.Error() == nil {
- delay := rest.Result()
- //seelog.Info("[func:IcmpPing] Finish Addr:", addr, delay, "ms")
- stat.AvgDelay = stat.AvgDelay + rest.Result()
- if stat.MaxDelay < delay {
- stat.MaxDelay = delay
- }
- if stat.MinDelay == -1 || stat.MinDelay > delay {
- stat.MinDelay = delay
- }
- stat.RevcPk = stat.RevcPk + 1
- stat.SendPk = stat.SendPk + 1
- stat.LossPk = int((float64(lossPK) / float64(stat.SendPk)) * 100)
- duringtime := time.Now().UnixNano() - starttime
- time.Sleep(time.Duration(3000*1000000-duringtime) * time.Nanosecond)
- } else {
- seelog.Debug("[func:StartPing IcmpPing] ID:", i, " IP:", addr, "| err:", rest.Error())
- lossPK = lossPK + 1
- }
- }
- if stat.RevcPk > 0 {
- stat.AvgDelay = stat.AvgDelay / stat.RevcPk
- } else {
- stat.AvgDelay = 0.0
- }
- seelog.Debug("[func:IcmpPing] Finish Addr:", addr, " MaxDelay:", stat.MaxDelay, " MinDelay:", stat.MinDelay, " AvgDelay:", stat.AvgDelay, " Revc:", stat.RevcPk, " LossPK:", stat.LossPk)
- } else {
- stat.AvgDelay = 0.00
- stat.MinDelay = 0.00
- stat.MaxDelay = 0.00
- stat.SendPk = 0
- stat.RevcPk = 0
- stat.LossPk = 100
- seelog.Debug("[func:IcmpPing] Finish Addr:", addr, " Unable to resolve destination host")
- }
- }
|