Skip to content
Snippets Groups Projects
Commit 80bbd047 authored by Tom Wilkie's avatar Tom Wilkie Committed by Tom Wilkie
Browse files

Add an extra filter step if the user specifies a regex using old API.


Signed-off-by: default avatarTom Wilkie <tom.wilkie@gmail.com>
parent 32d2f64b
No related branches found
No related tags found
No related merge requests found
......@@ -103,6 +103,10 @@ func (i *instance) Query(req *logproto.QueryRequest, queryServer logproto.Querie
return err
}
if req.Regex != "" {
expr = logql.NewFilterExpr(expr, labels.MatchRegexp, req.Regex)
}
querier := logql.QuerierFunc(func(matchers []*labels.Matcher) (iter.EntryIterator, error) {
iters, err := i.lookupStreams(req, matchers)
if err != nil {
......
......@@ -42,6 +42,15 @@ type filterExpr struct {
match string
}
// NewFilterExpr wraps an existing Expr with a next filter expression.
func NewFilterExpr(left Expr, ty labels.MatchType, match string) Expr {
return &filterExpr{
left: left,
ty: ty,
match: match,
}
}
func (e *filterExpr) Eval(q Querier) (iter.EntryIterator, error) {
var f func(string) bool
switch e.ty {
......
......@@ -478,25 +478,25 @@ exprdefault:
exprDollar = exprS[exprpt-3 : exprpt+1]
//line pkg/logql/expr.y:32
{
exprVAL.Expr = &filterExpr{exprDollar[1].Expr, labels.MatchRegexp, exprDollar[3].str}
exprVAL.Expr = NewFilterExpr(exprDollar[1].Expr, labels.MatchRegexp, exprDollar[3].str)
}
case 4:
exprDollar = exprS[exprpt-3 : exprpt+1]
//line pkg/logql/expr.y:33
{
exprVAL.Expr = &filterExpr{exprDollar[1].Expr, labels.MatchEqual, exprDollar[3].str}
exprVAL.Expr = NewFilterExpr(exprDollar[1].Expr, labels.MatchEqual, exprDollar[3].str)
}
case 5:
exprDollar = exprS[exprpt-3 : exprpt+1]
//line pkg/logql/expr.y:34
{
exprVAL.Expr = &filterExpr{exprDollar[1].Expr, labels.MatchNotRegexp, exprDollar[3].str}
exprVAL.Expr = NewFilterExpr(exprDollar[1].Expr, labels.MatchNotRegexp, exprDollar[3].str)
}
case 6:
exprDollar = exprS[exprpt-3 : exprpt+1]
//line pkg/logql/expr.y:35
{
exprVAL.Expr = &filterExpr{exprDollar[1].Expr, labels.MatchNotEqual, exprDollar[3].str}
exprVAL.Expr = NewFilterExpr(exprDollar[1].Expr, labels.MatchNotEqual, exprDollar[3].str)
}
case 7:
exprDollar = exprS[exprpt-2 : exprpt+1]
......
......@@ -29,10 +29,10 @@ root: expr { exprlex.(*lexer).expr = $1 };
expr:
OPEN_BRACE matchers CLOSE_BRACE { $$ = &matchersExpr{ matchers: $2 } }
| expr PIPE_MATCH STRING { $$ = &filterExpr{ $1, labels.MatchRegexp, $3 } }
| expr PIPE_EXACT STRING { $$ = &filterExpr{ $1, labels.MatchEqual, $3 } }
| expr NRE STRING { $$ = &filterExpr{ $1, labels.MatchNotRegexp, $3 } }
| expr NEQ STRING { $$ = &filterExpr{ $1, labels.MatchNotEqual, $3 } }
| expr PIPE_MATCH STRING { $$ = NewFilterExpr( $1, labels.MatchRegexp, $3 ) }
| expr PIPE_EXACT STRING { $$ = NewFilterExpr( $1, labels.MatchEqual, $3 ) }
| expr NRE STRING { $$ = NewFilterExpr( $1, labels.MatchNotRegexp, $3 ) }
| expr NEQ STRING { $$ = NewFilterExpr( $1, labels.MatchNotEqual, $3 ) }
| expr PIPE_MATCH { exprlex.(*lexer).Error("unexpected end of query, expected string") }
| expr STRING { exprlex.(*lexer).Error("unexpected string, expected pipe") }
;
......
......@@ -21,6 +21,10 @@ func (q Querier) queryStore(ctx context.Context, req *logproto.QueryRequest) (it
return nil, err
}
if req.Regex != "" {
expr = logql.NewFilterExpr(expr, labels.MatchRegexp, req.Regex)
}
querier := logql.QuerierFunc(func(matchers []*labels.Matcher) (iter.EntryIterator, error) {
nameLabelMatcher, err := labels.NewMatcher(labels.MatchEqual, labels.MetricName, "logs")
if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment