ojson
This commit is contained in:
21
main.go
21
main.go
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user