chore(parsers.xpath): Add benchmark for protocol-buffer format (#14312)
This commit is contained in:
parent
33c4e76d91
commit
e79191a9b4
|
|
@ -1643,3 +1643,38 @@ func BenchmarkParsingJSON(b *testing.B) {
|
||||||
_, _ = plugin.Parse([]byte(benchmarkDataJSON))
|
_, _ = plugin.Parse([]byte(benchmarkDataJSON))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkParsingProtobuf(b *testing.B) {
|
||||||
|
plugin := &Parser{
|
||||||
|
DefaultMetricName: "benchmark",
|
||||||
|
Format: "xpath_protobuf",
|
||||||
|
ProtobufMessageDef: "benchmark.proto",
|
||||||
|
ProtobufMessageType: "benchmark.BenchmarkData",
|
||||||
|
ProtobufImportPaths: []string{".", "./testcases/protobuf_benchmark"},
|
||||||
|
NativeTypes: true,
|
||||||
|
Configs: []Config{
|
||||||
|
{
|
||||||
|
Selection: "//data",
|
||||||
|
Timestamp: "timestamp",
|
||||||
|
TimestampFmt: "unix_ns",
|
||||||
|
Tags: map[string]string{
|
||||||
|
"source": "source",
|
||||||
|
"tags_sdkver": "tags_sdkver",
|
||||||
|
"tags_platform": "tags_platform",
|
||||||
|
},
|
||||||
|
Fields: map[string]string{
|
||||||
|
"value": "value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Log: testutil.Logger{Name: "parsers.xpath", Quiet: true},
|
||||||
|
}
|
||||||
|
require.NoError(b, plugin.Init())
|
||||||
|
|
||||||
|
benchmarkData, err := os.ReadFile(filepath.Join("testcases", "protobuf_benchmark", "message.bin"))
|
||||||
|
require.NoError(b, err)
|
||||||
|
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
_, _ = plugin.Parse(benchmarkData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package benchmark;
|
||||||
|
|
||||||
|
message Entry {
|
||||||
|
string source = 1;
|
||||||
|
string tags_sdkver = 2;
|
||||||
|
string tags_platform = 3;
|
||||||
|
double value = 4;
|
||||||
|
uint64 timestamp = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BenchmarkData {
|
||||||
|
repeated Entry data = 1;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
benchmark,source=myhost,tags_platform=python,tags_sdkver=3.11.5 value=5.0 1653643421000000000
|
||||||
|
benchmark,source=myhost,tags_platform=python,tags_sdkver=3.11.4 value=4.0 1653643421000000000
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,24 @@
|
||||||
|
[[inputs.file]]
|
||||||
|
files = ["./testcases/protobuf_benchmark/message.bin"]
|
||||||
|
data_format = "xpath_protobuf"
|
||||||
|
|
||||||
|
xpath_protobuf_file = "benchmark.proto"
|
||||||
|
xpath_protobuf_type = "benchmark.BenchmarkData"
|
||||||
|
xpath_protobuf_import_paths = [".", "./testcases/protobuf_benchmark"]
|
||||||
|
|
||||||
|
xpath_native_types = true
|
||||||
|
|
||||||
|
[[inputs.file.xpath]]
|
||||||
|
metric_name = "'benchmark'"
|
||||||
|
metric_selection = "//data"
|
||||||
|
|
||||||
|
timestamp = "timestamp"
|
||||||
|
timestamp_format = "unix_ns"
|
||||||
|
|
||||||
|
[inputs.file.xpath.tags]
|
||||||
|
source = "source"
|
||||||
|
tags_sdkver = "tags_sdkver"
|
||||||
|
tags_platform = "tags_platform"
|
||||||
|
|
||||||
|
[inputs.file.xpath.fields]
|
||||||
|
value = "value"
|
||||||
|
|
@ -10,7 +10,8 @@ var _ telegraf.Logger = &Logger{}
|
||||||
|
|
||||||
// Logger defines a logging structure for plugins.
|
// Logger defines a logging structure for plugins.
|
||||||
type Logger struct {
|
type Logger struct {
|
||||||
Name string // Name is the plugin name, will be printed in the `[]`.
|
Name string // Name is the plugin name, will be printed in the `[]`.
|
||||||
|
Quiet bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Errorf logs an error message, patterned after log.Printf.
|
// Errorf logs an error message, patterned after log.Printf.
|
||||||
|
|
@ -25,12 +26,16 @@ func (l Logger) Error(args ...interface{}) {
|
||||||
|
|
||||||
// Debugf logs a debug message, patterned after log.Printf.
|
// Debugf logs a debug message, patterned after log.Printf.
|
||||||
func (l Logger) Debugf(format string, args ...interface{}) {
|
func (l Logger) Debugf(format string, args ...interface{}) {
|
||||||
log.Printf("D! ["+l.Name+"] "+format, args...)
|
if !l.Quiet {
|
||||||
|
log.Printf("D! ["+l.Name+"] "+format, args...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debug logs a debug message, patterned after log.Print.
|
// Debug logs a debug message, patterned after log.Print.
|
||||||
func (l Logger) Debug(args ...interface{}) {
|
func (l Logger) Debug(args ...interface{}) {
|
||||||
log.Print(append([]interface{}{"D! [" + l.Name + "] "}, args...)...)
|
if !l.Quiet {
|
||||||
|
log.Print(append([]interface{}{"D! [" + l.Name + "] "}, args...)...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Warnf logs a warning message, patterned after log.Printf.
|
// Warnf logs a warning message, patterned after log.Printf.
|
||||||
|
|
@ -45,10 +50,14 @@ func (l Logger) Warn(args ...interface{}) {
|
||||||
|
|
||||||
// Infof logs an information message, patterned after log.Printf.
|
// Infof logs an information message, patterned after log.Printf.
|
||||||
func (l Logger) Infof(format string, args ...interface{}) {
|
func (l Logger) Infof(format string, args ...interface{}) {
|
||||||
log.Printf("I! ["+l.Name+"] "+format, args...)
|
if !l.Quiet {
|
||||||
|
log.Printf("I! ["+l.Name+"] "+format, args...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info logs an information message, patterned after log.Print.
|
// Info logs an information message, patterned after log.Print.
|
||||||
func (l Logger) Info(args ...interface{}) {
|
func (l Logger) Info(args ...interface{}) {
|
||||||
log.Print(append([]interface{}{"I! [" + l.Name + "] "}, args...)...)
|
if !l.Quiet {
|
||||||
|
log.Print(append([]interface{}{"I! [" + l.Name + "] "}, args...)...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue