From e8ac52ba0f849d1e515db5e449b221795926cb8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Giedrius=20Statkevi=C4=8Dius?= Date: Wed, 28 Sep 2022 20:05:52 +0300 Subject: [PATCH] Prometheus: fix proxy check (#54823) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The original check has been added ~3 years ago and since then a new variable has been added that says whether the mode is browser or proxied. Start using the new variable in this function so that proxy mode could be properly detected. It's important to us to get these headers and this check is currently broken for HTTP/HTTPS URLs. Signed-off-by: Giedrius Statkevičius Signed-off-by: Giedrius Statkevičius --- .../datasource/prometheus/datasource.test.ts | 28 +++++++++++++++++++ .../datasource/prometheus/datasource.tsx | 3 +- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/datasource.test.ts b/public/app/plugins/datasource/prometheus/datasource.test.ts index 4b8db23959a..1f64f577bd3 100644 --- a/public/app/plugins/datasource/prometheus/datasource.test.ts +++ b/public/app/plugins/datasource/prometheus/datasource.test.ts @@ -12,6 +12,8 @@ import { LoadingState, toDataFrame, } from '@grafana/data'; +import { TimeSrv } from 'app/features/dashboard/services/TimeSrv'; +import { TemplateSrv } from 'app/features/templating/template_srv'; import { QueryOptions } from 'app/types'; import { VariableHide } from '../../../features/variables/types'; @@ -1846,6 +1848,23 @@ describe('PrometheusDatasource for POST', () => { const httpOptions = { headers: {} as { [key: string]: number | undefined }, }; + const instanceSettings = { + url: 'proxied', + directUrl: 'direct', + user: 'test', + password: 'mupp', + access: 'proxy', + jsonData: { httpMethod: 'POST' }, + } as unknown as DataSourceInstanceSettings; + + let ds: PrometheusDatasource; + beforeEach(() => { + ds = new PrometheusDatasource( + instanceSettings, + templateSrvStub as unknown as TemplateSrv, + timeSrvStub as unknown as TimeSrv + ); + }); it('with proxy access tracing headers should be added', () => { ds._addTracingHeaders(httpOptions as any, options as any); @@ -1855,6 +1874,14 @@ describe('PrometheusDatasource for POST', () => { }); it('with direct access tracing headers should not be added', () => { + const instanceSettings = { + url: 'proxied', + directUrl: 'direct', + user: 'test', + password: 'mupp', + jsonData: { httpMethod: 'POST' }, + } as unknown as DataSourceInstanceSettings; + const mockDs = new PrometheusDatasource( { ...instanceSettings, url: 'http://127.0.0.1:8000' }, templateSrvStub as any, @@ -1882,6 +1909,7 @@ function getPrepareTargetsContext({ const instanceSettings = { url: 'proxied', directUrl: 'direct', + access: 'proxy', user: 'test', password: 'mupp', jsonData: { httpMethod: 'POST' }, diff --git a/public/app/plugins/datasource/prometheus/datasource.tsx b/public/app/plugins/datasource/prometheus/datasource.tsx index 729d1aea0b8..9e35aaa9299 100644 --- a/public/app/plugins/datasource/prometheus/datasource.tsx +++ b/public/app/plugins/datasource/prometheus/datasource.tsx @@ -144,8 +144,7 @@ export class PrometheusDatasource _addTracingHeaders(httpOptions: PromQueryRequest, options: DataQueryRequest) { httpOptions.headers = {}; - const proxyMode = !this.url.match(/^http/); - if (proxyMode) { + if (this.access === 'proxy') { httpOptions.headers['X-Dashboard-Id'] = options.dashboardId; httpOptions.headers['X-Dashboard-UID'] = options.dashboardUID; httpOptions.headers['X-Panel-Id'] = options.panelId;