add verifyValue func for datadog and librato, bail if no good

This commit is contained in:
JP 2016-03-22 10:07:01 -05:00
parent f543dbb42f
commit fdbd79b8c6
4 changed files with 49 additions and 14 deletions

View File

@ -139,6 +139,9 @@ func (d *Datadog) authenticatedUrl() string {
func buildMetrics(m telegraf.Metric) (map[string]Point, error) { func buildMetrics(m telegraf.Metric) (map[string]Point, error) {
ms := make(map[string]Point) ms := make(map[string]Point)
for k, v := range m.Fields() { for k, v := range m.Fields() {
if !verifyValue(v) {
continue
}
var p Point var p Point
if err := p.setValue(v); err != nil { if err := p.setValue(v); err != nil {
return ms, fmt.Errorf("unable to extract value from Fields, %s", err.Error()) return ms, fmt.Errorf("unable to extract value from Fields, %s", err.Error())
@ -160,6 +163,14 @@ func buildTags(mTags map[string]string) []string {
return tags return tags
} }
func verifyValue(v interface{}) bool {
switch v.(type) {
case string:
return false
}
return true
}
func (p *Point) setValue(v interface{}) error { func (p *Point) setValue(v interface{}) error {
switch d := v.(type) { switch d := v.(type) {
case int: case int:

View File

@ -152,14 +152,6 @@ func TestBuildPoint(t *testing.T) {
}, },
nil, nil,
}, },
{
testutil.TestMetric("11234.5", "test7"),
Point{
float64(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix()),
11234.5,
},
fmt.Errorf("unable to extract value from Fields, undeterminable type"),
},
} }
for _, tt := range tagtests { for _, tt := range tagtests {
pt, err := buildMetrics(tt.ptIn) pt, err := buildMetrics(tt.ptIn)
@ -175,3 +167,25 @@ func TestBuildPoint(t *testing.T) {
} }
} }
} }
func TestVerifyValue(t *testing.T) {
var tagtests = []struct {
ptIn telegraf.Metric
validMetric bool
}{
{
testutil.TestMetric(float32(11234.5), "test1"),
true,
},
{
testutil.TestMetric("11234.5", "test2"),
false,
},
}
for _, tt := range tagtests {
ok := verifyValue(tt.ptIn.Fields()["value"])
if tt.validMetric != ok {
t.Errorf("%s: verification failed\n", tt.ptIn.Name())
}
}
}

View File

@ -165,6 +165,9 @@ func (l *Librato) buildGauges(m telegraf.Metric) ([]*Gauge, error) {
Name: l.buildGaugeName(m, fieldName), Name: l.buildGaugeName(m, fieldName),
MeasureTime: m.Time().Unix(), MeasureTime: m.Time().Unix(),
} }
if !gauge.verifyValue(value) {
continue
}
if err := gauge.setValue(value); err != nil { if err := gauge.setValue(value); err != nil {
return gauges, fmt.Errorf("unable to extract value from Fields, %s\n", return gauges, fmt.Errorf("unable to extract value from Fields, %s\n",
err.Error()) err.Error())
@ -186,6 +189,14 @@ func (l *Librato) buildGauges(m telegraf.Metric) ([]*Gauge, error) {
return gauges, nil return gauges, nil
} }
func (g *Gauge) verifyValue(v interface{}) bool {
switch v.(type) {
case string:
return false
}
return true
}
func (g *Gauge) setValue(v interface{}) error { func (g *Gauge) setValue(v interface{}) error {
switch d := v.(type) { switch d := v.(type) {
case int: case int:

View File

@ -139,12 +139,8 @@ func TestBuildGauge(t *testing.T) {
}, },
{ {
testutil.TestMetric("11234.5", "test7"), testutil.TestMetric("11234.5", "test7"),
&Gauge{ nil,
Name: "value1.test7.value", nil,
MeasureTime: time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC).Unix(),
Value: 11234.5,
},
fmt.Errorf("unable to extract value from Fields, undeterminable type"),
}, },
} }
@ -158,6 +154,9 @@ func TestBuildGauge(t *testing.T) {
t.Errorf("%s: expected an error (%s) but none returned", t.Errorf("%s: expected an error (%s) but none returned",
gt.ptIn.Name(), gt.err.Error()) gt.ptIn.Name(), gt.err.Error())
} }
if len(gauges) != 0 && gt.outGauge == nil {
t.Errorf("%s: unexpected gauge, %+v\n", gt.ptIn.Name(), gt.outGauge)
}
if len(gauges) == 0 { if len(gauges) == 0 {
continue continue
} }