Add Date Processor Plugin (#5895)
This commit is contained in:
parent
de096428be
commit
3e5cfad2b0
|
@ -2,6 +2,7 @@ package all
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "github.com/influxdata/telegraf/plugins/processors/converter"
|
_ "github.com/influxdata/telegraf/plugins/processors/converter"
|
||||||
|
_ "github.com/influxdata/telegraf/plugins/processors/date"
|
||||||
_ "github.com/influxdata/telegraf/plugins/processors/enum"
|
_ "github.com/influxdata/telegraf/plugins/processors/enum"
|
||||||
_ "github.com/influxdata/telegraf/plugins/processors/override"
|
_ "github.com/influxdata/telegraf/plugins/processors/override"
|
||||||
_ "github.com/influxdata/telegraf/plugins/processors/parser"
|
_ "github.com/influxdata/telegraf/plugins/processors/parser"
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Date Processor Plugin
|
||||||
|
|
||||||
|
The `date` processor adds the months and years as tags to your data.
|
||||||
|
|
||||||
|
Provides the ability to group by months or years.
|
||||||
|
|
||||||
|
A few example usecases include:
|
||||||
|
1) consumption data for utilities on per month basis
|
||||||
|
2) bandwith capacity per month
|
||||||
|
3) compare energy production or sales on a yearly or monthly basis
|
||||||
|
|
||||||
|
|
||||||
|
### Configuration:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[[processors.date]]
|
||||||
|
##Specify the date tags to add rename operation.
|
||||||
|
tagKey = "month"
|
||||||
|
dateFormat = "Jan"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tags:
|
||||||
|
|
||||||
|
Tags are applied by this processor.
|
||||||
|
|
||||||
|
### Example processing:
|
||||||
|
|
||||||
|
```
|
||||||
|
- throughput, hostname=example.com lower=10i,upper=1000i,mean=500i 1502489900000000000
|
||||||
|
+ throughput,host=backend.example.com,month=Mar min=10i,max=1000i,mean=500i 1502489900000000000
|
||||||
|
```
|
|
@ -0,0 +1,69 @@
|
||||||
|
package date
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/influxdata/telegraf"
|
||||||
|
"github.com/influxdata/telegraf/plugins/processors"
|
||||||
|
)
|
||||||
|
|
||||||
|
const sampleConfig = `
|
||||||
|
##Specify the date tags to add
|
||||||
|
tagKey = "month"
|
||||||
|
dateFormat = "%m"
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
type Date struct {
|
||||||
|
TagKey string `toml:"tagKey"`
|
||||||
|
DateFormat string `toml:"dateFormat"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Date) SampleConfig() string {
|
||||||
|
return sampleConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Date) Description() string {
|
||||||
|
return "Dates measurements, tags, and fields that pass through this filter."
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Date) Apply(in ...telegraf.Metric) []telegraf.Metric {
|
||||||
|
for _, point := range in {
|
||||||
|
point.AddTag(d.TagKey, point.Time().Format(d.DateFormat))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return in
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
processors.Add("date", func() telegraf.Processor {
|
||||||
|
return &Date{}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
|
||||||
|
[processors.date]
|
||||||
|
jdfj
|
||||||
|
|
||||||
|
##Set Months to True or False
|
||||||
|
tagKey = "month"
|
||||||
|
dateFormat = "%m" // January
|
||||||
|
|
||||||
|
[processors.date]
|
||||||
|
jdfj
|
||||||
|
|
||||||
|
##Set Months to True or False
|
||||||
|
tagKey = "day_of_week"
|
||||||
|
dateFormat = "%d" // Wednesday
|
||||||
|
|
||||||
|
|
||||||
|
# [[processors.regex.fields]]
|
||||||
|
# key = "request"
|
||||||
|
# pattern = ".*category=(\\w+).*"
|
||||||
|
# replacement = "${1}"
|
||||||
|
# result_key = "search_category"
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
|
@ -0,0 +1,67 @@
|
||||||
|
package date
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/influxdata/telegraf"
|
||||||
|
"github.com/influxdata/telegraf/metric"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func MustMetric(name string, tags map[string]string, fields map[string]interface{}, metricTime time.Time) telegraf.Metric {
|
||||||
|
if tags == nil {
|
||||||
|
tags = map[string]string{}
|
||||||
|
}
|
||||||
|
if fields == nil {
|
||||||
|
fields = map[string]interface{}{}
|
||||||
|
}
|
||||||
|
m, _ := metric.New(name, tags, fields, metricTime)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMonthTag(t *testing.T) {
|
||||||
|
dateFormatMonth := Date{
|
||||||
|
TagKey: "month",
|
||||||
|
DateFormat: "Jan",
|
||||||
|
}
|
||||||
|
|
||||||
|
currentTime := time.Now()
|
||||||
|
month := currentTime.Format("Jan")
|
||||||
|
|
||||||
|
m1 := MustMetric("foo", nil, nil, currentTime)
|
||||||
|
m2 := MustMetric("bar", nil, nil, currentTime)
|
||||||
|
m3 := MustMetric("baz", nil, nil, currentTime)
|
||||||
|
monthApply := dateFormatMonth.Apply(m1, m2, m3)
|
||||||
|
assert.Equal(t, map[string]string{"month": month}, monthApply[0].Tags(), "should add tag 'month'")
|
||||||
|
assert.Equal(t, map[string]string{"month": month}, monthApply[1].Tags(), "should add tag 'month'")
|
||||||
|
assert.Equal(t, map[string]string{"month": month}, monthApply[2].Tags(), "should add tag 'month'")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestYearTag(t *testing.T) {
|
||||||
|
dateFormatYear := Date{
|
||||||
|
TagKey: "year",
|
||||||
|
DateFormat: "2006",
|
||||||
|
}
|
||||||
|
currentTime := time.Now()
|
||||||
|
year := currentTime.Format("2006")
|
||||||
|
|
||||||
|
m4 := MustMetric("foo", nil, nil, currentTime)
|
||||||
|
m5 := MustMetric("bar", nil, nil, currentTime)
|
||||||
|
m6 := MustMetric("baz", nil, nil, currentTime)
|
||||||
|
yearApply := dateFormatYear.Apply(m4, m5, m6)
|
||||||
|
assert.Equal(t, map[string]string{"year": year}, yearApply[0].Tags(), "should add tag 'year'")
|
||||||
|
assert.Equal(t, map[string]string{"year": year}, yearApply[1].Tags(), "should add tag 'year'")
|
||||||
|
assert.Equal(t, map[string]string{"year": year}, yearApply[2].Tags(), "should add tag 'year'")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOldDateTag(t *testing.T) {
|
||||||
|
dateFormatYear := Date{
|
||||||
|
TagKey: "year",
|
||||||
|
DateFormat: "2006",
|
||||||
|
}
|
||||||
|
|
||||||
|
m7 := MustMetric("foo", nil, nil, time.Date(1993, 05, 27, 0, 0, 0, 0, time.UTC))
|
||||||
|
customDateApply := dateFormatYear.Apply(m7)
|
||||||
|
assert.Equal(t, map[string]string{"year": "1993"}, customDateApply[0].Tags(), "should add tag 'year'")
|
||||||
|
}
|
Loading…
Reference in New Issue