From 544262a23aeec96d9e2b8c93572b90a4f4b10325 Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Tue, 18 Dec 2018 14:20:43 -0800 Subject: [PATCH] Apply global and plugin level metric modifications before filtering (#5152) --- internal/models/running_input.go | 12 +++++----- internal/models/running_input_test.go | 34 ++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/internal/models/running_input.go b/internal/models/running_input.go index 0775d5c5d..08a804c40 100644 --- a/internal/models/running_input.go +++ b/internal/models/running_input.go @@ -62,12 +62,6 @@ func (r *RunningInput) MakeMetric(metric telegraf.Metric) telegraf.Metric { return nil } - r.Config.Filter.Modify(metric) - if len(metric.FieldList()) == 0 { - r.metricFiltered(metric) - return nil - } - m := makemetric( metric, r.Config.NameOverride, @@ -76,6 +70,12 @@ func (r *RunningInput) MakeMetric(metric telegraf.Metric) telegraf.Metric { r.Config.Tags, r.defaultTags) + r.Config.Filter.Modify(metric) + if len(metric.FieldList()) == 0 { + r.metricFiltered(metric) + return nil + } + r.MetricsGathered.Incr(1) GlobalMetricsGathered.Incr(1) return m diff --git a/internal/models/running_input_test.go b/internal/models/running_input_test.go index 898007e61..5978a0061 100644 --- a/internal/models/running_input_test.go +++ b/internal/models/running_input_test.go @@ -7,11 +7,43 @@ import ( "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/metric" "github.com/influxdata/telegraf/testutil" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) +func TestMakeMetricFilterAfterApplyingGlobalTags(t *testing.T) { + now := time.Now() + ri := NewRunningInput(&testInput{}, &InputConfig{ + Filter: Filter{ + TagInclude: []string{"b"}, + }, + }) + require.NoError(t, ri.Config.Filter.Compile()) + ri.SetDefaultTags(map[string]string{"a": "x", "b": "y"}) + + m, err := metric.New("cpu", + map[string]string{}, + map[string]interface{}{ + "value": 42, + }, + now) + require.NoError(t, err) + + actual := ri.MakeMetric(m) + + expected, err := metric.New("cpu", + map[string]string{ + "b": "y", + }, + map[string]interface{}{ + "value": 42, + }, + now) + require.NoError(t, err) + + testutil.RequireMetricEqual(t, expected, actual) +} + func TestMakeMetricNoFields(t *testing.T) { now := time.Now() ri := NewRunningInput(&testInput{}, &InputConfig{