chore(parser.json_v2): Error out if no config is provided (#15844)
This commit is contained in:
parent
2e056a8701
commit
53fb5adac2
|
|
@ -14,6 +14,9 @@
|
||||||
As a consequence the redunant `logtarget` setting is deprecated, `stderr` is
|
As a consequence the redunant `logtarget` setting is deprecated, `stderr` is
|
||||||
used if no `logfile` is provided, otherwise messages are logged to the given
|
used if no `logfile` is provided, otherwise messages are logged to the given
|
||||||
file. For using the Windows `eventlog` set `logformat = "eventlog"`!
|
file. For using the Windows `eventlog` set `logformat = "eventlog"`!
|
||||||
|
- This release contains a change in json_v2 parser config parsing -
|
||||||
|
if the config is empty (not define any rules), initialization will fail
|
||||||
|
(see PR [#15844](https://github.com/influxdata/telegraf/pull/15844)).
|
||||||
|
|
||||||
## v1.31.3 [2024-08-12]
|
## v1.31.3 [2024-08-12]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import (
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"github.com/google/go-cmp/cmp/cmpopts"
|
"github.com/google/go-cmp/cmp/cmpopts"
|
||||||
|
"github.com/influxdata/telegraf/plugins/parsers/json_v2"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
|
|
@ -833,6 +834,18 @@ func TestConfig_ParserInterface(t *testing.T) {
|
||||||
"ProtobufMessageType": "addressbook.AddressBook",
|
"ProtobufMessageType": "addressbook.AddressBook",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"json_v2": {
|
||||||
|
param: map[string]interface{}{
|
||||||
|
"Configs": []json_v2.Config{{
|
||||||
|
Fields: []json_v2.DataSet{{
|
||||||
|
Path: "",
|
||||||
|
Type: "int",
|
||||||
|
Rename: "",
|
||||||
|
Optional: false,
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
expected := make([]telegraf.Parser, 0, len(formats))
|
expected := make([]telegraf.Parser, 0, len(formats))
|
||||||
|
|
@ -1039,6 +1052,18 @@ func TestConfig_ProcessorsWithParsers(t *testing.T) {
|
||||||
"ProtobufMessageType": "addressbook.AddressBook",
|
"ProtobufMessageType": "addressbook.AddressBook",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"json_v2": {
|
||||||
|
param: map[string]interface{}{
|
||||||
|
"Configs": []json_v2.Config{{
|
||||||
|
Fields: []json_v2.DataSet{{
|
||||||
|
Path: "",
|
||||||
|
Type: "int",
|
||||||
|
Rename: "",
|
||||||
|
Optional: false,
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
expected := make([]telegraf.Parser, 0, len(formats))
|
expected := make([]telegraf.Parser, 0, len(formats))
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,11 @@
|
||||||
|
|
||||||
[[inputs.parser_test_new]]
|
[[inputs.parser_test_new]]
|
||||||
data_format = "json_v2"
|
data_format = "json_v2"
|
||||||
|
[[inputs.parser_test_new.json_v2]]
|
||||||
|
[[inputs.parser_test_new.json_v2.field]]
|
||||||
|
path = ""
|
||||||
|
rename = ""
|
||||||
|
type = "int"
|
||||||
|
|
||||||
[[inputs.parser_test_new]]
|
[[inputs.parser_test_new]]
|
||||||
data_format = "logfmt"
|
data_format = "logfmt"
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,11 @@
|
||||||
|
|
||||||
[[processors.parser_test]]
|
[[processors.parser_test]]
|
||||||
data_format = "json_v2"
|
data_format = "json_v2"
|
||||||
|
[[processors.parser_test.json_v2]]
|
||||||
|
[[processors.parser_test.json_v2.field]]
|
||||||
|
path = ""
|
||||||
|
rename = ""
|
||||||
|
type = "int"
|
||||||
|
|
||||||
[[processors.parser_test]]
|
[[processors.parser_test]]
|
||||||
data_format = "logfmt"
|
data_format = "logfmt"
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,9 @@ type MetricNode struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Parser) Init() error {
|
func (p *Parser) Init() error {
|
||||||
|
if len(p.Configs) == 0 {
|
||||||
|
return errors.New("no configuration provided")
|
||||||
|
}
|
||||||
// Propagate the default metric name to the configs in case it is not set there
|
// Propagate the default metric name to the configs in case it is not set there
|
||||||
for i, cfg := range p.Configs {
|
for i, cfg := range p.Configs {
|
||||||
if cfg.MeasurementName == "" {
|
if cfg.MeasurementName == "" {
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,14 @@ func TestMultipleConfigs(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParserEmptyConfig(t *testing.T) {
|
||||||
|
plugin := &json_v2.Parser{
|
||||||
|
Configs: []json_v2.Config{},
|
||||||
|
}
|
||||||
|
|
||||||
|
require.ErrorContains(t, plugin.Init(), "no configuration provided")
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkParsingSequential(b *testing.B) {
|
func BenchmarkParsingSequential(b *testing.B) {
|
||||||
inputFilename := filepath.Join("testdata", "benchmark", "input.json")
|
inputFilename := filepath.Join("testdata", "benchmark", "input.json")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue