From c21e2bee1df1c9a0e3b01921508fae2e21e72311 Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Thu, 12 Oct 2023 13:03:33 -0400 Subject: [PATCH] Prometheus: Variable query, allow for label values query type with label, label filters and no metric (#76472) allow for label values query type with label, label filters and no metric --- .../components/VariableQueryEditor.test.tsx | 21 +++++++++++++++++++ .../components/VariableQueryEditor.tsx | 2 +- .../migrations/variableMigration.ts | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.test.tsx b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.test.tsx index ae76f2a2dcc..7d0af5aa56d 100644 --- a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.test.tsx +++ b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.test.tsx @@ -108,6 +108,27 @@ describe('PromVariableQueryEditor', () => { expect(migration).toEqual(expected); }); + test('Migrates a query object with no metric and only label filters to an expression correctly', () => { + const query: PromVariableQuery = { + qryType: PromVariableQueryType.LabelValues, + label: 'name', + labelFilters: [ + { + label: 'label', + op: '=', + value: 'value', + }, + ], + refId: 'PrometheusDatasource-VariableQuery', + }; + + const migration: string = migrateVariableEditorBackToVariableSupport(query); + + const expected = 'label_values({label="value"},name)'; + + expect(migration).toEqual(expected); + }); + beforeEach(() => { props = { datasource: { diff --git a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx index 165236b0ba0..43f4badad79 100644 --- a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx +++ b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx @@ -50,7 +50,7 @@ export const PromVariableQueryEditor = ({ onChange, query, datasource }: Props) // seriesQuery is only a whole const [seriesQuery, setSeriesQuery] = useState(''); - // the original variable query implementation + // the original variable query implementation, e.g. label_value(metric, label_name) const [classicQuery, setClassicQuery] = useState(''); // list of label names for label_values(), /api/v1/labels, contains the same results as label_names() function diff --git a/public/app/plugins/datasource/prometheus/migrations/variableMigration.ts b/public/app/plugins/datasource/prometheus/migrations/variableMigration.ts index 8cf87585d5d..302191f98fb 100644 --- a/public/app/plugins/datasource/prometheus/migrations/variableMigration.ts +++ b/public/app/plugins/datasource/prometheus/migrations/variableMigration.ts @@ -105,7 +105,7 @@ export function migrateVariableEditorBackToVariableSupport(QueryVariable: PromVa } return 'label_names()'; case QueryType.LabelValues: - if (QueryVariable.metric) { + if (QueryVariable.metric || (QueryVariable.labelFilters && QueryVariable.labelFilters.length !== 0)) { const visualQueryQuery = { metric: QueryVariable.metric, labels: QueryVariable.labelFilters ?? [],