Skip to content

Commit 6df81db

Browse files
authored
feat: Support negative numbers in LogQL (#13091)
1 parent fa2c789 commit 6df81db

File tree

5 files changed

+435
-159
lines changed

5 files changed

+435
-159
lines changed

‎pkg/logql/syntax/ast_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func Test_logSelectorExpr_String(t *testing.T) {
4949
{`{foo="bar"} |= "baz" |~ "blip" != "flip" !~ "flap" | logfmt | b=ip("127.0.0.1") | level="error" | c=ip("::1")`, true}, // chain inside label filters.
5050
{`{foo="bar"} |= "baz" |~ "blip" != "flip" !~ "flap" | regexp "(?P<foo>foo|bar)"`, true},
5151
{`{foo="bar"} |= "baz" |~ "blip" != "flip" !~ "flap" | regexp "(?P<foo>foo|bar)" | ( ( foo<5.01 , bar>20ms ) or foo="bar" ) | line_format "blip{{.boop}}bap" | label_format foo=bar,bar="blip{{.blop}}"`, true},
52+
{`{foo="bar"} | logfmt | counter>-1 | counter>=-1 | counter<-1 | counter<=-1 | counter!=-1 | counter==-1`, true},
5253
}
5354

5455
for _, tt := range tests {
@@ -76,6 +77,7 @@ func Test_logSelectorExpr_String(t *testing.T) {
7677
func Test_SampleExpr_String(t *testing.T) {
7778
t.Parallel()
7879
for _, tc := range []string{
80+
`rate( ( {job="mysql"} |="error" !="timeout" ) [10s] )>-1`,
7981
`rate( ( {job="mysql"} |="error" !="timeout" ) [10s] )`,
8082
`absent_over_time( ( {job="mysql"} |="error" !="timeout" ) [10s] )`,
8183
`absent_over_time( ( {job="mysql"} |="error" !="timeout" ) [10s] offset 10d )`,
@@ -556,6 +558,27 @@ func Test_FilterMatcher(t *testing.T) {
556558
},
557559
[]linecheck{{"foo", false}, {"bar", false}, {"none", true}},
558560
},
561+
{
562+
`{app="foo"} | logfmt | duration > -1s`,
563+
[]*labels.Matcher{
564+
mustNewMatcher(labels.MatchEqual, "app", "foo"),
565+
},
566+
[]linecheck{{"duration=5m", true}, {"duration=1s", true}, {"duration=0s", true}, {"duration=-5m", false}},
567+
},
568+
{
569+
`{app="foo"} | logfmt | count > -1`,
570+
[]*labels.Matcher{
571+
mustNewMatcher(labels.MatchEqual, "app", "foo"),
572+
},
573+
[]linecheck{{"count=5", true}, {"count=1", true}, {"count=0", true}, {"count=-5", false}},
574+
},
575+
{
576+
`{app="foo"} | logfmt | counter <= -1`,
577+
[]*labels.Matcher{
578+
mustNewMatcher(labels.MatchEqual, "app", "foo"),
579+
},
580+
[]linecheck{{"counter=1", false}, {"counter=0", false}, {"counter=-1", true}, {"counter=-2", true}},
581+
},
559582
} {
560583
tt := tt
561584
t.Run(tt.q, func(t *testing.T) {

‎pkg/logql/syntax/expr.y

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,13 @@ bytesFilter:
400400
;
401401

402402
numberFilter:
403-
IDENTIFIER GT NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterGreaterThan, $1, mustNewFloat($3))}
404-
| IDENTIFIER GTE NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterGreaterThanOrEqual, $1, mustNewFloat($3))}
405-
| IDENTIFIER LT NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterLesserThan, $1, mustNewFloat($3))}
406-
| IDENTIFIER LTE NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterLesserThanOrEqual, $1, mustNewFloat($3))}
407-
| IDENTIFIER NEQ NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterNotEqual, $1, mustNewFloat($3))}
408-
| IDENTIFIER EQ NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterEqual, $1, mustNewFloat($3))}
409-
| IDENTIFIER CMP_EQ NUMBER { $$ = log.NewNumericLabelFilter(log.LabelFilterEqual, $1, mustNewFloat($3))}
403+
IDENTIFIER GT literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterGreaterThan, $1, $3.Val)}
404+
| IDENTIFIER GTE literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterGreaterThanOrEqual, $1,$3.Val)}
405+
| IDENTIFIER LT literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterLesserThan, $1, $3.Val)}
406+
| IDENTIFIER LTE literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterLesserThanOrEqual, $1, $3.Val)}
407+
| IDENTIFIER NEQ literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterNotEqual, $1, $3.Val)}
408+
| IDENTIFIER EQ literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterEqual, $1, $3.Val)}
409+
| IDENTIFIER CMP_EQ literalExpr { $$ = log.NewNumericLabelFilter(log.LabelFilterEqual, $1, $3.Val)}
410410
;
411411

412412
dropLabel:

0 commit comments

Comments
 (0)