Get the round-trip time directly from the pinger

This commit is contained in:
TwinProduction 2020-12-27 17:07:50 -05:00
parent f0995f696f
commit 2eca1ab145
3 changed files with 19 additions and 10 deletions

View File

@ -53,12 +53,13 @@ func CanCreateTCPConnection(address string) bool {
return true 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 // 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) pinger, err := ping.NewPinger(address)
if err != nil { if err != nil {
return false return false, 0
} }
pinger.Count = 1 pinger.Count = 1
pinger.Timeout = 5 * time.Second pinger.Timeout = 5 * time.Second
@ -66,7 +67,10 @@ func CanPing(address string) bool {
pinger.SetPrivileged(true) pinger.SetPrivileged(true)
err = pinger.Run() err = pinger.Run()
if err != nil { if err != nil {
return false return false, 0
} }
return true if pinger.Statistics() != nil {
return true, pinger.Statistics().MaxRtt
}
return true, 0
} }

View File

@ -27,11 +27,17 @@ func TestGetHttpClient(t *testing.T) {
} }
} }
func TestCanPing(t *testing.T) { func TestPing(t *testing.T) {
if !CanPing("127.0.0.1") { if success, rtt := Ping("127.0.0.1"); !success {
t.Error("expected true") 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") t.Error("expected false")
if rtt != 0 {
t.Error("Round-trip time returned on failure should've been 0")
}
} }
} }

View File

@ -197,8 +197,7 @@ func (service *Service) call(result *Result) {
result.Connected = client.CanCreateTCPConnection(strings.TrimPrefix(service.URL, "tcp://")) result.Connected = client.CanCreateTCPConnection(strings.TrimPrefix(service.URL, "tcp://"))
result.Duration = time.Since(startTime) result.Duration = time.Since(startTime)
} else if isServiceICMP { } else if isServiceICMP {
result.Connected = client.CanPing(strings.TrimPrefix(service.URL, "icmp://")) result.Connected, result.Duration = client.Ping(strings.TrimPrefix(service.URL, "icmp://"))
result.Duration = time.Since(startTime)
} else { } else {
response, err = client.GetHTTPClient(service.Insecure).Do(request) response, err = client.GetHTTPClient(service.Insecure).Do(request)
result.Duration = time.Since(startTime) result.Duration = time.Since(startTime)