Skip to content

Commit

Permalink
feat: Support negative numbers in LogQL (#61)
Browse files Browse the repository at this point in the history
* feat: Support negative numbers in LogQL

* Bump version
  • Loading branch information
matyax authored Jun 4, 2024
1 parent f6e359a commit 42f4fa2
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 12 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# 0.2.4 / 2023-06-03

- **[Chore]**: Upgrade version to `0.2.4`. Added support for negative numbers.

# 0.2.3 / 2023-11-24

- **[Chore]**: Upgrade version to `0.2.3`. Fix allowing the use of `ip` as a label name and correctly parse queries with it.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@grafana/lezer-logql",
"version": "0.2.3",
"version": "0.2.4",
"description": "Grafana Loki logQL lezer grammar",
"main": "index.cjs",
"type": "module",
Expand Down
4 changes: 2 additions & 2 deletions src/formatter/logs.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
BytesFilter,
Duration,
Bytes,
Number,
LiteralExpr,
LabelFormatMatcher,
FilterOp,
DecolorizeExpr,
Expand Down Expand Up @@ -241,7 +241,7 @@ export function formatLabelFilter(node, query) {
} else if (selectedFilterType === BytesFilter) {
valueNode = selectedFilter.getChild(Bytes);
} else if (selectedFilterType === NumberFilter) {
valueNode = selectedFilter.getChild(Number);
valueNode = selectedFilter.getChild(LiteralExpr);
} else {
valueNode = selectedFilter.getChild(String);
}
Expand Down
14 changes: 7 additions & 7 deletions src/logql.grammar
Original file line number Diff line number Diff line change
Expand Up @@ -177,13 +177,13 @@ UnitFilter {
}

NumberFilter {
Identifier !eql Gtr Number |
Identifier !eql Gte Number |
Identifier !eql Lss Number |
Identifier !eql Lte Number |
Identifier !eql Neq Number |
Identifier !eql Eq Number |
Identifier !eql Eql Number
Identifier !eql Gtr LiteralExpr |
Identifier !eql Gte LiteralExpr |
Identifier !eql Lss LiteralExpr |
Identifier !eql Lte LiteralExpr |
Identifier !eql Neq LiteralExpr |
Identifier !eql Eq LiteralExpr |
Identifier !eql Eql LiteralExpr
}

LabelsFormat {
Expand Down
10 changes: 9 additions & 1 deletion test/expression.txt
Original file line number Diff line number Diff line change
Expand Up @@ -543,4 +543,12 @@ LogQL(Expr(LogExpr(Selector(Matchers(Matcher(Identifier, Eq, String))), Pipeline

==>

LogQL(Expr(LogExpr(Selector(Matchers(Matcher(Identifier, Eq, String))), PipelineExpr(PipelineExpr(PipelineStage(Pipe, LogfmtParser(Logfmt))), PipelineStage(Pipe, LabelFilter(IpLabelFilter(Identifier, Eq, Ip, String)))))))
LogQL(Expr(LogExpr(Selector(Matchers(Matcher(Identifier, Eq, String))), PipelineExpr(PipelineExpr(PipelineStage(Pipe, LogfmtParser(Logfmt))), PipelineStage(Pipe, LabelFilter(IpLabelFilter(Identifier, Eq, Ip, String)))))))

# Log query with negative numbers

{foo="bar"} | logfmt | counter>-1 | counter>=-1 | counter<-1 | counter<=-1 | counter!=-1 | counter==-1

==>

LogQL(Expr(LogExpr(Selector(Matchers(Matcher(Identifier, Eq, String))), PipelineExpr(PipelineExpr(PipelineExpr(PipelineExpr(PipelineExpr(PipelineExpr(PipelineExpr(PipelineStage(Pipe, LogfmtParser(Logfmt))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Gtr, LiteralExpr(Sub, Number))))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Gte, LiteralExpr(Sub, Number))))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Lss, LiteralExpr(Sub, Number))))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Lte, LiteralExpr(Sub, Number))))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Neq, LiteralExpr(Sub, Number))))), PipelineStage(Pipe, LabelFilter(NumberFilter(Identifier, Eql, LiteralExpr(Sub, Number))))))))
1 change: 0 additions & 1 deletion test/format.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import {
LiteralExpr,
LabelReplaceExpr,
VectorExpr,
LabelParser,
} from '../src/parser';
import {
formatSelector,
Expand Down

0 comments on commit 42f4fa2

Please sign in to comment.