Loki,Prometheus: Fix of showing error message for empty query (#47379)

* Loki,Prometheus: Dont show error on empty query

* Add tests
pull/47386/head
Ivana Huckova 3 years ago committed by GitHub
parent c72881a8b1
commit caa82a124d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      public/app/plugins/datasource/loki/querybuilder/parsing.test.ts
  2. 28
      public/app/plugins/datasource/loki/querybuilder/parsing.ts
  3. 9
      public/app/plugins/datasource/prometheus/querybuilder/parsing.test.ts
  4. 12
      public/app/plugins/datasource/prometheus/querybuilder/parsing.ts
  5. 2
      public/app/plugins/datasource/prometheus/querybuilder/shared/parsingUtils.ts

@ -2,6 +2,15 @@ import { buildVisualQueryFromString } from './parsing';
import { LokiVisualQuery } from './types';
describe('buildVisualQueryFromString', () => {
it('creates no errors for empty query', () => {
expect(buildVisualQueryFromString('')).toEqual(
noErrors({
labels: [],
operations: [],
})
);
});
it('parses simple query with label-values', () => {
expect(buildVisualQueryFromString('{app="frontend"}')).toEqual(
noErrors({

@ -20,8 +20,8 @@ interface Context {
interface ParsingError {
text: string;
from: number;
to: number;
from?: number;
to?: number;
parentType?: string;
}
@ -36,12 +36,25 @@ export function buildVisualQueryFromString(expr: string): Context {
operations: [],
};
const context = {
const context: Context = {
query: visQuery,
errors: [],
};
handleExpression(replacedExpr, node, context);
try {
handleExpression(replacedExpr, node, context);
} catch (err) {
// Not ideal to log it here, but otherwise we would lose the stack trace.
console.error(err);
context.errors.push({
text: err.message,
});
}
// If we have empty query, we want to reset errors
if (isEmptyQuery(context.query)) {
context.errors = [];
}
return context;
}
@ -496,3 +509,10 @@ function createNotSupportedError(expr: string, node: SyntaxNode, error: string)
err.text = `${error}: ${err.text}`;
return err;
}
function isEmptyQuery(query: LokiVisualQuery) {
if (query.labels.length === 0 && query.operations.length === 0) {
return true;
}
return false;
}

@ -2,6 +2,15 @@ import { buildVisualQueryFromString } from './parsing';
import { PromVisualQuery } from './types';
describe('buildVisualQueryFromString', () => {
it('creates no errors for empty query', () => {
expect(buildVisualQueryFromString('')).toEqual(
noErrors({
labels: [],
operations: [],
metric: '',
})
);
});
it('parses simple query', () => {
expect(buildVisualQueryFromString('counters_logins{app="frontend"}')).toEqual(
noErrors({

@ -46,6 +46,11 @@ export function buildVisualQueryFromString(expr: string): Context {
text: err.message,
});
}
// If we have empty query, we want to reset errors
if (isEmptyQuery(context.query)) {
context.errors = [];
}
return context;
}
@ -373,3 +378,10 @@ function getBinaryModifier(
};
}
}
function isEmptyQuery(query: PromVisualQuery) {
if (query.labels.length === 0 && query.operations.length === 0 && !query.metric) {
return true;
}
return false;
}

@ -30,7 +30,7 @@ export function makeError(expr: string, node: SyntaxNode) {
const variableRegex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?:\.([^:^\}]+))?(?::([^\}]+))?}/g;
/**
* As variables with $ are creating parsing errors, we first replace them with magic string that is parseable and at
* As variables with $ are creating parsing errors, we first replace them with magic string that is parsable and at
* the same time we can get the variable and it's format back from it.
* @param expr
*/

Loading…
Cancel
Save