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") } }