Sort and timeout is deadline (#8839)

This commit is contained in:
Sebastian Spaink 2021-02-09 10:50:57 -06:00 committed by GitHub
parent ba66d4facb
commit aa6dc79fc6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 8 deletions

View File

@ -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)

View File

@ -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"))