From 685021d7d7389d6eaccebccda3f6bec442a81303 Mon Sep 17 00:00:00 2001 From: btaani Date: Wed, 22 Feb 2023 11:46:30 +0100 Subject: [PATCH] Use one struct for Logfmt and JSON Expressions --- pkg/logql/log/json_expr.go | 13 --- pkg/logql/log/logfmt_expr.go | 13 --- pkg/logql/log/parser.go | 4 +- pkg/logql/log/parser_test.go | 148 ++++++++++++++++---------------- pkg/logql/log/pipeline_test.go | 12 +-- pkg/logql/log/xxx_expr.go | 13 +++ pkg/logql/syntax/ast.go | 8 +- pkg/logql/syntax/expr.y | 20 ++--- pkg/logql/syntax/expr.y.go | 20 ++--- pkg/logql/syntax/parser_test.go | 52 +++++------ 10 files changed, 145 insertions(+), 158 deletions(-) delete mode 100644 pkg/logql/log/json_expr.go delete mode 100644 pkg/logql/log/logfmt_expr.go create mode 100644 pkg/logql/log/xxx_expr.go diff --git a/pkg/logql/log/json_expr.go b/pkg/logql/log/json_expr.go deleted file mode 100644 index 81207e13fd05..000000000000 --- a/pkg/logql/log/json_expr.go +++ /dev/null @@ -1,13 +0,0 @@ -package log - -type JSONExpression struct { - Identifier string - Expression string -} - -func NewJSONExpr(identifier, expression string) JSONExpression { - return JSONExpression{ - Identifier: identifier, - Expression: expression, - } -} diff --git a/pkg/logql/log/logfmt_expr.go b/pkg/logql/log/logfmt_expr.go deleted file mode 100644 index 0112f4b09384..000000000000 --- a/pkg/logql/log/logfmt_expr.go +++ /dev/null @@ -1,13 +0,0 @@ -package log - -type LogfmtExpression struct { - Identifier string - Expression string -} - -func NewLogfmtExpr(identifier, expression string) LogfmtExpression { - return LogfmtExpression{ - Identifier: identifier, - Expression: expression, - } -} diff --git a/pkg/logql/log/parser.go b/pkg/logql/log/parser.go index b1c279c3a3b2..7e2781e265c7 100644 --- a/pkg/logql/log/parser.go +++ b/pkg/logql/log/parser.go @@ -347,7 +347,7 @@ type LogfmtExpressionParser struct { keys internedStringSet } -func NewLogfmtExpressionParser(expressions []LogfmtExpression) (*LogfmtExpressionParser, error) { +func NewLogfmtExpressionParser(expressions []XExpression) (*LogfmtExpressionParser, error) { if len(expressions) == 0 { return nil, fmt.Errorf("no logfmt expression provided") } @@ -447,7 +447,7 @@ type JSONExpressionParser struct { keys internedStringSet } -func NewJSONExpressionParser(expressions []JSONExpression) (*JSONExpressionParser, error) { +func NewJSONExpressionParser(expressions []XExpression) (*JSONExpressionParser, error) { paths := make(map[string][]interface{}) for _, exp := range expressions { diff --git a/pkg/logql/log/parser_test.go b/pkg/logql/log/parser_test.go index 9439c3b711ae..e9ab7f92be39 100644 --- a/pkg/logql/log/parser_test.go +++ b/pkg/logql/log/parser_test.go @@ -117,15 +117,15 @@ func TestJSONExpressionParser(t *testing.T) { tests := []struct { name string line []byte - expressions []JSONExpression + expressions []XExpression lbs labels.Labels want labels.Labels }{ { "single field", testLine, - []JSONExpression{ - NewJSONExpr("app", "app"), + []XExpression{ + NewXExpr("app", "app"), }, labels.Labels{}, labels.Labels{ @@ -135,8 +135,8 @@ func TestJSONExpressionParser(t *testing.T) { { "alternate syntax", testLine, - []JSONExpression{ - NewJSONExpr("test", `["field with space"]`), + []XExpression{ + NewXExpr("test", `["field with space"]`), }, labels.Labels{}, labels.Labels{ @@ -146,9 +146,9 @@ func TestJSONExpressionParser(t *testing.T) { { "multiple fields", testLine, - []JSONExpression{ - NewJSONExpr("app", "app"), - NewJSONExpr("namespace", "namespace"), + []XExpression{ + NewXExpr("app", "app"), + NewXExpr("namespace", "namespace"), }, labels.Labels{}, labels.Labels{ @@ -159,8 +159,8 @@ func TestJSONExpressionParser(t *testing.T) { { "utf8", testLine, - []JSONExpression{ - NewJSONExpr("utf8", `["field with ÜFT8👌"]`), + []XExpression{ + NewXExpr("utf8", `["field with ÜFT8👌"]`), }, labels.Labels{}, labels.Labels{ @@ -170,8 +170,8 @@ func TestJSONExpressionParser(t *testing.T) { { "nested field", testLine, - []JSONExpression{ - NewJSONExpr("uuid", "pod.uuid"), + []XExpression{ + NewXExpr("uuid", "pod.uuid"), }, labels.Labels{}, labels.Labels{ @@ -181,8 +181,8 @@ func TestJSONExpressionParser(t *testing.T) { { "nested field alternate syntax", testLine, - []JSONExpression{ - NewJSONExpr("uuid", `pod["uuid"]`), + []XExpression{ + NewXExpr("uuid", `pod["uuid"]`), }, labels.Labels{}, labels.Labels{ @@ -192,8 +192,8 @@ func TestJSONExpressionParser(t *testing.T) { { "nested field alternate syntax 2", testLine, - []JSONExpression{ - NewJSONExpr("uuid", `["pod"]["uuid"]`), + []XExpression{ + NewXExpr("uuid", `["pod"]["uuid"]`), }, labels.Labels{}, labels.Labels{ @@ -203,8 +203,8 @@ func TestJSONExpressionParser(t *testing.T) { { "nested field alternate syntax 3", testLine, - []JSONExpression{ - NewJSONExpr("uuid", `["pod"].uuid`), + []XExpression{ + NewXExpr("uuid", `["pod"].uuid`), }, labels.Labels{}, labels.Labels{ @@ -214,8 +214,8 @@ func TestJSONExpressionParser(t *testing.T) { { "array element", testLine, - []JSONExpression{ - NewJSONExpr("param", `pod.deployment.params[0]`), + []XExpression{ + NewXExpr("param", `pod.deployment.params[0]`), }, labels.Labels{}, labels.Labels{ @@ -225,8 +225,8 @@ func TestJSONExpressionParser(t *testing.T) { { "full array", testLine, - []JSONExpression{ - NewJSONExpr("params", `pod.deployment.params`), + []XExpression{ + NewXExpr("params", `pod.deployment.params`), }, labels.Labels{}, labels.Labels{ @@ -236,8 +236,8 @@ func TestJSONExpressionParser(t *testing.T) { { "full object", testLine, - []JSONExpression{ - NewJSONExpr("deployment", `pod.deployment`), + []XExpression{ + NewXExpr("deployment", `pod.deployment`), }, labels.Labels{}, labels.Labels{ @@ -247,8 +247,8 @@ func TestJSONExpressionParser(t *testing.T) { { "expression matching nothing", testLine, - []JSONExpression{ - NewJSONExpr("nope", `pod.nope`), + []XExpression{ + NewXExpr("nope", `pod.nope`), }, labels.Labels{}, labels.Labels{ @@ -258,8 +258,8 @@ func TestJSONExpressionParser(t *testing.T) { { "null field", testLine, - []JSONExpression{ - NewJSONExpr("nf", `null_field`), + []XExpression{ + NewXExpr("nf", `null_field`), }, labels.Labels{}, labels.Labels{ @@ -269,8 +269,8 @@ func TestJSONExpressionParser(t *testing.T) { { "boolean field", testLine, - []JSONExpression{ - NewJSONExpr("bool", `bool_field`), + []XExpression{ + NewXExpr("bool", `bool_field`), }, labels.Labels{}, labels.Labels{ @@ -280,8 +280,8 @@ func TestJSONExpressionParser(t *testing.T) { { "label override", testLine, - []JSONExpression{ - NewJSONExpr("uuid", `pod.uuid`), + []XExpression{ + NewXExpr("uuid", `pod.uuid`), }, labels.Labels{ {Name: "uuid", Value: "bar"}, @@ -294,8 +294,8 @@ func TestJSONExpressionParser(t *testing.T) { { "non-matching expression", testLine, - []JSONExpression{ - NewJSONExpr("request_size", `request.size.invalid`), + []XExpression{ + NewXExpr("request_size", `request.size.invalid`), }, labels.Labels{ {Name: "uuid", Value: "bar"}, @@ -308,8 +308,8 @@ func TestJSONExpressionParser(t *testing.T) { { "empty line", []byte("{}"), - []JSONExpression{ - NewJSONExpr("uuid", `pod.uuid`), + []XExpression{ + NewXExpr("uuid", `pod.uuid`), }, labels.Labels{}, labels.Labels{ @@ -319,8 +319,8 @@ func TestJSONExpressionParser(t *testing.T) { { "existing labels are not affected", testLine, - []JSONExpression{ - NewJSONExpr("uuid", `will.not.work`), + []XExpression{ + NewXExpr("uuid", `will.not.work`), }, labels.Labels{ {Name: "foo", Value: "bar"}, @@ -333,8 +333,8 @@ func TestJSONExpressionParser(t *testing.T) { { "invalid JSON line", []byte(`invalid json`), - []JSONExpression{ - NewJSONExpr("uuid", `will.not.work`), + []XExpression{ + NewXExpr("uuid", `will.not.work`), }, labels.Labels{ {Name: "foo", Value: "bar"}, @@ -363,38 +363,38 @@ func TestJSONExpressionParser(t *testing.T) { func TestJSONExpressionParserFailures(t *testing.T) { tests := []struct { name string - expression JSONExpression + expression XExpression error string }{ { "invalid field name", - NewJSONExpr("app", `field with space`), + NewXExpr("app", `field with space`), "unexpected FIELD", }, { "missing opening square bracket", - NewJSONExpr("app", `"pod"]`), + NewXExpr("app", `"pod"]`), "unexpected STRING, expecting LSB or FIELD", }, { "missing closing square bracket", - NewJSONExpr("app", `["pod"`), + NewXExpr("app", `["pod"`), "unexpected $end, expecting RSB", }, { "missing closing square bracket", - NewJSONExpr("app", `["pod""uuid"]`), + NewXExpr("app", `["pod""uuid"]`), "unexpected STRING, expecting RSB", }, { "invalid nesting", - NewJSONExpr("app", `pod..uuid`), + NewXExpr("app", `pod..uuid`), "unexpected DOT, expecting FIELD", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, err := NewJSONExpressionParser([]JSONExpression{tt.expression}) + _, err := NewJSONExpressionParser([]XExpression{tt.expression}) require.NotNil(t, err) require.Equal(t, err.Error(), fmt.Sprintf("cannot parse expression [%s]: syntax error: %s", tt.expression.Expression, tt.error)) @@ -727,15 +727,15 @@ func TestLogfmtExpressionParser(t *testing.T) { tests := []struct { name string line []byte - expressions []LogfmtExpression + expressions []XExpression lbs labels.Labels want labels.Labels }{ { "single field", testLine, - []LogfmtExpression{ - NewLogfmtExpr("app", "app"), + []XExpression{ + NewXExpr("app", "app"), }, labels.Labels{}, labels.Labels{ @@ -745,10 +745,10 @@ func TestLogfmtExpressionParser(t *testing.T) { { "multiple fields", testLine, - []LogfmtExpression{ - NewLogfmtExpr("app", "app"), - NewLogfmtExpr("level", "level"), - NewLogfmtExpr("ts", "ts"), + []XExpression{ + NewXExpr("app", "app"), + NewXExpr("level", "level"), + NewXExpr("ts", "ts"), }, labels.Labels{}, labels.Labels{ @@ -760,8 +760,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "label renaming", testLine, - []LogfmtExpression{ - NewLogfmtExpr("test", "level"), + []XExpression{ + NewXExpr("test", "level"), }, labels.Labels{}, labels.Labels{ @@ -771,10 +771,10 @@ func TestLogfmtExpressionParser(t *testing.T) { { "multiple fields with label renaming", testLine, - []LogfmtExpression{ - NewLogfmtExpr("app", "app"), - NewLogfmtExpr("lvl", "level"), - NewLogfmtExpr("timestamp", "ts"), + []XExpression{ + NewXExpr("app", "app"), + NewXExpr("lvl", "level"), + NewXExpr("timestamp", "ts"), }, labels.Labels{}, labels.Labels{ @@ -786,8 +786,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "value with spaces and ÜFT8👌", testLine, - []LogfmtExpression{ - NewLogfmtExpr("spaces", "spaces"), + []XExpression{ + NewXExpr("spaces", "spaces"), }, labels.Labels{}, labels.Labels{ @@ -797,8 +797,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "expression matching nothing", testLine, - []LogfmtExpression{ - NewLogfmtExpr("nope", "nope"), + []XExpression{ + NewXExpr("nope", "nope"), }, labels.Labels{}, labels.Labels{ @@ -808,8 +808,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "double property logfmt", testLine, - []LogfmtExpression{ - NewLogfmtExpr("app", "app"), + []XExpression{ + NewXExpr("app", "app"), }, labels.Labels{ {Name: "ap", Value: "bar"}, @@ -822,8 +822,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "label override", testLine, - []LogfmtExpression{ - NewLogfmtExpr("app", "app"), + []XExpression{ + NewXExpr("app", "app"), }, labels.Labels{ {Name: "app", Value: "bar"}, @@ -836,8 +836,8 @@ func TestLogfmtExpressionParser(t *testing.T) { { "label override 2", testLine, - []LogfmtExpression{ - NewLogfmtExpr("lvl", "level"), + []XExpression{ + NewXExpr("lvl", "level"), }, labels.Labels{ {Name: "level", Value: "debug"}, @@ -863,22 +863,22 @@ func TestLogfmtExpressionParser(t *testing.T) { } } -func TestLogfmtExpressionParserFailures(t *testing.T) { +func TestXExpressionParserFailures(t *testing.T) { tests := []struct { name string - expression LogfmtExpression + expression XExpression error string }{ { "invalid field name", - NewLogfmtExpr("app", `field with space`), + NewXExpr("app", `field with space`), "unexpected KEY", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, err := NewLogfmtExpressionParser([]LogfmtExpression{tt.expression}) + _, err := NewLogfmtExpressionParser([]XExpression{tt.expression}) require.NotNil(t, err) require.Equal(t, err.Error(), fmt.Sprintf("cannot parse expression [%s]: syntax error: %s", tt.expression.Expression, tt.error)) diff --git a/pkg/logql/log/pipeline_test.go b/pkg/logql/log/pipeline_test.go index 37cc482ceb72..a72b8a6b8322 100644 --- a/pkg/logql/log/pipeline_test.go +++ b/pkg/logql/log/pipeline_test.go @@ -388,8 +388,8 @@ func BenchmarkJSONParserInvalidLine(b *testing.B) { } func BenchmarkJSONExpressionParser(b *testing.B) { - parser, err := NewJSONExpressionParser([]JSONExpression{ - NewJSONExpr("context_file", "context.file"), + parser, err := NewJSONExpressionParser([]XExpression{ + NewXExpr("context_file", "context.file"), }) if err != nil { b.Fatal("cannot create new JSON expression parser") @@ -399,8 +399,8 @@ func BenchmarkJSONExpressionParser(b *testing.B) { } func BenchmarkJSONExpressionParserInvalidLine(b *testing.B) { - parser, err := NewJSONExpressionParser([]JSONExpression{ - NewJSONExpr("context_file", "some.expression"), + parser, err := NewJSONExpressionParser([]XExpression{ + NewXExpr("context_file", "some.expression"), }) if err != nil { b.Fatal("cannot create new JSON expression parser") @@ -443,8 +443,8 @@ func BenchmarkLogfmtParser(b *testing.B) { } func BenchmarkLogfmtExpressionParser(b *testing.B) { - parser, err := NewLogfmtExpressionParser([]LogfmtExpression{ - NewLogfmtExpr("timestamp", "ts"), + parser, err := NewLogfmtExpressionParser([]XExpression{ + NewXExpr("timestamp", "ts"), }) if err != nil { b.Fatal("cannot create new logfmt expression parser:", err.Error()) diff --git a/pkg/logql/log/xxx_expr.go b/pkg/logql/log/xxx_expr.go new file mode 100644 index 000000000000..8a1c63e5fad3 --- /dev/null +++ b/pkg/logql/log/xxx_expr.go @@ -0,0 +1,13 @@ +package log + +type XExpression struct { + Identifier string + Expression string +} + +func NewXExpr(identifier, expression string) XExpression { + return XExpression{ + Identifier: identifier, + Expression: expression, + } +} diff --git a/pkg/logql/syntax/ast.go b/pkg/logql/syntax/ast.go index e1fdcbb43a17..3082b0bc5f35 100644 --- a/pkg/logql/syntax/ast.go +++ b/pkg/logql/syntax/ast.go @@ -537,12 +537,12 @@ func (e *LabelFmtExpr) String() string { } type JSONExpressionParser struct { - Expressions []log.JSONExpression + Expressions []log.XExpression implicit } -func newJSONExpressionParser(expressions []log.JSONExpression) *JSONExpressionParser { +func newJSONExpressionParser(expressions []log.XExpression) *JSONExpressionParser { return &JSONExpressionParser{ Expressions: expressions, } @@ -577,14 +577,14 @@ type internedStringSet map[string]struct { } type LogfmtExpressionParser struct { - Expressions []log.LogfmtExpression + Expressions []log.XExpression dec *logfmt.Decoder keys internedStringSet implicit } -func newLogfmtExpressionParser(expressions []log.LogfmtExpression) *LogfmtExpressionParser { +func newLogfmtExpressionParser(expressions []log.XExpression) *LogfmtExpressionParser { return &LogfmtExpressionParser{ Expressions: expressions, } diff --git a/pkg/logql/syntax/expr.y b/pkg/logql/syntax/expr.y index 33c94a137527..3c2dab1ae5f0 100644 --- a/pkg/logql/syntax/expr.y +++ b/pkg/logql/syntax/expr.y @@ -54,11 +54,11 @@ import ( LabelFormat log.LabelFmt LabelsFormat []log.LabelFmt JSONExpressionParser *JSONExpressionParser - JSONExpression log.JSONExpression - JSONExpressionList []log.JSONExpression + JSONExpression log.XExpression + JSONExpressionList []log.XExpression LogfmtExpressionParser *LogfmtExpressionParser - LogfmtExpression log.LogfmtExpression - LogfmtExpressionList []log.LogfmtExpression + LogfmtExpression log.XExpression + LogfmtExpressionList []log.XExpression UnwrapExpr *UnwrapExpr DecolorizeExpr *DecolorizeExpr @@ -330,20 +330,20 @@ labelFilter: ; jsonExpression: - IDENTIFIER EQ STRING { $$ = log.NewJSONExpr($1, $3) } - | IDENTIFIER { $$ = log.NewJSONExpr($1, $1) } + IDENTIFIER EQ STRING { $$ = log.NewXExpr($1, $3) } + | IDENTIFIER { $$ = log.NewXExpr($1, $1) } jsonExpressionList: - jsonExpression { $$ = []log.JSONExpression{$1} } + jsonExpression { $$ = []log.XExpression{$1} } | jsonExpressionList COMMA jsonExpression { $$ = append($1, $3) } ; logfmtExpression: - IDENTIFIER EQ STRING { $$ = log.NewLogfmtExpr($1, $3) } - | IDENTIFIER { $$ = log.NewLogfmtExpr($1, $1) } + IDENTIFIER EQ STRING { $$ = log.NewXExpr($1, $3) } + | IDENTIFIER { $$ = log.NewXExpr($1, $1) } logfmtExpressionList: - logfmtExpression { $$ = []log.LogfmtExpression{$1} } + logfmtExpression { $$ = []log.XExpression{$1} } | logfmtExpressionList COMMA logfmtExpression { $$ = append($1, $3) } ; diff --git a/pkg/logql/syntax/expr.y.go b/pkg/logql/syntax/expr.y.go index 38dc213c29ee..848d5940bca1 100644 --- a/pkg/logql/syntax/expr.y.go +++ b/pkg/logql/syntax/expr.y.go @@ -60,11 +60,11 @@ type exprSymType struct { LabelFormat log.LabelFmt LabelsFormat []log.LabelFmt JSONExpressionParser *JSONExpressionParser - JSONExpression log.JSONExpression - JSONExpressionList []log.JSONExpression + JSONExpression log.XExpression + JSONExpressionList []log.XExpression LogfmtExpressionParser *LogfmtExpressionParser - LogfmtExpression log.LogfmtExpression - LogfmtExpressionList []log.LogfmtExpression + LogfmtExpression log.XExpression + LogfmtExpressionList []log.XExpression UnwrapExpr *UnwrapExpr DecolorizeExpr *DecolorizeExpr @@ -1515,19 +1515,19 @@ exprdefault: exprDollar = exprS[exprpt-3 : exprpt+1] //line expr.y:333 { - exprVAL.JSONExpression = log.NewJSONExpr(exprDollar[1].str, exprDollar[3].str) + exprVAL.JSONExpression = log.NewXExpr(exprDollar[1].str, exprDollar[3].str) } case 111: exprDollar = exprS[exprpt-1 : exprpt+1] //line expr.y:334 { - exprVAL.JSONExpression = log.NewJSONExpr(exprDollar[1].str, exprDollar[1].str) + exprVAL.JSONExpression = log.NewXExpr(exprDollar[1].str, exprDollar[1].str) } case 112: exprDollar = exprS[exprpt-1 : exprpt+1] //line expr.y:337 { - exprVAL.JSONExpressionList = []log.JSONExpression{exprDollar[1].JSONExpression} + exprVAL.JSONExpressionList = []log.XExpression{exprDollar[1].JSONExpression} } case 113: exprDollar = exprS[exprpt-3 : exprpt+1] @@ -1539,19 +1539,19 @@ exprdefault: exprDollar = exprS[exprpt-3 : exprpt+1] //line expr.y:342 { - exprVAL.LogfmtExpression = log.NewLogfmtExpr(exprDollar[1].str, exprDollar[3].str) + exprVAL.LogfmtExpression = log.NewXExpr(exprDollar[1].str, exprDollar[3].str) } case 115: exprDollar = exprS[exprpt-1 : exprpt+1] //line expr.y:343 { - exprVAL.LogfmtExpression = log.NewLogfmtExpr(exprDollar[1].str, exprDollar[1].str) + exprVAL.LogfmtExpression = log.NewXExpr(exprDollar[1].str, exprDollar[1].str) } case 116: exprDollar = exprS[exprpt-1 : exprpt+1] //line expr.y:346 { - exprVAL.LogfmtExpressionList = []log.LogfmtExpression{exprDollar[1].LogfmtExpression} + exprVAL.LogfmtExpressionList = []log.XExpression{exprDollar[1].LogfmtExpression} } case 117: exprDollar = exprS[exprpt-3 : exprpt+1] diff --git a/pkg/logql/syntax/parser_test.go b/pkg/logql/syntax/parser_test.go index d109837cdbbf..80a124b8e124 100644 --- a/pkg/logql/syntax/parser_test.go +++ b/pkg/logql/syntax/parser_test.go @@ -2954,8 +2954,8 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newJSONExpressionParser([]log.JSONExpression{ - log.NewJSONExpr("bob", `top.sub["index"]`), + newJSONExpressionParser([]log.XExpression{ + log.NewXExpr("bob", `top.sub["index"]`), }), }, }, @@ -2965,8 +2965,8 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newJSONExpressionParser([]log.JSONExpression{ - log.NewJSONExpr("bob", `top.params[0]`), + newJSONExpressionParser([]log.XExpression{ + log.NewXExpr("bob", `top.params[0]`), }), }, }, @@ -2976,9 +2976,9 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newJSONExpressionParser([]log.JSONExpression{ - log.NewJSONExpr("response_code", `response.code`), - log.NewJSONExpr("api_key", `request.headers["X-API-KEY"]`), + newJSONExpressionParser([]log.XExpression{ + log.NewXExpr("response_code", `response.code`), + log.NewXExpr("api_key", `request.headers["X-API-KEY"]`), }), }, }, @@ -2988,10 +2988,10 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newJSONExpressionParser([]log.JSONExpression{ - log.NewJSONExpr("response_code", `response_code`), - log.NewJSONExpr("api_key", `request.headers["X-API-KEY"]`), - log.NewJSONExpr("layer7_something_specific", `layer7_something_specific`), + newJSONExpressionParser([]log.XExpression{ + log.NewXExpr("response_code", `response_code`), + log.NewXExpr("api_key", `request.headers["X-API-KEY"]`), + log.NewXExpr("layer7_something_specific", `layer7_something_specific`), }), }, }, @@ -3002,8 +3002,8 @@ func TestParse(t *testing.T) { Left: &LogRange{ Left: &PipelineExpr{ MultiStages: MultiStageExpr{ - newJSONExpressionParser([]log.JSONExpression{ - log.NewJSONExpr("layer7_something_specific", `layer7_something_specific`), + newJSONExpressionParser([]log.XExpression{ + log.NewXExpr("layer7_something_specific", `layer7_something_specific`), }), }, Left: &MatchersExpr{Mts: []*labels.Matcher{mustNewMatcher(labels.MatchEqual, "foo", "bar")}}, @@ -3045,8 +3045,8 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newLogfmtExpressionParser([]log.LogfmtExpression{ - log.NewLogfmtExpr("message", `msg`), + newLogfmtExpressionParser([]log.XExpression{ + log.NewXExpr("message", `msg`), }), }, }, @@ -3056,8 +3056,8 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newLogfmtExpressionParser([]log.LogfmtExpression{ - log.NewLogfmtExpr("msg", `msg`), + newLogfmtExpressionParser([]log.XExpression{ + log.NewXExpr("msg", `msg`), }), }, }, @@ -3067,9 +3067,9 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newLogfmtExpressionParser([]log.LogfmtExpression{ - log.NewLogfmtExpr("msg", `msg`), - log.NewLogfmtExpr("err", `err`), + newLogfmtExpressionParser([]log.XExpression{ + log.NewXExpr("msg", `msg`), + log.NewXExpr("err", `err`), }), }, }, @@ -3079,9 +3079,9 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newLogfmtExpressionParser([]log.LogfmtExpression{ - log.NewLogfmtExpr("msg", `msg`), - log.NewLogfmtExpr("err", `error`), + newLogfmtExpressionParser([]log.XExpression{ + log.NewXExpr("msg", `msg`), + log.NewXExpr("err", `error`), }), }, }, @@ -3091,9 +3091,9 @@ func TestParse(t *testing.T) { exp: &PipelineExpr{ Left: newMatcherExpr([]*labels.Matcher{{Type: labels.MatchEqual, Name: "app", Value: "foo"}}), MultiStages: MultiStageExpr{ - newLogfmtExpressionParser([]log.LogfmtExpression{ - log.NewLogfmtExpr("msg", `message`), - log.NewLogfmtExpr("apiKey", `api_key`), + newLogfmtExpressionParser([]log.XExpression{ + log.NewXExpr("msg", `message`), + log.NewXExpr("apiKey", `api_key`), }), }, },