This commit is contained in:
bel
2026-06-08 13:39:52 -06:00
parent 366857d58a
commit 08245c1ba9

21
main.go
View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/json"
"flag" "flag"
"fmt" "fmt"
"os" "os"
@@ -19,6 +20,7 @@ func run() error {
fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
domain := fs.String("d", "www.google.com", "address to ping") domain := fs.String("d", "www.google.com", "address to ping")
c := fs.Int("c", 0, "limit pings") c := fs.Int("c", 0, "limit pings")
o := fs.String("o", "csv", "output format (csv, json)")
if err := fs.Parse(os.Args[1:]); err != nil { if err := fs.Parse(os.Args[1:]); err != nil {
return err return err
} }
@@ -30,9 +32,17 @@ func run() error {
pinger.Count = *c pinger.Count = *c
pinger.SetPrivileged(true) pinger.SetPrivileged(true)
switch *o {
case "csv":
fmt.Printf("ts,n,ok_pct,max,avg,stddev\n") fmt.Printf("ts,n,ok_pct,max,avg,stddev\n")
case "json":
default:
panic(*o)
}
pinger.OnRecv = func(*ping.Packet) { pinger.OnRecv = func(*ping.Packet) {
stat := pinger.Statistics() stat := pinger.Statistics()
switch *o {
case "csv":
fmt.Printf("%s,%d,%.0f%%,%dms,%dms,%dms\n", fmt.Printf("%s,%d,%.0f%%,%dms,%dms,%dms\n",
time.Now().UTC().Format("2006-01-02T15:04:05Z"), time.Now().UTC().Format("2006-01-02T15:04:05Z"),
stat.PacketsRecv, stat.PacketsRecv,
@@ -41,6 +51,17 @@ func run() error {
stat.AvgRtt.Milliseconds(), stat.AvgRtt.Milliseconds(),
stat.StdDevRtt.Milliseconds(), stat.StdDevRtt.Milliseconds(),
) )
case "json":
b, _ := json.Marshal(map[string]any{
"ts": time.Now().UTC().Format("2006-01-02T15:04:05Z"),
"n": stat.PacketsRecv,
"ok_pct": 100.0 * (1.0 - stat.PacketLoss),
"max": stat.MaxRtt.Milliseconds(),
"avg": stat.AvgRtt.Milliseconds(),
"stddev": stat.StdDevRtt.Milliseconds(),
})
fmt.Printf("%s\n", b)
}
} }
if err := pinger.Run(); err != nil { if err := pinger.Run(); err != nil {