package main import ( "flag" "fmt" "os" "time" "github.com/go-ping/ping" ) func main() { if err := run(); err != nil { panic(err) } } func run() error { fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) domain := fs.String("d", "www.google.com", "address to ping") c := fs.Int("c", 0, "limit pings") if err := fs.Parse(os.Args[1:]); err != nil { return err } pinger, err := ping.NewPinger(*domain) if err != nil { return err } pinger.Count = *c pinger.SetPrivileged(true) fmt.Printf("ts,n,ok_pct,max,avg,stddev\n") pinger.OnRecv = func(*ping.Packet) { stat := pinger.Statistics() fmt.Printf("%s,%d,%.0f%%,%dms,%dms,%dms\n", time.Now().UTC().Format("2006-01-02T15:04:05Z"), stat.PacketsRecv, 100.0*(1.0-stat.PacketLoss), stat.MaxRtt.Milliseconds(), stat.AvgRtt.Milliseconds(), stat.StdDevRtt.Milliseconds(), ) } if err := pinger.Run(); err != nil { return err } return nil }