From 2eca1ab1453a974ef86c9da5f9bd885b85137036 Mon Sep 17 00:00:00 2001 From: TwinProduction Date: Sun, 27 Dec 2020 17:07:50 -0500 Subject: [PATCH] Get the round-trip time directly from the pinger --- client/client.go | 14 +++++++++----- client/client_test.go | 12 +++++++++--- core/service.go | 3 +-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/client/client.go b/client/client.go index ba72bf47..b24d5406 100644 --- a/client/client.go +++ b/client/client.go @@ -53,12 +53,13 @@ func CanCreateTCPConnection(address string) bool { return true } -// CanPing checks if an address can be pinged +// Ping checks if an address can be pinged and returns the round-trip time if the address can be pinged +// // Note that this function takes at least 100ms, even if the address is 127.0.0.1 -func CanPing(address string) bool { +func Ping(address string) (bool, time.Duration) { pinger, err := ping.NewPinger(address) if err != nil { - return false + return false, 0 } pinger.Count = 1 pinger.Timeout = 5 * time.Second @@ -66,7 +67,10 @@ func CanPing(address string) bool { pinger.SetPrivileged(true) err = pinger.Run() if err != nil { - return false + return false, 0 } - return true + if pinger.Statistics() != nil { + return true, pinger.Statistics().MaxRtt + } + return true, 0 } diff --git a/client/client_test.go b/client/client_test.go index 6e3120b5..1cabede1 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -27,11 +27,17 @@ func TestGetHttpClient(t *testing.T) { } } -func TestCanPing(t *testing.T) { - if !CanPing("127.0.0.1") { +func TestPing(t *testing.T) { + if success, rtt := Ping("127.0.0.1"); !success { t.Error("expected true") + if rtt == 0 { + t.Error("Round-trip time returned on success should've higher than 0") + } } - if CanPing("256.256.256.256") { + if success, rtt := Ping("256.256.256.256"); success { t.Error("expected false") + if rtt != 0 { + t.Error("Round-trip time returned on failure should've been 0") + } } } diff --git a/core/service.go b/core/service.go index ca6e94f3..582e2b07 100644 --- a/core/service.go +++ b/core/service.go @@ -197,8 +197,7 @@ func (service *Service) call(result *Result) { result.Connected = client.CanCreateTCPConnection(strings.TrimPrefix(service.URL, "tcp://")) result.Duration = time.Since(startTime) } else if isServiceICMP { - result.Connected = client.CanPing(strings.TrimPrefix(service.URL, "icmp://")) - result.Duration = time.Since(startTime) + result.Connected, result.Duration = client.Ping(strings.TrimPrefix(service.URL, "icmp://")) } else { response, err = client.GetHTTPClient(service.Insecure).Do(request) result.Duration = time.Since(startTime)