fix(outputs.yandex_cloud_monitoring): catch int64 values (#12156)

This commit is contained in:
Joshua Powers 2022-11-07 07:28:49 -07:00 committed by GitHub
parent a3424a982f
commit f2b49ce39c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 4 deletions

View File

@ -12,6 +12,7 @@ import (
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/config"
"github.com/influxdata/telegraf/internal"
"github.com/influxdata/telegraf/plugins/outputs"
"github.com/influxdata/telegraf/selfstat"
)
@ -122,13 +123,19 @@ func (a *YandexCloudMonitoring) Write(metrics []telegraf.Metric) error {
var yandexCloudMonitoringMetrics []yandexCloudMonitoringMetric
for _, m := range metrics {
for _, field := range m.FieldList() {
value, err := internal.ToFloat64(field.Value)
if err != nil {
a.Log.Errorf("skipping value: %w", err.Error())
continue
}
yandexCloudMonitoringMetrics = append(
yandexCloudMonitoringMetrics,
yandexCloudMonitoringMetric{
Name: field.Key,
Labels: m.Tags(),
TS: fmt.Sprint(m.Time().Format(time.RFC3339)),
Value: field.Value.(float64),
Value: value,
},
)
}

View File

@ -2,15 +2,16 @@ package yandex_cloud_monitoring
import (
"encoding/json"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/testutil"
"github.com/stretchr/testify/require"
)
func TestWrite(t *testing.T) {
@ -74,6 +75,48 @@ func TestWrite(t *testing.T) {
w.WriteHeader(http.StatusOK)
},
},
{
name: "int64 metric is converted to json value",
plugin: &YandexCloudMonitoring{},
metrics: []telegraf.Metric{
testutil.MustMetric(
"cluster",
map[string]string{},
map[string]interface{}{
"value": int64(9223372036854775806),
},
time.Unix(0, 0),
),
},
handler: func(t *testing.T, w http.ResponseWriter, r *http.Request) {
message := readBody(r)
require.Len(t, message.Metrics, 1)
require.Equal(t, "value", message.Metrics[0].Name)
require.Equal(t, float64(9.223372036854776e+18), message.Metrics[0].Value)
w.WriteHeader(http.StatusOK)
},
},
{
name: "int metric is converted to json value",
plugin: &YandexCloudMonitoring{},
metrics: []telegraf.Metric{
testutil.MustMetric(
"cluster",
map[string]string{},
map[string]interface{}{
"value": 9226,
},
time.Unix(0, 0),
),
},
handler: func(t *testing.T, w http.ResponseWriter, r *http.Request) {
message := readBody(r)
require.Len(t, message.Metrics, 1)
require.Equal(t, "value", message.Metrics[0].Name)
require.Equal(t, float64(9226), message.Metrics[0].Value)
w.WriteHeader(http.StatusOK)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {