chore: Add benchmark tests for XML and JSON xpath (#14304)
This commit is contained in:
parent
a4f8b450d2
commit
3a97339cd4
|
|
@ -14,6 +14,7 @@ import (
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/config"
|
"github.com/influxdata/telegraf/config"
|
||||||
|
"github.com/influxdata/telegraf/metric"
|
||||||
"github.com/influxdata/telegraf/plugins/inputs"
|
"github.com/influxdata/telegraf/plugins/inputs"
|
||||||
"github.com/influxdata/telegraf/plugins/inputs/file"
|
"github.com/influxdata/telegraf/plugins/inputs/file"
|
||||||
"github.com/influxdata/telegraf/plugins/parsers/influx"
|
"github.com/influxdata/telegraf/plugins/parsers/influx"
|
||||||
|
|
@ -1494,3 +1495,151 @@ func loadTestConfiguration(filename string) (*Config, []string, error) {
|
||||||
err = toml.Unmarshal(buf, &cfg)
|
err = toml.Unmarshal(buf, &cfg)
|
||||||
return &cfg, header, err
|
return &cfg, header, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var benchmarkExpectedMetrics = []telegraf.Metric{
|
||||||
|
metric.New(
|
||||||
|
"benchmark",
|
||||||
|
map[string]string{
|
||||||
|
"tags_host": "myhost",
|
||||||
|
"tags_platform": "python",
|
||||||
|
"tags_sdkver": "3.11.5",
|
||||||
|
},
|
||||||
|
map[string]interface{}{
|
||||||
|
"value": 5.0,
|
||||||
|
},
|
||||||
|
time.Unix(1577923199, 0),
|
||||||
|
),
|
||||||
|
metric.New(
|
||||||
|
"benchmark",
|
||||||
|
map[string]string{
|
||||||
|
"tags_host": "myhost",
|
||||||
|
"tags_platform": "python",
|
||||||
|
"tags_sdkver": "3.11.4",
|
||||||
|
},
|
||||||
|
map[string]interface{}{
|
||||||
|
"value": 4.0,
|
||||||
|
},
|
||||||
|
time.Unix(1577923199, 0),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
const benchmarkDataXML = `
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<Timestamp value="1577923199"/>
|
||||||
|
<Benchmark>
|
||||||
|
<tags_host>myhost</tags_host>
|
||||||
|
<tags_sdkver>3.11.5</tags_sdkver>
|
||||||
|
<tags_platform>python</tags_platform>
|
||||||
|
<value>5</value>
|
||||||
|
</Benchmark>
|
||||||
|
<Benchmark>
|
||||||
|
<tags_host>myhost</tags_host>
|
||||||
|
<tags_sdkver>3.11.4</tags_sdkver>
|
||||||
|
<tags_platform>python</tags_platform>
|
||||||
|
<value>4</value>
|
||||||
|
</Benchmark>
|
||||||
|
`
|
||||||
|
|
||||||
|
var benchmarkConfigXML = Config{
|
||||||
|
Selection: "/Benchmark",
|
||||||
|
Tags: map[string]string{
|
||||||
|
"tags_host": "tags_host",
|
||||||
|
"tags_sdkver": "tags_sdkver",
|
||||||
|
"tags_platform": "tags_platform",
|
||||||
|
},
|
||||||
|
Fields: map[string]string{
|
||||||
|
"value": "number(value)",
|
||||||
|
},
|
||||||
|
Timestamp: "/Timestamp/@value",
|
||||||
|
TimestampFmt: "unix",
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBenchmarkDataXML(t *testing.T) {
|
||||||
|
plugin := &Parser{
|
||||||
|
DefaultMetricName: "benchmark",
|
||||||
|
Format: "xml",
|
||||||
|
Configs: []Config{benchmarkConfigXML},
|
||||||
|
Log: testutil.Logger{Name: "parsers.xpath"},
|
||||||
|
}
|
||||||
|
require.NoError(t, plugin.Init())
|
||||||
|
|
||||||
|
actual, err := plugin.Parse([]byte(benchmarkDataXML))
|
||||||
|
require.NoError(t, err)
|
||||||
|
testutil.RequireMetricsEqual(t, benchmarkExpectedMetrics, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkParsingXML(b *testing.B) {
|
||||||
|
plugin := &Parser{
|
||||||
|
DefaultMetricName: "benchmark",
|
||||||
|
Format: "xml",
|
||||||
|
Configs: []Config{benchmarkConfigXML},
|
||||||
|
Log: testutil.Logger{Name: "parsers.xpath"},
|
||||||
|
}
|
||||||
|
require.NoError(b, plugin.Init())
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
_, _ = plugin.Parse([]byte(benchmarkDataXML))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const benchmarkDataJSON = `
|
||||||
|
{
|
||||||
|
"timestamp": 1577923199,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"tags_host": "myhost",
|
||||||
|
"tags_sdkver": "3.11.5",
|
||||||
|
"tags_platform": "python",
|
||||||
|
"value": 5.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tags_host": "myhost",
|
||||||
|
"tags_sdkver": "3.11.4",
|
||||||
|
"tags_platform": "python",
|
||||||
|
"value": 4.0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
var benchmarkConfigJSON = Config{
|
||||||
|
Selection: "data/*",
|
||||||
|
Tags: map[string]string{
|
||||||
|
"tags_host": "tags_host",
|
||||||
|
"tags_sdkver": "tags_sdkver",
|
||||||
|
"tags_platform": "tags_platform",
|
||||||
|
},
|
||||||
|
Fields: map[string]string{
|
||||||
|
"value": "number(value)",
|
||||||
|
},
|
||||||
|
Timestamp: "//timestamp",
|
||||||
|
TimestampFmt: "unix",
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBenchmarkDataJSON(t *testing.T) {
|
||||||
|
plugin := &Parser{
|
||||||
|
DefaultMetricName: "benchmark",
|
||||||
|
Format: "xpath_json",
|
||||||
|
Configs: []Config{benchmarkConfigJSON},
|
||||||
|
Log: testutil.Logger{Name: "parsers.xpath"},
|
||||||
|
}
|
||||||
|
require.NoError(t, plugin.Init())
|
||||||
|
|
||||||
|
actual, err := plugin.Parse([]byte(benchmarkDataJSON))
|
||||||
|
require.NoError(t, err)
|
||||||
|
testutil.RequireMetricsEqual(t, benchmarkExpectedMetrics, actual)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkParsingJSON(b *testing.B) {
|
||||||
|
plugin := &Parser{
|
||||||
|
DefaultMetricName: "benchmark",
|
||||||
|
Format: "xpath_json",
|
||||||
|
Configs: []Config{benchmarkConfigJSON},
|
||||||
|
Log: testutil.Logger{Name: "parsers.xpath"},
|
||||||
|
}
|
||||||
|
require.NoError(b, plugin.Init())
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
_, _ = plugin.Parse([]byte(benchmarkDataJSON))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue