Remove metric recreation when filtering (#4767)

This commit is contained in:
Daniel Nelson
2018-09-28 14:48:20 -07:00
committed by GitHub
parent cc64b14ab4
commit 7553c8fd13
15 changed files with 635 additions and 606 deletions

View File

@@ -7,9 +7,11 @@ import (
"time"
"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 TestAdd(t *testing.T) {
@@ -25,13 +27,15 @@ func TestAdd(t *testing.T) {
acc := testutil.Accumulator{}
go ra.Run(&acc, make(chan struct{}))
m := ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err := metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now().Add(time.Millisecond*150),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m))
for {
@@ -56,34 +60,37 @@ func TestAddMetricsOutsideCurrentPeriod(t *testing.T) {
acc := testutil.Accumulator{}
go ra.Run(&acc, make(chan struct{}))
// metric before current period
m := ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err := metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now().Add(-time.Hour),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m))
// metric after current period
m = ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err = metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now().Add(time.Hour),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m))
// "now" metric
m = ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err = metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now().Add(time.Millisecond*50),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m))
for {
@@ -115,13 +122,14 @@ func TestAddAndPushOnePeriod(t *testing.T) {
ra.Run(&acc, shutdown)
}()
m := ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err := metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now().Add(time.Millisecond*100),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m))
for {
@@ -146,23 +154,25 @@ func TestAddDropOriginal(t *testing.T) {
})
assert.NoError(t, ra.Config.Filter.Compile())
m := ra.MakeMetric(
"RITest",
map[string]interface{}{"value": int(101)},
m, err := metric.New("RITest",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now(),
)
telegraf.Untyped)
require.NoError(t, err)
assert.True(t, ra.Add(m))
// this metric name doesn't match the filter, so Add will return false
m2 := ra.MakeMetric(
"foobar",
map[string]interface{}{"value": int(101)},
m2, err := metric.New("foobar",
map[string]string{},
telegraf.Untyped,
map[string]interface{}{
"value": int64(101),
},
time.Now(),
)
telegraf.Untyped)
require.NoError(t, err)
assert.False(t, ra.Add(m2))
}