From dbe6f594a94126f70e3c3326f3cddb2468b2aeb8 Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Wed, 26 Dec 2018 19:39:34 -0800 Subject: [PATCH] Allow floats in valuecounter aggregator (#5168) --- plugins/aggregators/valuecounter/README.md | 5 +++-- plugins/aggregators/valuecounter/valuecounter.go | 9 --------- plugins/aggregators/valuecounter/valuecounter_test.go | 5 ++--- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/plugins/aggregators/valuecounter/README.md b/plugins/aggregators/valuecounter/README.md index 3d132c3bb..ef68e0f4e 100644 --- a/plugins/aggregators/valuecounter/README.md +++ b/plugins/aggregators/valuecounter/README.md @@ -11,8 +11,9 @@ configuration directive. When no `fields` is provided the plugin will not count any fields. The results are emitted in fields in the format: `originalfieldname_fieldvalue = count`. -Valuecounter only works on fields of the type int, bool or string. Float fields -are being dropped to prevent the creating of too many fields. +Counting fields with a high number of potential values may produce significant +amounts of new fields and memory usage, take care to only count fields with a +limited set of values. ### Configuration: diff --git a/plugins/aggregators/valuecounter/valuecounter.go b/plugins/aggregators/valuecounter/valuecounter.go index 05f4945d2..a25c9dcaf 100644 --- a/plugins/aggregators/valuecounter/valuecounter.go +++ b/plugins/aggregators/valuecounter/valuecounter.go @@ -2,7 +2,6 @@ package valuecounter import ( "fmt" - "log" "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/plugins/aggregators" @@ -68,14 +67,6 @@ func (vc *ValueCounter) Add(in telegraf.Metric) { for fk, fv := range in.Fields() { for _, cf := range vc.Fields { if fk == cf { - // Do not process float types to prevent memory from blowing up - switch fv.(type) { - default: - log.Printf("I! Valuecounter: Unsupported field type. " + - "Must be an int, string or bool. Ignoring.") - continue - case uint64, int64, string, bool: - } fn := fmt.Sprintf("%v_%v", fk, fv) vc.cache[id].fieldCount[fn]++ } diff --git a/plugins/aggregators/valuecounter/valuecounter_test.go b/plugins/aggregators/valuecounter/valuecounter_test.go index 01c68c496..8cec5f366 100644 --- a/plugins/aggregators/valuecounter/valuecounter_test.go +++ b/plugins/aggregators/valuecounter/valuecounter_test.go @@ -22,9 +22,8 @@ func NewTestValueCounter(fields []string) telegraf.Aggregator { var m1, _ = metric.New("m1", map[string]string{"foo": "bar"}, map[string]interface{}{ - "status": 200, - "somefield": 20.1, - "foobar": "bar", + "status": 200, + "foobar": "bar", }, time.Now(), )