From 516d7a74f2fa8bccfa8d6d9de2abf2934a37242a Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Wed, 20 Dec 2023 16:08:54 +0100 Subject: [PATCH] Prometheus: Fix sending time parameter for query result template variable request (#79754) * Send time parameter for query result template variable request * fix tests --- .../prometheus/metric_find_query.test.ts | 36 +++++++++++++++++-- .../prometheus/metric_find_query.ts | 1 + 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/metric_find_query.test.ts b/public/app/plugins/datasource/prometheus/metric_find_query.test.ts index 4646150f2ce..395704da8f6 100644 --- a/public/app/plugins/datasource/prometheus/metric_find_query.test.ts +++ b/public/app/plugins/datasource/prometheus/metric_find_query.test.ts @@ -6,6 +6,7 @@ import { FetchResponse, TemplateSrv } from '@grafana/runtime'; import { backendSrv } from 'app/core/services/backend_srv'; // will use the version in __mocks__ import { PrometheusDatasource } from './datasource'; +import { getPrometheusTime } from './language_utils'; import PrometheusMetricFindQuery from './metric_find_query'; import { PromApplication, PromOptions } from './types'; @@ -249,7 +250,38 @@ describe('PrometheusMetricFindQuery', () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith({ method: 'GET', - url: `/api/datasources/uid/ABCDEF/resources/api/v1/query?query=metric`, + url: `/api/datasources/uid/ABCDEF/resources/api/v1/query?query=metric&time=${raw.to.unix()}`, + headers: {}, + hideFromInspector: true, + showErrorAlert: false, + }); + }); + + it('query_result(metric) should pass time parameter to datasource.metric_find_query', async () => { + const query = setupMetricFindQuery({ + query: 'query_result(metric)', + response: { + data: { + resultType: 'vector', + result: [ + { + metric: { __name__: 'metric', job: 'testjob' }, + value: [1443454528.0, '3846'], + }, + ], + }, + }, + }); + const results = await query.process(raw); + + const expectedTime = getPrometheusTime(raw.to, true); + + expect(results).toHaveLength(1); + expect(results[0].text).toBe('metric{job="testjob"} 3846 1443454528000'); + expect(fetchMock).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledWith({ + method: 'GET', + url: `/api/datasources/uid/ABCDEF/resources/api/v1/query?query=metric&time=${expectedTime}`, headers: {}, hideFromInspector: true, showErrorAlert: false, @@ -272,7 +304,7 @@ describe('PrometheusMetricFindQuery', () => { expect(fetchMock).toHaveBeenCalledTimes(1); expect(fetchMock).toHaveBeenCalledWith({ method: 'GET', - url: `/api/datasources/uid/ABCDEF/resources/api/v1/query?query=1%2B1`, + url: `/api/datasources/uid/ABCDEF/resources/api/v1/query?query=1%2B1&time=${raw.to.unix()}`, headers: {}, hideFromInspector: true, showErrorAlert: false, diff --git a/public/app/plugins/datasource/prometheus/metric_find_query.ts b/public/app/plugins/datasource/prometheus/metric_find_query.ts index 36cb5ed4715..a0933737132 100644 --- a/public/app/plugins/datasource/prometheus/metric_find_query.ts +++ b/public/app/plugins/datasource/prometheus/metric_find_query.ts @@ -139,6 +139,7 @@ export default class PrometheusMetricFindQuery { const url = '/api/v1/query'; const params = { query, + time: getPrometheusTime(this.range.to, true).toString(), }; return this.datasource.metadataRequest(url, params).then((result: any) => { switch (result.data.data.resultType) {