52 lines
943 B
Go
52 lines
943 B
Go
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
|
|
}
|