add verifyValue func for datadog and librato, bail if no good
closes #906
This commit is contained in:
parent
276e7629bd
commit
51d7724255
|
@ -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:
|
||||||
|
|
|
@ -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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue