package main import ( "fmt" "github.com/go-ping/ping" "math" "time" ) const ( PingCount = 3 PingInterval = 5 ) func formatLine(stats *ping.Statistics) { if stats.PacketLoss >= 100.0 { // fontawesome/forkawesome doesn't have the fitting icon... // so this is the utf-8 icon/emoji fmt.Println("%{F#ff7070}🚫") return } var rttColor string var packetColor string switch { case stats.AvgRtt.Milliseconds() < 33: rttColor = "%{F#3cb703}" case stats.AvgRtt.Milliseconds() < 66: rttColor = "%{F#f9dd04}" case stats.AvgRtt.Milliseconds() < 100: rttColor = "%{F#e87205}" default: rttColor = "%{F#d60606}" } switch { case stats.PacketLoss == 0: packetColor = "%{F#3cb703}" case stats.PacketLoss < 10: packetColor = "%{F#f9dd04}" case stats.PacketLoss < 25: packetColor = "%{F#e87205}" default: packetColor = "%{F#d60606}" } fmt.Printf("%s%dms %%{F-}| %s%d%%\n", rttColor, stats.AvgRtt.Milliseconds(), packetColor, int(math.Round(stats.PacketLoss))) } func main() { for { time.Sleep(time.Duration(PingInterval) * time.Second) pinger, err := ping.NewPinger("itsh.dev") if err != nil { fmt.Println(err) continue } pinger.Count = PingCount pinger.OnFinish = formatLine if pinger.Run() != nil { fmt.Println(err) continue } } }