diff --git a/packages/grafana-prometheus/src/metric_find_query.test.ts b/packages/grafana-prometheus/src/metric_find_query.test.ts index 29077107524..8a0aabe6480 100644 --- a/packages/grafana-prometheus/src/metric_find_query.test.ts +++ b/packages/grafana-prometheus/src/metric_find_query.test.ts @@ -147,11 +147,15 @@ describe('PrometheusMetricFindQuery', () => { }); // - it('label_values(metric, resource) should generate label/__name__/values query with correct time', async () => { + it('label_values(metric, resource) should generate series query with correct time', async () => { const query = setupMetricFindQuery({ query: 'label_values(metric, resource)', response: { - data: ['value1', 'value2', 'value3'], + data: [ + { __name__: 'metric', resource: 'value1' }, + { __name__: 'metric', resource: 'value2' }, + { __name__: 'metric', resource: 'value3' }, + ], }, }); const results = await query.process(raw); @@ -160,19 +164,24 @@ describe('PrometheusMetricFindQuery', () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith({ method: 'GET', - url: `/api/datasources/uid/ABCDEF/resources/api/v1/label/resource/values?match${encodeURIComponent( + url: `/api/datasources/uid/ABCDEF/resources/api/v1/series?match${encodeURIComponent( '[]' )}=metric&start=${raw.from.unix()}&end=${raw.to.unix()}`, hideFromInspector: true, + showErrorAlert: false, headers: {}, }); }); - it('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate label/__name__/values? query with correct time', async () => { + it('label_values(metric{label1="foo", label2="bar", label3="baz"}, resource) should generate series query with correct time', async () => { const query = setupMetricFindQuery({ query: 'label_values(metric{label1="foo", label2="bar", label3="baz"}, resource)', response: { - data: ['value1', 'value2', 'value3'], + data: [ + { __name__: 'metric', resource: 'value1' }, + { __name__: 'metric', resource: 'value2' }, + { __name__: 'metric', resource: 'value3' }, + ], }, }); const results = await query.process(raw); @@ -181,8 +190,9 @@ describe('PrometheusMetricFindQuery', () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith({ method: 'GET', - url: '/api/datasources/uid/ABCDEF/resources/api/v1/label/resource/values?match%5B%5D=metric%7Blabel1%3D%22foo%22%2C%20label2%3D%22bar%22%2C%20label3%3D%22baz%22%7D&start=1524650400&end=1524654000', + url: '/api/datasources/uid/ABCDEF/resources/api/v1/series?match%5B%5D=metric%7Blabel1%3D%22foo%22%2C%20label2%3D%22bar%22%2C%20label3%3D%22baz%22%7D&start=1524650400&end=1524654000', hideFromInspector: true, + showErrorAlert: false, headers: {}, }); }); @@ -191,7 +201,11 @@ describe('PrometheusMetricFindQuery', () => { const query = setupMetricFindQuery({ query: 'label_values(metric, resource)', response: { - data: ['value1', 'value2'], + data: [ + { __name__: 'metric', resource: 'value1' }, + { __name__: 'metric', resource: 'value2' }, + { __name__: 'metric', resource: '' }, + ], }, }); const results = await query.process(raw); @@ -202,10 +216,11 @@ describe('PrometheusMetricFindQuery', () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith({ method: 'GET', - url: `/api/datasources/uid/ABCDEF/resources/api/v1/label/resource/values?match${encodeURIComponent( + url: `/api/datasources/uid/ABCDEF/resources/api/v1/series?match${encodeURIComponent( '[]' )}=metric&start=${raw.from.unix()}&end=${raw.to.unix()}`, hideFromInspector: true, + showErrorAlert: false, headers: {}, }); }); diff --git a/packages/grafana-prometheus/src/metric_find_query.ts b/packages/grafana-prometheus/src/metric_find_query.ts index 9bfe894ffeb..0fb7d6d7db8 100644 --- a/packages/grafana-prometheus/src/metric_find_query.ts +++ b/packages/grafana-prometheus/src/metric_find_query.ts @@ -87,17 +87,23 @@ export class PrometheusMetricFindQuery { escapedLabel = escapeForUtf8Support(label); } - const url = `/api/v1/label/${escapedLabel}/values`; - if (!metric || this.datasource.hasLabelsMatchAPISupport()) { + const url = `/api/v1/label/${escapedLabel}/values`; + return this.datasource.metadataRequest(url, params).then((result) => { return _map(result.data.data, (value) => { return { text: value }; }); }); } else { + const url = `/api/v1/series`; + return this.datasource.metadataRequest(url, params).then((result) => { - const _labels = _map(result.data.data, (metric) => metric); + const _labels = _map(result.data.data, (metric) => { + return metric[label] || ''; + }).filter((label) => { + return label !== ''; + }); return uniq(_labels).map((metric) => { return {