chore(processors.regex): Inform and warn user on operation modus (#14084)

This commit is contained in:
Sven Rebhan 2023-10-16 15:25:52 +02:00 committed by GitHub
parent 7adcc701f9
commit efe7112ef9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 31 deletions

View File

@ -9,7 +9,46 @@ import (
"github.com/influxdata/telegraf/filter"
)
func (c *converter) setup(ct converterType) error {
type converterType int
const (
convertTags = iota
convertFields
convertTagRename
convertFieldRename
convertMetricRename
)
func (ct converterType) String() string {
switch ct {
case convertTags:
return "tags"
case convertFields:
return "fields"
case convertTagRename:
return "tag_rename"
case convertFieldRename:
return "field_rename"
case convertMetricRename:
return "metric_rename"
}
return fmt.Sprintf("unknown %d", int(ct))
}
type converter struct {
Key string `toml:"key"`
Pattern string `toml:"pattern"`
Replacement string `toml:"replacement"`
ResultKey string `toml:"result_key"`
Append bool `toml:"append"`
filter filter.Filter
re *regexp.Regexp
groups []string
apply func(m telegraf.Metric)
}
func (c *converter) setup(ct converterType, log telegraf.Logger) error {
// Compile the pattern
re, err := regexp.Compile(c.Pattern)
if err != nil {
@ -39,8 +78,15 @@ func (c *converter) setup(ct converterType) error {
}
}
if allNamed {
log.Infof("%s: Using named-group mode...", ct)
c.groups = groups[1:]
} else {
msg := "Neither 'result_key' nor 'replacement' given with unnamed or mixed groups;"
msg += " using explicit, empty replacement!"
log.Warnf("%s: %s", ct, msg)
}
} else {
log.Infof("%s: Using explicit mode...", ct)
}
case convertTagRename, convertFieldRename:
switch c.ResultKey {

View File

@ -4,26 +4,14 @@ package regex
import (
_ "embed"
"fmt"
"regexp"
"github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/filter"
"github.com/influxdata/telegraf/plugins/processors"
)
//go:embed sample.conf
var sampleConfig string
type converterType int
const (
convertTags = iota
convertFields
convertTagRename
convertFieldRename
convertMetricRename
)
type Regex struct {
Tags []converter `toml:"tags"`
Fields []converter `toml:"fields"`
@ -33,19 +21,6 @@ type Regex struct {
Log telegraf.Logger `toml:"-"`
}
type converter struct {
Key string `toml:"key"`
Pattern string `toml:"pattern"`
Replacement string `toml:"replacement"`
ResultKey string `toml:"result_key"`
Append bool `toml:"append"`
filter filter.Filter
re *regexp.Regexp
groups []string
apply func(m telegraf.Metric)
}
func (*Regex) SampleConfig() string {
return sampleConfig
}
@ -53,12 +28,12 @@ func (*Regex) SampleConfig() string {
func (r *Regex) Init() error {
// Compile the regular expressions
for i := range r.Tags {
if err := r.Tags[i].setup(convertTags); err != nil {
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); err != nil {
if err := r.Fields[i].setup(convertFields, r.Log); err != nil {
return fmt.Errorf("'fields' %w", err)
}
}
@ -67,7 +42,7 @@ func (r *Regex) Init() error {
if c.Key != "" {
r.Log.Info("'tag_rename' section contains a key which is ignored during processing")
}
if err := r.TagRename[i].setup(convertTagRename); err != nil {
if err := r.TagRename[i].setup(convertTagRename, r.Log); err != nil {
return fmt.Errorf("'tag_rename' %w", err)
}
}
@ -77,7 +52,7 @@ func (r *Regex) Init() error {
r.Log.Info("'field_rename' section contains a key which is ignored during processing")
}
if err := r.FieldRename[i].setup(convertFieldRename); err != nil {
if err := r.FieldRename[i].setup(convertFieldRename, r.Log); err != nil {
return fmt.Errorf("'field_rename' %w", err)
}
}
@ -91,7 +66,7 @@ func (r *Regex) Init() error {
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); err != nil {
if err := r.MetricRename[i].setup(convertMetricRename, r.Log); err != nil {
return fmt.Errorf("'metric_rename' %w", err)
}
}