chore: Cleanup label extraction expression (#8596)

The aim of this is to remove redundancy from the parser grammar and make the expression name more descriptive.

Signed-off-by: Christian Haudum <christian.haudum@gmail.com>
pull/8616/head
Christian Haudum 2 years ago committed by GitHub
parent 019ac9975c
commit d4a6b159fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      pkg/logql/log/label_extraction_expr.go
  2. 4
      pkg/logql/log/parser.go
  3. 146
      pkg/logql/log/parser_test.go
  4. 12
      pkg/logql/log/pipeline_test.go
  5. 13
      pkg/logql/log/x_expr.go
  6. 8
      pkg/logql/syntax/ast.go
  7. 46
      pkg/logql/syntax/expr.y
  8. 970
      pkg/logql/syntax/expr.y.go
  9. 52
      pkg/logql/syntax/parser_test.go

@ -0,0 +1,13 @@
package log
type LabelExtractionExpr struct {
Identifier string
Expression string
}
func NewLabelExtractionExpr(identifier, expression string) LabelExtractionExpr {
return LabelExtractionExpr{
Identifier: identifier,
Expression: expression,
}
}

@ -347,7 +347,7 @@ type LogfmtExpressionParser struct {
keys internedStringSet
}
func NewLogfmtExpressionParser(expressions []XExpression) (*LogfmtExpressionParser, error) {
func NewLogfmtExpressionParser(expressions []LabelExtractionExpr) (*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 []XExpression) (*JSONExpressionParser, error) {
func NewJSONExpressionParser(expressions []LabelExtractionExpr) (*JSONExpressionParser, error) {
paths := make(map[string][]interface{})
for _, exp := range expressions {

@ -117,15 +117,15 @@ func TestJSONExpressionParser(t *testing.T) {
tests := []struct {
name string
line []byte
expressions []XExpression
expressions []LabelExtractionExpr
lbs labels.Labels
want labels.Labels
}{
{
"single field",
testLine,
[]XExpression{
NewXExpr("app", "app"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
},
labels.Labels{},
labels.Labels{
@ -135,8 +135,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"alternate syntax",
testLine,
[]XExpression{
NewXExpr("test", `["field with space"]`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("test", `["field with space"]`),
},
labels.Labels{},
labels.Labels{
@ -146,9 +146,9 @@ func TestJSONExpressionParser(t *testing.T) {
{
"multiple fields",
testLine,
[]XExpression{
NewXExpr("app", "app"),
NewXExpr("namespace", "namespace"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
NewLabelExtractionExpr("namespace", "namespace"),
},
labels.Labels{},
labels.Labels{
@ -159,8 +159,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"utf8",
testLine,
[]XExpression{
NewXExpr("utf8", `["field with ÜFT8👌"]`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("utf8", `["field with ÜFT8👌"]`),
},
labels.Labels{},
labels.Labels{
@ -170,8 +170,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"nested field",
testLine,
[]XExpression{
NewXExpr("uuid", "pod.uuid"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", "pod.uuid"),
},
labels.Labels{},
labels.Labels{
@ -181,8 +181,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"nested field alternate syntax",
testLine,
[]XExpression{
NewXExpr("uuid", `pod["uuid"]`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", `pod["uuid"]`),
},
labels.Labels{},
labels.Labels{
@ -192,8 +192,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"nested field alternate syntax 2",
testLine,
[]XExpression{
NewXExpr("uuid", `["pod"]["uuid"]`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", `["pod"]["uuid"]`),
},
labels.Labels{},
labels.Labels{
@ -203,8 +203,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"nested field alternate syntax 3",
testLine,
[]XExpression{
NewXExpr("uuid", `["pod"].uuid`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", `["pod"].uuid`),
},
labels.Labels{},
labels.Labels{
@ -214,8 +214,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"array element",
testLine,
[]XExpression{
NewXExpr("param", `pod.deployment.params[0]`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("param", `pod.deployment.params[0]`),
},
labels.Labels{},
labels.Labels{
@ -225,8 +225,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"full array",
testLine,
[]XExpression{
NewXExpr("params", `pod.deployment.params`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("params", `pod.deployment.params`),
},
labels.Labels{},
labels.Labels{
@ -236,8 +236,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"full object",
testLine,
[]XExpression{
NewXExpr("deployment", `pod.deployment`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("deployment", `pod.deployment`),
},
labels.Labels{},
labels.Labels{
@ -247,8 +247,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"expression matching nothing",
testLine,
[]XExpression{
NewXExpr("nope", `pod.nope`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("nope", `pod.nope`),
},
labels.Labels{},
labels.Labels{
@ -258,8 +258,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"null field",
testLine,
[]XExpression{
NewXExpr("nf", `null_field`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("nf", `null_field`),
},
labels.Labels{},
labels.Labels{
@ -269,8 +269,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"boolean field",
testLine,
[]XExpression{
NewXExpr("bool", `bool_field`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("bool", `bool_field`),
},
labels.Labels{},
labels.Labels{
@ -280,8 +280,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"label override",
testLine,
[]XExpression{
NewXExpr("uuid", `pod.uuid`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", `pod.uuid`),
},
labels.Labels{
{Name: "uuid", Value: "bar"},
@ -294,8 +294,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"non-matching expression",
testLine,
[]XExpression{
NewXExpr("request_size", `request.size.invalid`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("request_size", `request.size.invalid`),
},
labels.Labels{
{Name: "uuid", Value: "bar"},
@ -308,8 +308,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"empty line",
[]byte("{}"),
[]XExpression{
NewXExpr("uuid", `pod.uuid`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("uuid", `pod.uuid`),
},
labels.Labels{},
labels.Labels{
@ -319,8 +319,8 @@ func TestJSONExpressionParser(t *testing.T) {
{
"existing labels are not affected",
testLine,
[]XExpression{
NewXExpr("uuid", `will.not.work`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("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`),
[]XExpression{
NewXExpr("uuid", `will.not.work`),
[]LabelExtractionExpr{
NewLabelExtractionExpr("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 XExpression
expression LabelExtractionExpr
error string
}{
{
"invalid field name",
NewXExpr("app", `field with space`),
NewLabelExtractionExpr("app", `field with space`),
"unexpected FIELD",
},
{
"missing opening square bracket",
NewXExpr("app", `"pod"]`),
NewLabelExtractionExpr("app", `"pod"]`),
"unexpected STRING, expecting LSB or FIELD",
},
{
"missing closing square bracket",
NewXExpr("app", `["pod"`),
NewLabelExtractionExpr("app", `["pod"`),
"unexpected $end, expecting RSB",
},
{
"missing closing square bracket",
NewXExpr("app", `["pod""uuid"]`),
NewLabelExtractionExpr("app", `["pod""uuid"]`),
"unexpected STRING, expecting RSB",
},
{
"invalid nesting",
NewXExpr("app", `pod..uuid`),
NewLabelExtractionExpr("app", `pod..uuid`),
"unexpected DOT, expecting FIELD",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := NewJSONExpressionParser([]XExpression{tt.expression})
_, err := NewJSONExpressionParser([]LabelExtractionExpr{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 []XExpression
expressions []LabelExtractionExpr
lbs labels.Labels
want labels.Labels
}{
{
"single field",
testLine,
[]XExpression{
NewXExpr("app", "app"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
},
labels.Labels{},
labels.Labels{
@ -745,10 +745,10 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"multiple fields",
testLine,
[]XExpression{
NewXExpr("app", "app"),
NewXExpr("level", "level"),
NewXExpr("ts", "ts"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
NewLabelExtractionExpr("level", "level"),
NewLabelExtractionExpr("ts", "ts"),
},
labels.Labels{},
labels.Labels{
@ -760,8 +760,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"label renaming",
testLine,
[]XExpression{
NewXExpr("test", "level"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("test", "level"),
},
labels.Labels{},
labels.Labels{
@ -771,10 +771,10 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"multiple fields with label renaming",
testLine,
[]XExpression{
NewXExpr("app", "app"),
NewXExpr("lvl", "level"),
NewXExpr("timestamp", "ts"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
NewLabelExtractionExpr("lvl", "level"),
NewLabelExtractionExpr("timestamp", "ts"),
},
labels.Labels{},
labels.Labels{
@ -786,8 +786,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"value with spaces and ÜFT8👌",
testLine,
[]XExpression{
NewXExpr("spaces", "spaces"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("spaces", "spaces"),
},
labels.Labels{},
labels.Labels{
@ -797,8 +797,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"expression matching nothing",
testLine,
[]XExpression{
NewXExpr("nope", "nope"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("nope", "nope"),
},
labels.Labels{},
labels.Labels{
@ -808,8 +808,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"double property logfmt",
testLine,
[]XExpression{
NewXExpr("app", "app"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
},
labels.Labels{
{Name: "ap", Value: "bar"},
@ -822,8 +822,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"label override",
testLine,
[]XExpression{
NewXExpr("app", "app"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("app", "app"),
},
labels.Labels{
{Name: "app", Value: "bar"},
@ -836,8 +836,8 @@ func TestLogfmtExpressionParser(t *testing.T) {
{
"label override 2",
testLine,
[]XExpression{
NewXExpr("lvl", "level"),
[]LabelExtractionExpr{
NewLabelExtractionExpr("lvl", "level"),
},
labels.Labels{
{Name: "level", Value: "debug"},
@ -866,19 +866,19 @@ func TestLogfmtExpressionParser(t *testing.T) {
func TestXExpressionParserFailures(t *testing.T) {
tests := []struct {
name string
expression XExpression
expression LabelExtractionExpr
error string
}{
{
"invalid field name",
NewXExpr("app", `field with space`),
NewLabelExtractionExpr("app", `field with space`),
"unexpected KEY",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
_, err := NewLogfmtExpressionParser([]XExpression{tt.expression})
_, err := NewLogfmtExpressionParser([]LabelExtractionExpr{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))

@ -388,8 +388,8 @@ func BenchmarkJSONParserInvalidLine(b *testing.B) {
}
func BenchmarkJSONExpressionParser(b *testing.B) {
parser, err := NewJSONExpressionParser([]XExpression{
NewXExpr("context_file", "context.file"),
parser, err := NewJSONExpressionParser([]LabelExtractionExpr{
NewLabelExtractionExpr("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([]XExpression{
NewXExpr("context_file", "some.expression"),
parser, err := NewJSONExpressionParser([]LabelExtractionExpr{
NewLabelExtractionExpr("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([]XExpression{
NewXExpr("timestamp", "ts"),
parser, err := NewLogfmtExpressionParser([]LabelExtractionExpr{
NewLabelExtractionExpr("timestamp", "ts"),
})
if err != nil {
b.Fatal("cannot create new logfmt expression parser:", err.Error())

@ -1,13 +0,0 @@
package log
type XExpression struct {
Identifier string
Expression string
}
func NewXExpr(identifier, expression string) XExpression {
return XExpression{
Identifier: identifier,
Expression: expression,
}
}

@ -537,12 +537,12 @@ func (e *LabelFmtExpr) String() string {
}
type JSONExpressionParser struct {
Expressions []log.XExpression
Expressions []log.LabelExtractionExpr
implicit
}
func newJSONExpressionParser(expressions []log.XExpression) *JSONExpressionParser {
func newJSONExpressionParser(expressions []log.LabelExtractionExpr) *JSONExpressionParser {
return &JSONExpressionParser{
Expressions: expressions,
}
@ -577,14 +577,14 @@ type internedStringSet map[string]struct {
}
type LogfmtExpressionParser struct {
Expressions []log.XExpression
Expressions []log.LabelExtractionExpr
dec *logfmt.Decoder
keys internedStringSet
implicit
}
func newLogfmtExpressionParser(expressions []log.XExpression) *LogfmtExpressionParser {
func newLogfmtExpressionParser(expressions []log.LabelExtractionExpr) *LogfmtExpressionParser {
return &LogfmtExpressionParser{
Expressions: expressions,
}

@ -53,12 +53,11 @@ import (
LabelFormatExpr *LabelFmtExpr
LabelFormat log.LabelFmt
LabelsFormat []log.LabelFmt
JSONExpressionParser *JSONExpressionParser
JSONExpression log.XExpression
JSONExpressionList []log.XExpression
LogfmtExpressionParser *LogfmtExpressionParser
LogfmtExpression log.XExpression
LogfmtExpressionList []log.XExpression
LabelExtractionExpression log.LabelExtractionExpr
LabelExtractionExpressionList []log.LabelExtractionExpr
JSONExpressionParser *JSONExpressionParser
LogfmtExpressionParser *LogfmtExpressionParser
UnwrapExpr *UnwrapExpr
DecolorizeExpr *DecolorizeExpr
@ -111,12 +110,10 @@ import (
%type <LabelFormatExpr> labelFormatExpr
%type <LabelFormat> labelFormat
%type <LabelsFormat> labelsFormat
%type <JSONExpressionParser> jsonExpressionParser
%type <JSONExpression> jsonExpression
%type <JSONExpressionList> jsonExpressionList
%type <LogfmtExpressionParser> logfmtExpressionParser
%type <LogfmtExpression> logfmtExpression
%type <LogfmtExpressionList> logfmtExpressionList
%type <LabelExtractionExpression> labelExtractionExpression
%type <LabelExtractionExpressionList> labelExtractionExpressionList
%type <LogfmtExpressionParser> logfmtExpressionParser
%type <JSONExpressionParser> jsonExpressionParser
%type <UnwrapExpr> unwrapExpr
%type <UnitFilter> unitFilter
%type <IPLabelFilter> ipLabelFilter
@ -294,10 +291,10 @@ labelParser:
;
jsonExpressionParser:
JSON jsonExpressionList { $$ = newJSONExpressionParser($2) }
JSON labelExtractionExpressionList { $$ = newJSONExpressionParser($2) }
logfmtExpressionParser:
LOGFMT logfmtExpressionList { $$ = newLogfmtExpressionParser($2)}
LOGFMT labelExtractionExpressionList { $$ = newLogfmtExpressionParser($2)}
lineFormatExpr: LINE_FMT STRING { $$ = newLineFmtExpr($2) };
@ -329,22 +326,13 @@ labelFilter:
| labelFilter OR labelFilter { $$ = log.NewOrLabelFilter($1, $3 ) }
;
jsonExpression:
IDENTIFIER EQ STRING { $$ = log.NewXExpr($1, $3) }
| IDENTIFIER { $$ = log.NewXExpr($1, $1) }
jsonExpressionList:
jsonExpression { $$ = []log.XExpression{$1} }
| jsonExpressionList COMMA jsonExpression { $$ = append($1, $3) }
;
logfmtExpression:
IDENTIFIER EQ STRING { $$ = log.NewXExpr($1, $3) }
| IDENTIFIER { $$ = log.NewXExpr($1, $1) }
labelExtractionExpression:
IDENTIFIER EQ STRING { $$ = log.NewLabelExtractionExpr($1, $3) }
| IDENTIFIER { $$ = log.NewLabelExtractionExpr($1, $1) }
logfmtExpressionList:
logfmtExpression { $$ = []log.XExpression{$1} }
| logfmtExpressionList COMMA logfmtExpression { $$ = append($1, $3) }
labelExtractionExpressionList:
labelExtractionExpression { $$ = []log.LabelExtractionExpr{$1} }
| labelExtractionExpressionList COMMA labelExtractionExpression { $$ = append($1, $3) }
;
ipLabelFilter:

File diff suppressed because it is too large Load Diff

@ -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.XExpression{
log.NewXExpr("bob", `top.sub["index"]`),
newJSONExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("bob", `top.params[0]`),
newJSONExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("response_code", `response.code`),
log.NewXExpr("api_key", `request.headers["X-API-KEY"]`),
newJSONExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("response_code", `response.code`),
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("response_code", `response_code`),
log.NewXExpr("api_key", `request.headers["X-API-KEY"]`),
log.NewXExpr("layer7_something_specific", `layer7_something_specific`),
newJSONExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("response_code", `response_code`),
log.NewLabelExtractionExpr("api_key", `request.headers["X-API-KEY"]`),
log.NewLabelExtractionExpr("layer7_something_specific", `layer7_something_specific`),
}),
},
},
@ -3002,8 +3002,8 @@ func TestParse(t *testing.T) {
Left: &LogRange{
Left: &PipelineExpr{
MultiStages: MultiStageExpr{
newJSONExpressionParser([]log.XExpression{
log.NewXExpr("layer7_something_specific", `layer7_something_specific`),
newJSONExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("message", `msg`),
newLogfmtExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("msg", `msg`),
newLogfmtExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("msg", `msg`),
log.NewXExpr("err", `err`),
newLogfmtExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("msg", `msg`),
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("msg", `msg`),
log.NewXExpr("err", `error`),
newLogfmtExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("msg", `msg`),
log.NewLabelExtractionExpr("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.XExpression{
log.NewXExpr("msg", `message`),
log.NewXExpr("apiKey", `api_key`),
newLogfmtExpressionParser([]log.LabelExtractionExpr{
log.NewLabelExtractionExpr("msg", `message`),
log.NewLabelExtractionExpr("apiKey", `api_key`),
}),
},
},

Loading…
Cancel
Save