From aa6dc79fc6d7ee95e22d8110ae43db7b13811e3d Mon Sep 17 00:00:00 2001 From: Sebastian Spaink <3441183+sspaink@users.noreply.github.com> Date: Tue, 9 Feb 2021 10:50:57 -0600 Subject: [PATCH] Sort and timeout is deadline (#8839) --- plugins/inputs/ping/ping.go | 9 +++------ plugins/inputs/ping/ping_test.go | 7 +++++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/inputs/ping/ping.go b/plugins/inputs/ping/ping.go index 44a32de8b..203d9c481 100644 --- a/plugins/inputs/ping/ping.go +++ b/plugins/inputs/ping/ping.go @@ -7,6 +7,7 @@ import ( "net" "os/exec" "runtime" + "sort" "strings" "sync" "time" @@ -176,14 +177,9 @@ func (p *Ping) nativePing(destination string) (*pingStats, error) { pinger.Source = p.sourceAddress pinger.Interval = p.calcInterval - pinger.Timeout = p.calcTimeout if p.Deadline > 0 { - // If deadline is set ping exits regardless of how many packets have been sent or received - timer := time.AfterFunc(time.Duration(p.Deadline)*time.Second, func() { - pinger.Stop() - }) - defer timer.Stop() + pinger.Timeout = time.Duration(p.Deadline) * time.Second } // Get Time to live (TTL) of first response, matching original implementation @@ -240,6 +236,7 @@ func (p *Ping) pingToURLNative(destination string, acc telegraf.Accumulator) { return } + sort.Sort(durationSlice(stats.Rtts)) for _, perc := range p.Percentiles { var value = percentile(durationSlice(stats.Rtts), perc) var field = fmt.Sprintf("percentile%v_ms", perc) diff --git a/plugins/inputs/ping/ping_test.go b/plugins/inputs/ping/ping_test.go index 9f88cc17d..752714a86 100644 --- a/plugins/inputs/ping/ping_test.go +++ b/plugins/inputs/ping/ping_test.go @@ -432,11 +432,11 @@ func TestPingGatherNative(t *testing.T) { PacketsSent: 5, PacketsRecv: 5, Rtts: []time.Duration{ - 1 * time.Millisecond, - 2 * time.Millisecond, 3 * time.Millisecond, 4 * time.Millisecond, + 1 * time.Millisecond, 5 * time.Millisecond, + 2 * time.Millisecond, }, }, ttl: 1, @@ -475,8 +475,11 @@ func TestPingGatherNative(t *testing.T) { assert.True(t, acc.HasPoint("ping", map[string]string{"url": "localhost"}, "packets_transmitted", 5)) assert.True(t, acc.HasPoint("ping", map[string]string{"url": "localhost"}, "packets_received", 5)) assert.True(t, acc.HasField("ping", "percentile50_ms")) + assert.Equal(t, float64(3), acc.Metrics[0].Fields["percentile50_ms"]) assert.True(t, acc.HasField("ping", "percentile95_ms")) + assert.Equal(t, float64(4.799999), acc.Metrics[0].Fields["percentile95_ms"]) assert.True(t, acc.HasField("ping", "percentile99_ms")) + assert.Equal(t, float64(4.96), acc.Metrics[0].Fields["percentile99_ms"]) assert.True(t, acc.HasField("ping", "percent_packet_loss")) assert.True(t, acc.HasField("ping", "minimum_response_ms")) assert.True(t, acc.HasField("ping", "average_response_ms"))