diff --git a/plugins/inputs/ping/ping.go b/plugins/inputs/ping/ping.go index f242a80b8..7550559dd 100644 --- a/plugins/inputs/ping/ping.go +++ b/plugins/inputs/ping/ping.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "math" + "os/exec" "runtime" "strings" "sync" @@ -11,6 +12,7 @@ import ( "github.com/go-ping/ping" "github.com/influxdata/telegraf" + "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/plugins/inputs" ) @@ -311,9 +313,21 @@ func (p *Ping) Init() error { return nil } +func hostPinger(binary string, timeout float64, args ...string) (string, error) { + bin, err := exec.LookPath(binary) + if err != nil { + return "", err + } + c := exec.Command(bin, args...) + out, err := internal.CombinedOutputTimeout(c, + time.Second*time.Duration(timeout+5)) + return string(out), err +} + func init() { inputs.Add("ping", func() telegraf.Input { p := &Ping{ + pingHost: hostPinger, PingInterval: 1.0, Count: 1, Timeout: 1.0, diff --git a/plugins/inputs/ping/ping_test.go b/plugins/inputs/ping/ping_test.go index 0afa53706..9f88cc17d 100644 --- a/plugins/inputs/ping/ping_test.go +++ b/plugins/inputs/ping/ping_test.go @@ -13,6 +13,7 @@ import ( "time" "github.com/go-ping/ping" + "github.com/influxdata/telegraf/plugins/inputs" "github.com/influxdata/telegraf/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -261,6 +262,21 @@ func TestPingGather(t *testing.T) { acc.AssertContainsTaggedFields(t, "ping", fields, tags) } +func TestPingGatherIntegration(t *testing.T) { + if testing.Short() { + t.Skip("Skipping integration test in short mode, retrieves systems ping utility") + } + + var acc testutil.Accumulator + p, ok := inputs.Inputs["ping"]().(*Ping) + require.True(t, ok) + p.Urls = []string{"localhost", "influxdata.com"} + err := acc.GatherError(p.Gather) + require.NoError(t, err) + require.Equal(t, 0, acc.Metrics[0].Fields["result_code"]) + require.Equal(t, 0, acc.Metrics[1].Fields["result_code"]) +} + var lossyPingOutput = ` PING www.google.com (216.58.218.164) 56(84) bytes of data. 64 bytes from host.net (216.58.218.164): icmp_seq=1 ttl=63 time=35.2 ms