Fixed json serialization to make sure only value type supported by OpenTSDB are sent and made sure we send numbers un-quoted event though OpenTSDB API accepts them as this is not clean json.

This commit is contained in:
Eric 2016-09-20 14:26:08 -04:00 committed by Cameron Sparr
parent b702a9758b
commit 1f7a8fceef
2 changed files with 8 additions and 5 deletions

View File

@ -109,9 +109,12 @@ func (o *OpenTSDB) WriteHttp(metrics []telegraf.Metric, u *url.URL) error {
tags := cleanTags(m.Tags())
for fieldName, value := range m.Fields() {
metricValue, buildError := buildValue(value)
if buildError != nil {
fmt.Printf("OpenTSDB: %s\n", buildError.Error())
switch value.(type) {
case int64:
case uint64:
case float64:
default:
fmt.Printf("OpenTSDB does not support metric value: [%s] of type [%T].\n", value, value)
continue
}
@ -120,7 +123,7 @@ func (o *OpenTSDB) WriteHttp(metrics []telegraf.Metric, u *url.URL) error {
o.Prefix, m.Name(), fieldName)),
Tags: tags,
Timestamp: now,
Value: metricValue,
Value: value,
}
if err := http.sendDataPoint(metric); err != nil {

View File

@ -16,7 +16,7 @@ import (
type HttpMetric struct {
Metric string `json:"metric"`
Timestamp int64 `json:"timestamp"`
Value string `json:"value"`
Value interface{} `json:"value"`
Tags map[string]string `json:"tags"`
}