Skip floats that are NaN or Inf in Datadog output. (#6198)
This commit is contained in:
parent
de6416ff82
commit
b5710a6a21
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"math"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
@ -63,9 +64,6 @@ func (d *Datadog) Connect() error {
|
|||
}
|
||||
|
||||
func (d *Datadog) Write(metrics []telegraf.Metric) error {
|
||||
if len(metrics) == 0 {
|
||||
return nil
|
||||
}
|
||||
ts := TimeSeries{}
|
||||
tempSeries := []*Metric{}
|
||||
metricCounter := 0
|
||||
|
@ -75,6 +73,10 @@ func (d *Datadog) Write(metrics []telegraf.Metric) error {
|
|||
metricTags := buildTags(m.TagList())
|
||||
host, _ := m.GetTag("host")
|
||||
|
||||
if len(dogMs) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
for fieldName, dogM := range dogMs {
|
||||
// name of the datadog measurement
|
||||
var dname string
|
||||
|
@ -98,6 +100,10 @@ func (d *Datadog) Write(metrics []telegraf.Metric) error {
|
|||
}
|
||||
}
|
||||
|
||||
if len(tempSeries) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
redactedApiKey := "****************"
|
||||
ts.Series = make([]*Metric, metricCounter)
|
||||
copy(ts.Series, tempSeries[0:])
|
||||
|
@ -166,9 +172,12 @@ func buildTags(tagList []*telegraf.Tag) []string {
|
|||
}
|
||||
|
||||
func verifyValue(v interface{}) bool {
|
||||
switch v.(type) {
|
||||
switch v := v.(type) {
|
||||
case string:
|
||||
return false
|
||||
case float64:
|
||||
// The payload will be encoded as JSON, which does not allow NaN or Inf.
|
||||
return !math.IsNaN(v) && !math.IsInf(v, 0)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -3,15 +3,15 @@ package datadog
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
@ -249,3 +249,45 @@ func TestVerifyValue(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNaNIsSkipped(t *testing.T) {
|
||||
plugin := &Datadog{
|
||||
Apikey: "testing",
|
||||
URL: "", // No request will be sent because all fields are skipped
|
||||
}
|
||||
|
||||
err := plugin.Connect()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = plugin.Write([]telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"cpu",
|
||||
map[string]string{},
|
||||
map[string]interface{}{
|
||||
"time_idle": math.NaN(),
|
||||
},
|
||||
time.Now()),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestInfIsSkipped(t *testing.T) {
|
||||
plugin := &Datadog{
|
||||
Apikey: "testing",
|
||||
URL: "", // No request will be sent because all fields are skipped
|
||||
}
|
||||
|
||||
err := plugin.Connect()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = plugin.Write([]telegraf.Metric{
|
||||
testutil.MustMetric(
|
||||
"cpu",
|
||||
map[string]string{},
|
||||
map[string]interface{}{
|
||||
"time_idle": math.Inf(0),
|
||||
},
|
||||
time.Now()),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue