Allow using name_* modificators for output plugins (#7174)

This commit is contained in:
M0rdecay
2020-03-14 01:04:23 +03:00
committed by GitHub
parent d8b66b69d5
commit da9f19ca9d
4 changed files with 100 additions and 0 deletions

View File

@@ -27,6 +27,10 @@ type OutputConfig struct {
FlushJitter *time.Duration
MetricBufferLimit int
MetricBatchSize int
NameOverride string
NamePrefix string
NameSuffix string
}
// RunningOutput contains the output configuration
@@ -148,6 +152,18 @@ func (ro *RunningOutput) AddMetric(metric telegraf.Metric) {
return
}
if len(ro.Config.NameOverride) > 0 {
metric.SetName(ro.Config.NameOverride)
}
if len(ro.Config.NamePrefix) > 0 {
metric.AddPrefix(ro.Config.NamePrefix)
}
if len(ro.Config.NameSuffix) > 0 {
metric.AddSuffix(ro.Config.NameSuffix)
}
dropped := ro.buffer.Add(metric)
atomic.AddInt64(&ro.droppedMetrics, int64(dropped))

View File

@@ -218,6 +218,60 @@ func TestRunningOutput_TagIncludeMatch(t *testing.T) {
assert.Len(t, m.Metrics()[0].Tags(), 1)
}
// Test that measurement name overriding correctly
func TestRunningOutput_NameOverride(t *testing.T) {
conf := &OutputConfig{
NameOverride: "new_metric_name",
}
m := &mockOutput{}
ro := NewRunningOutput("test", m, conf, 1000, 10000)
ro.AddMetric(testutil.TestMetric(101, "metric1"))
assert.Len(t, m.Metrics(), 0)
err := ro.Write()
assert.NoError(t, err)
assert.Len(t, m.Metrics(), 1)
assert.Equal(t, "new_metric_name", m.Metrics()[0].Name())
}
// Test that measurement name prefix is added correctly
func TestRunningOutput_NamePrefix(t *testing.T) {
conf := &OutputConfig{
NamePrefix: "prefix_",
}
m := &mockOutput{}
ro := NewRunningOutput("test", m, conf, 1000, 10000)
ro.AddMetric(testutil.TestMetric(101, "metric1"))
assert.Len(t, m.Metrics(), 0)
err := ro.Write()
assert.NoError(t, err)
assert.Len(t, m.Metrics(), 1)
assert.Equal(t, "prefix_metric1", m.Metrics()[0].Name())
}
// Test that measurement name suffix is added correctly
func TestRunningOutput_NameSuffix(t *testing.T) {
conf := &OutputConfig{
NameSuffix: "_suffix",
}
m := &mockOutput{}
ro := NewRunningOutput("test", m, conf, 1000, 10000)
ro.AddMetric(testutil.TestMetric(101, "metric1"))
assert.Len(t, m.Metrics(), 0)
err := ro.Write()
assert.NoError(t, err)
assert.Len(t, m.Metrics(), 1)
assert.Equal(t, "metric1_suffix", m.Metrics()[0].Name())
}
// Test that we can write metrics with simple default setup.
func TestRunningOutputDefault(t *testing.T) {
conf := &OutputConfig{