Sort and timeout is deadline (#8839)
This commit is contained in:
parent
ba66d4facb
commit
aa6dc79fc6
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
@ -176,14 +177,9 @@ func (p *Ping) nativePing(destination string) (*pingStats, error) {
|
||||||
|
|
||||||
pinger.Source = p.sourceAddress
|
pinger.Source = p.sourceAddress
|
||||||
pinger.Interval = p.calcInterval
|
pinger.Interval = p.calcInterval
|
||||||
pinger.Timeout = p.calcTimeout
|
|
||||||
|
|
||||||
if p.Deadline > 0 {
|
if p.Deadline > 0 {
|
||||||
// If deadline is set ping exits regardless of how many packets have been sent or received
|
pinger.Timeout = time.Duration(p.Deadline) * time.Second
|
||||||
timer := time.AfterFunc(time.Duration(p.Deadline)*time.Second, func() {
|
|
||||||
pinger.Stop()
|
|
||||||
})
|
|
||||||
defer timer.Stop()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Time to live (TTL) of first response, matching original implementation
|
// 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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sort.Sort(durationSlice(stats.Rtts))
|
||||||
for _, perc := range p.Percentiles {
|
for _, perc := range p.Percentiles {
|
||||||
var value = percentile(durationSlice(stats.Rtts), perc)
|
var value = percentile(durationSlice(stats.Rtts), perc)
|
||||||
var field = fmt.Sprintf("percentile%v_ms", perc)
|
var field = fmt.Sprintf("percentile%v_ms", perc)
|
||||||
|
|
|
||||||
|
|
@ -432,11 +432,11 @@ func TestPingGatherNative(t *testing.T) {
|
||||||
PacketsSent: 5,
|
PacketsSent: 5,
|
||||||
PacketsRecv: 5,
|
PacketsRecv: 5,
|
||||||
Rtts: []time.Duration{
|
Rtts: []time.Duration{
|
||||||
1 * time.Millisecond,
|
|
||||||
2 * time.Millisecond,
|
|
||||||
3 * time.Millisecond,
|
3 * time.Millisecond,
|
||||||
4 * time.Millisecond,
|
4 * time.Millisecond,
|
||||||
|
1 * time.Millisecond,
|
||||||
5 * time.Millisecond,
|
5 * time.Millisecond,
|
||||||
|
2 * time.Millisecond,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ttl: 1,
|
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_transmitted", 5))
|
||||||
assert.True(t, acc.HasPoint("ping", map[string]string{"url": "localhost"}, "packets_received", 5))
|
assert.True(t, acc.HasPoint("ping", map[string]string{"url": "localhost"}, "packets_received", 5))
|
||||||
assert.True(t, acc.HasField("ping", "percentile50_ms"))
|
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.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.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", "percent_packet_loss"))
|
||||||
assert.True(t, acc.HasField("ping", "minimum_response_ms"))
|
assert.True(t, acc.HasField("ping", "minimum_response_ms"))
|
||||||
assert.True(t, acc.HasField("ping", "average_response_ms"))
|
assert.True(t, acc.HasField("ping", "average_response_ms"))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue