Sort and timeout is deadline (#8839)
This commit is contained in:
parent
ba66d4facb
commit
aa6dc79fc6
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
Loading…
Reference in New Issue