1
0
Fork 0
telegraf/plugins/processors/regex/regex.go

106 lines
2.4 KiB
Go
Raw Permalink Normal View History

//go:generate ../../../tools/readme_config_includer/generator
package regex
import (
_ "embed"
"fmt"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/processors"
)
//go:embed sample.conf
var sampleConfig string
type Regex struct {
Tags []converter `toml:"tags"`
Fields []converter `toml:"fields"`
TagRename []converter `toml:"tag_rename"`
FieldRename []converter `toml:"field_rename"`
MetricRename []converter `toml:"metric_rename"`
Log telegraf.Logger `toml:"-"`
}
func (*Regex) SampleConfig() string {
return sampleConfig
}
func (r *Regex) Init() error {
// Compile the regular expressions
for i := range r.Tags {
if err := r.Tags[i].setup(convertTags, r.Log); err != nil {
return fmt.Errorf("'tags' %w", err)
}
}
for i := range r.Fields {
if err := r.Fields[i].setup(convertFields, r.Log); err != nil {
return fmt.Errorf("'fields' %w", err)
}
}
for i, c := range r.TagRename {
if c.Key != "" {
r.Log.Info("'tag_rename' section contains a key which is ignored during processing")
}
if err := r.TagRename[i].setup(convertTagRename, r.Log); err != nil {
return fmt.Errorf("'tag_rename' %w", err)
}
}
for i, c := range r.FieldRename {
if c.Key != "" {
r.Log.Info("'field_rename' section contains a key which is ignored during processing")
}
if err := r.FieldRename[i].setup(convertFieldRename, r.Log); err != nil {
return fmt.Errorf("'field_rename' %w", err)
}
}
for i, c := range r.MetricRename {
if c.Key != "" {
r.Log.Info("'metric_rename' section contains a key which is ignored during processing")
}
if c.ResultKey != "" {
r.Log.Info("'metric_rename' section contains a 'result_key' ignored during processing as metrics will ALWAYS the name")
}
if err := r.MetricRename[i].setup(convertMetricRename, r.Log); err != nil {
return fmt.Errorf("'metric_rename' %w", err)
}
}
return nil
}
func (r *Regex) Apply(in ...telegraf.Metric) []telegraf.Metric {
for _, metric := range in {
for _, c := range r.Tags {
c.apply(metric)
}
for _, c := range r.Fields {
c.apply(metric)
}
for _, c := range r.TagRename {
c.apply(metric)
}
for _, c := range r.FieldRename {
c.apply(metric)
}
for _, c := range r.MetricRename {
c.apply(metric)
}
}
return in
}
func init() {
processors.Add("regex", func() telegraf.Processor { return &Regex{} })
}