mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Loki: Fix label filter expression treating int as string (#62496)
* fix: label filter expression treats int as string * refactor: labelFilterRenderer * test: add tests to labelFilterRenderer * refactor: use backticks based on the operator not the value * test: labelFilterRenderer uses the correct value type based on the operator * test: use it.every rather than having multiple repetitive tests
This commit is contained in:
parent
f143b0a5b2
commit
42f8f5a9ea
@ -1,6 +1,11 @@
|
|||||||
import { QueryBuilderOperationDef } from '../../prometheus/querybuilder/shared/types';
|
import { QueryBuilderOperationDef } from '../../prometheus/querybuilder/shared/types';
|
||||||
|
|
||||||
import { createRangeOperation, createRangeOperationWithGrouping, getLineFilterRenderer } from './operationUtils';
|
import {
|
||||||
|
createRangeOperation,
|
||||||
|
createRangeOperationWithGrouping,
|
||||||
|
getLineFilterRenderer,
|
||||||
|
labelFilterRenderer,
|
||||||
|
} from './operationUtils';
|
||||||
import { LokiVisualQueryOperationCategory } from './types';
|
import { LokiVisualQueryOperationCategory } from './types';
|
||||||
|
|
||||||
describe('createRangeOperation', () => {
|
describe('createRangeOperation', () => {
|
||||||
@ -156,3 +161,26 @@ describe('getLineFilterRenderer', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('labelFilterRenderer', () => {
|
||||||
|
const MOCK_MODEL = { id: '__label_filter', params: ['label', '', 'value'] };
|
||||||
|
const MOCK_DEF = undefined as unknown as QueryBuilderOperationDef;
|
||||||
|
const MOCK_INNER_EXPR = '{job="grafana"}';
|
||||||
|
|
||||||
|
it.each`
|
||||||
|
operator | type | expected
|
||||||
|
${'='} | ${'string'} | ${'`value`'}
|
||||||
|
${'!='} | ${'string'} | ${'`value`'}
|
||||||
|
${'=~'} | ${'string'} | ${'`value`'}
|
||||||
|
${'!~'} | ${'string'} | ${'`value`'}
|
||||||
|
${'>'} | ${'number'} | ${'value'}
|
||||||
|
${'>='} | ${'number'} | ${'value'}
|
||||||
|
${'<'} | ${'number'} | ${'value'}
|
||||||
|
${'<='} | ${'number'} | ${'value'}
|
||||||
|
`("value should be of type '$type' when operator is: $operator", ({ operator, expected }) => {
|
||||||
|
MOCK_MODEL.params[1] = operator;
|
||||||
|
expect(labelFilterRenderer(MOCK_MODEL, MOCK_DEF, MOCK_INNER_EXPR)).toBe(
|
||||||
|
`{job="grafana"} | label ${operator} ${expected}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -148,7 +148,9 @@ function operationWithRangeVectorRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function labelFilterRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) {
|
export function labelFilterRenderer(model: QueryBuilderOperation, def: QueryBuilderOperationDef, innerExpr: string) {
|
||||||
if (model.params[1] === '<' || model.params[1] === '>') {
|
const integerOperators = ['<', '<=', '>', '>='];
|
||||||
|
|
||||||
|
if (integerOperators.includes(String(model.params[1]))) {
|
||||||
return `${innerExpr} | ${model.params[0]} ${model.params[1]} ${model.params[2]}`;
|
return `${innerExpr} | ${model.params[0]} ${model.params[1]} ${model.params[2]}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user