|
|
|
@ -42,7 +42,7 @@ func (q *Querier) RangeQueryHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Limit); err != nil { |
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Query, request.Limit); err != nil { |
|
|
|
|
serverutil.WriteError(err, w) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -82,7 +82,7 @@ func (q *Querier) InstantQueryHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Limit); err != nil { |
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Query, request.Limit); err != nil { |
|
|
|
|
serverutil.WriteError(err, w) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -139,7 +139,7 @@ func (q *Querier) LogQueryHandler(w http.ResponseWriter, r *http.Request) { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Limit); err != nil { |
|
|
|
|
if err := q.validateEntriesLimits(ctx, request.Query, request.Limit); err != nil { |
|
|
|
|
serverutil.WriteError(err, w) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
@ -345,12 +345,22 @@ func parseRegexQuery(httpRequest *http.Request) (string, error) { |
|
|
|
|
return query, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (q *Querier) validateEntriesLimits(ctx context.Context, limit uint32) error { |
|
|
|
|
func (q *Querier) validateEntriesLimits(ctx context.Context, query string, limit uint32) error { |
|
|
|
|
userID, err := user.ExtractOrgID(ctx) |
|
|
|
|
if err != nil { |
|
|
|
|
return httpgrpc.Errorf(http.StatusBadRequest, err.Error()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
expr, err := logql.ParseExpr(query) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// entry limit does not apply to metric queries.
|
|
|
|
|
if _, ok := expr.(logql.SampleExpr); ok { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
maxEntriesLimit := q.limits.MaxEntriesLimitPerQuery(userID) |
|
|
|
|
if int(limit) > maxEntriesLimit && maxEntriesLimit != 0 { |
|
|
|
|
return httpgrpc.Errorf(http.StatusBadRequest, |
|
|
|
|