mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Prometheus: Add label filters to label_values query type variable query (#70644)
* add labelfilters to label_values query type with tests * fix tests
This commit is contained in:
parent
e9b9a08dd0
commit
e3a4d7c099
@ -5,6 +5,7 @@ import { selectOptionInTest } from 'test/helpers/selectOptionInTest';
|
||||
|
||||
import { PrometheusDatasource } from '../datasource';
|
||||
import PrometheusLanguageProvider from '../language_provider';
|
||||
import { migrateVariableEditorBackToVariableSupport } from '../migrations/variableMigration';
|
||||
import { PromVariableQuery, PromVariableQueryType, StandardPromVariableQuery } from '../types';
|
||||
|
||||
import { PromVariableQueryEditor, Props, variableMigration } from './VariableQueryEditor';
|
||||
@ -60,6 +61,53 @@ describe('PromVariableQueryEditor', () => {
|
||||
expect(migration).toEqual(expected);
|
||||
});
|
||||
|
||||
test('Migrates label filters to the query object for label_values()', () => {
|
||||
const query: StandardPromVariableQuery = {
|
||||
query: 'label_values(metric{label="value"},name)',
|
||||
refId: 'StandardVariableQuery',
|
||||
};
|
||||
|
||||
const migration: PromVariableQuery = variableMigration(query);
|
||||
|
||||
const expected: PromVariableQuery = {
|
||||
qryType: PromVariableQueryType.LabelValues,
|
||||
label: 'name',
|
||||
metric: 'metric',
|
||||
labelFilters: [
|
||||
{
|
||||
label: 'label',
|
||||
op: '=',
|
||||
value: 'value',
|
||||
},
|
||||
],
|
||||
refId: 'PrometheusDatasource-VariableQuery',
|
||||
};
|
||||
|
||||
expect(migration).toEqual(expected);
|
||||
});
|
||||
|
||||
test('Migrates a query object with label filters to an expression correctly', () => {
|
||||
const query: PromVariableQuery = {
|
||||
qryType: PromVariableQueryType.LabelValues,
|
||||
label: 'name',
|
||||
metric: 'metric',
|
||||
labelFilters: [
|
||||
{
|
||||
label: 'label',
|
||||
op: '=',
|
||||
value: 'value',
|
||||
},
|
||||
],
|
||||
refId: 'PrometheusDatasource-VariableQuery',
|
||||
};
|
||||
|
||||
const migration: string = migrateVariableEditorBackToVariableSupport(query);
|
||||
|
||||
const expected = 'label_values(metric{label="value"},name)';
|
||||
|
||||
expect(migration).toEqual(expected);
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
props = {
|
||||
datasource: {
|
||||
@ -118,7 +166,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'label_names(that)',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
});
|
||||
});
|
||||
@ -137,7 +184,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'label_names()',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
});
|
||||
});
|
||||
@ -176,7 +222,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
await waitFor(() =>
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'metrics(a)',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
})
|
||||
);
|
||||
@ -200,7 +245,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
await waitFor(() =>
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'label_values(this)',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
})
|
||||
);
|
||||
@ -228,7 +272,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
await waitFor(() =>
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'label_values(that,this)',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
})
|
||||
);
|
||||
@ -251,7 +294,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: 'query_result(a)',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
});
|
||||
});
|
||||
@ -273,7 +315,6 @@ describe('PromVariableQueryEditor', () => {
|
||||
|
||||
expect(onChange).toHaveBeenCalledWith({
|
||||
query: '{a: "example"}',
|
||||
labelFilters: [],
|
||||
refId,
|
||||
});
|
||||
});
|
||||
|
@ -67,7 +67,7 @@ export const PromVariableQueryEditor = ({ onChange, query, datasource }: Props)
|
||||
setQryType(variableQuery.qryType);
|
||||
setLabel(variableQuery.label ?? '');
|
||||
setMetric(variableQuery.metric ?? '');
|
||||
setLabelFilters(query.labelFilters ?? []);
|
||||
setLabelFilters(variableQuery.labelFilters ?? []);
|
||||
setVarQuery(variableQuery.varQuery ?? '');
|
||||
setSeriesQuery(variableQuery.seriesQuery ?? '');
|
||||
}, [query]);
|
||||
@ -119,16 +119,15 @@ export const PromVariableQueryEditor = ({ onChange, query, datasource }: Props)
|
||||
refId: 'PrometheusVariableQueryEditor-VariableQuery',
|
||||
};
|
||||
|
||||
const updatedVar = { ...queryVar, ...updateVar };
|
||||
let updateLabelFilters = updLabelFilters ? { labelFilters: updLabelFilters } : { labelFilters: labelFilters };
|
||||
|
||||
const updatedVar = { ...queryVar, ...updateVar, ...updateLabelFilters };
|
||||
|
||||
const queryString = migrateVariableEditorBackToVariableSupport(updatedVar);
|
||||
|
||||
let lblFltrs = updLabelFilters ? updLabelFilters : labelFilters;
|
||||
|
||||
// setting query.query property allows for update of variable definition
|
||||
onChange({
|
||||
query: queryString,
|
||||
labelFilters: lblFltrs,
|
||||
refId,
|
||||
});
|
||||
};
|
||||
|
@ -1,3 +1,5 @@
|
||||
import { promQueryModeller } from '../querybuilder/PromQueryModeller';
|
||||
import { buildVisualQueryFromString } from '../querybuilder/parsing';
|
||||
import { PromVariableQuery, PromVariableQueryType as QueryType } from '../types';
|
||||
|
||||
export const PrometheusLabelNamesRegex = /^label_names\(\)\s*$/;
|
||||
@ -41,12 +43,15 @@ export function migrateVariableQueryToEditor(rawQuery: string | PromVariableQuer
|
||||
if (labelValues) {
|
||||
const label = labelValues[2];
|
||||
const metric = labelValues[1];
|
||||
|
||||
if (metric) {
|
||||
const visQuery = buildVisualQueryFromString(metric);
|
||||
return {
|
||||
...queryBase,
|
||||
qryType: QueryType.LabelValues,
|
||||
label,
|
||||
metric,
|
||||
metric: visQuery.query.metric,
|
||||
labelFilters: visQuery.query.labels,
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
@ -97,7 +102,14 @@ export function migrateVariableEditorBackToVariableSupport(QueryVariable: PromVa
|
||||
return 'label_names()';
|
||||
case QueryType.LabelValues:
|
||||
if (QueryVariable.metric) {
|
||||
return `label_values(${QueryVariable.metric},${QueryVariable.label})`;
|
||||
const visualQueryQuery = {
|
||||
metric: QueryVariable.metric,
|
||||
labels: QueryVariable.labelFilters ?? [],
|
||||
operations: [],
|
||||
};
|
||||
|
||||
const metric = promQueryModeller.renderQuery(visualQueryQuery);
|
||||
return `label_values(${metric},${QueryVariable.label})`;
|
||||
} else {
|
||||
return `label_values(${QueryVariable.label})`;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user