diff --git a/internal/models/running_output.go b/internal/models/running_output.go index 0ae78c983..0ce756f47 100644 --- a/internal/models/running_output.go +++ b/internal/models/running_output.go @@ -90,6 +90,9 @@ func NewRunningOutput( // AddMetric adds a metric to the output. This function can also write cached // points if FlushBufferWhenFull is true. func (ro *RunningOutput) AddMetric(m telegraf.Metric) { + if m == nil { + return + } // Filter any tagexclude/taginclude parameters before adding metric if ro.Config.Filter.IsActive() { // In order to filter out tags, we need to create a new metric, since diff --git a/internal/models/running_output_test.go b/internal/models/running_output_test.go index c55334218..bd39f2f9b 100644 --- a/internal/models/running_output_test.go +++ b/internal/models/running_output_test.go @@ -75,6 +75,23 @@ func BenchmarkRunningOutputAddFailWrites(b *testing.B) { } } +func TestAddingNilMetric(t *testing.T) { + conf := &OutputConfig{ + Filter: Filter{}, + } + + m := &mockOutput{} + ro := NewRunningOutput("test", m, conf, 1000, 10000) + + ro.AddMetric(nil) + ro.AddMetric(nil) + ro.AddMetric(nil) + + err := ro.Write() + assert.NoError(t, err) + assert.Len(t, m.Metrics(), 0) +} + // Test that NameDrop filters ger properly applied. func TestRunningOutput_DropFilter(t *testing.T) { conf := &OutputConfig{