feat: migrate form_urlencoded parser to new style (#11381)
This commit is contained in:
parent
bd516ae587
commit
b638c5353f
|
|
@ -1428,7 +1428,6 @@ func (c *Config) missingTomlField(_ reflect.Type, key string) error {
|
|||
// "templates", // shared with serializers
|
||||
"dropwizard_metric_registry_path", "dropwizard_tags_path", "dropwizard_tag_paths",
|
||||
"dropwizard_time_format", "dropwizard_time_path",
|
||||
"form_urlencoded_tag_keys",
|
||||
"grok_custom_pattern_files", "grok_custom_patterns", "grok_named_patterns", "grok_patterns",
|
||||
"grok_timezone", "grok_unique_timestamp",
|
||||
"influx_parser_type",
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ import (
|
|||
|
||||
"github.com/influxdata/telegraf/config"
|
||||
"github.com/influxdata/telegraf/plugins/parsers"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/form_urlencoded"
|
||||
"github.com/influxdata/telegraf/testutil"
|
||||
)
|
||||
|
||||
|
|
@ -592,10 +593,14 @@ func TestWriteHTTPTransformHeaderValuesToTagsBulkWrite(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestWriteHTTPQueryParams(t *testing.T) {
|
||||
parser, _ := parsers.NewFormUrlencodedParser("query_measurement", nil, []string{"tagKey"})
|
||||
parser := form_urlencoded.Parser{
|
||||
MetricName: "query_measurement",
|
||||
TagKeys: []string{"tagKey"},
|
||||
}
|
||||
|
||||
listener := newTestHTTPListenerV2()
|
||||
listener.DataSource = "query"
|
||||
listener.Parser = parser
|
||||
listener.Parser = &parser
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, listener.Init())
|
||||
|
|
@ -615,9 +620,13 @@ func TestWriteHTTPQueryParams(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestWriteHTTPFormData(t *testing.T) {
|
||||
parser, _ := parsers.NewFormUrlencodedParser("query_measurement", nil, []string{"tagKey"})
|
||||
parser := form_urlencoded.Parser{
|
||||
MetricName: "query_measurement",
|
||||
TagKeys: []string{"tagKey"},
|
||||
}
|
||||
|
||||
listener := newTestHTTPListenerV2()
|
||||
listener.Parser = parser
|
||||
listener.Parser = &parser
|
||||
|
||||
acc := &testutil.Accumulator{}
|
||||
require.NoError(t, listener.Init())
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
//Blank imports for plugins to register themselves
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/collectd"
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/csv"
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/form_urlencoded"
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/json"
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/json_v2"
|
||||
_ "github.com/influxdata/telegraf/plugins/parsers/wavefront"
|
||||
|
|
|
|||
|
|
@ -9,19 +9,16 @@ import (
|
|||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/metric"
|
||||
"github.com/influxdata/telegraf/plugins/parsers"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrNoMetric is returned when no metric is found in input line
|
||||
ErrNoMetric = fmt.Errorf("no metric in line")
|
||||
)
|
||||
var ErrNoMetric = fmt.Errorf("no metric in line")
|
||||
|
||||
// Parser decodes "application/x-www-form-urlencoded" data into metrics
|
||||
type Parser struct {
|
||||
MetricName string
|
||||
DefaultTags map[string]string
|
||||
TagKeys []string
|
||||
AllowedKeys []string
|
||||
MetricName string `toml:"-"`
|
||||
TagKeys []string `toml:"form_urlencoded_tag_keys"`
|
||||
DefaultTags map[string]string `toml:"-"`
|
||||
}
|
||||
|
||||
// Parse converts a slice of bytes in "application/x-www-form-urlencoded" format into metrics
|
||||
|
|
@ -36,10 +33,6 @@ func (p Parser) Parse(buf []byte) ([]telegraf.Metric, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if len(p.AllowedKeys) > 0 {
|
||||
values = p.filterAllowedKeys(values)
|
||||
}
|
||||
|
||||
tags := p.extractTags(values)
|
||||
fields := p.parseFields(values)
|
||||
|
||||
|
|
@ -71,21 +64,6 @@ func (p *Parser) SetDefaultTags(tags map[string]string) {
|
|||
p.DefaultTags = tags
|
||||
}
|
||||
|
||||
func (p Parser) filterAllowedKeys(original url.Values) url.Values {
|
||||
result := make(url.Values)
|
||||
|
||||
for _, key := range p.AllowedKeys {
|
||||
value, exists := original[key]
|
||||
if !exists {
|
||||
continue
|
||||
}
|
||||
|
||||
result[key] = value
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func (p Parser) extractTags(values url.Values) map[string]string {
|
||||
tags := make(map[string]string)
|
||||
for _, key := range p.TagKeys {
|
||||
|
|
@ -120,3 +98,16 @@ func (p Parser) parseFields(values url.Values) map[string]interface{} {
|
|||
|
||||
return fields
|
||||
}
|
||||
|
||||
func (p *Parser) InitFromConfig(config *parsers.Config) error {
|
||||
p.MetricName = config.MetricName
|
||||
p.TagKeys = config.FormUrlencodedTagKeys
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
parsers.Add("form_urlencoded",
|
||||
func(defaultMetricName string) telegraf.Parser {
|
||||
return &Parser{MetricName: defaultMetricName}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import (
|
|||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/dropwizard"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/form_urlencoded"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/graphite"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/grok"
|
||||
"github.com/influxdata/telegraf/plugins/parsers/influx"
|
||||
|
|
@ -238,12 +237,6 @@ func NewParser(config *Config) (Parser, error) {
|
|||
config.GrokUniqueTimestamp)
|
||||
case "logfmt":
|
||||
parser, err = NewLogFmtParser(config.MetricName, config.DefaultTags, config.LogFmtTagKeys)
|
||||
case "form_urlencoded":
|
||||
parser, err = NewFormUrlencodedParser(
|
||||
config.MetricName,
|
||||
config.DefaultTags,
|
||||
config.FormUrlencodedTagKeys,
|
||||
)
|
||||
case "prometheus":
|
||||
parser, err = NewPrometheusParser(
|
||||
config.DefaultTags,
|
||||
|
|
@ -349,18 +342,6 @@ func NewLogFmtParser(metricName string, defaultTags map[string]string, tagKeys [
|
|||
return parser, err
|
||||
}
|
||||
|
||||
func NewFormUrlencodedParser(
|
||||
metricName string,
|
||||
defaultTags map[string]string,
|
||||
tagKeys []string,
|
||||
) (Parser, error) {
|
||||
return &form_urlencoded.Parser{
|
||||
MetricName: metricName,
|
||||
DefaultTags: defaultTags,
|
||||
TagKeys: tagKeys,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func NewPrometheusParser(defaultTags map[string]string, ignoreTimestamp bool) (Parser, error) {
|
||||
return &prometheus.Parser{
|
||||
DefaultTags: defaultTags,
|
||||
|
|
|
|||
Loading…
Reference in New Issue