From 4a3be0f8454eeaf59c708a4f87cd9a6f92637256 Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Mon, 18 Oct 2021 11:17:13 +0200 Subject: [PATCH] Prometheus: Pass scoped vars when creating PromLink query (#40525) --- .../prometheus/components/PromLink.test.tsx | 9 +++++++++ .../datasource/prometheus/components/PromLink.tsx | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/prometheus/components/PromLink.test.tsx b/public/app/plugins/datasource/prometheus/components/PromLink.test.tsx index 1f05f8a9bae..b2a540d645d 100644 --- a/public/app/plugins/datasource/prometheus/components/PromLink.test.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromLink.test.tsx @@ -5,9 +5,17 @@ import { PromQuery } from '../types'; import { PrometheusDatasource } from '../datasource'; import PromLink from './PromLink'; +jest.mock('@grafana/data', () => ({ + ...(jest.requireActual('@grafana/data') as any), + rangeUtil: { + intervalToSeconds: jest.fn(() => 15), + }, +})); + const getPanelData = (panelDataOverrides?: Partial) => { const panelData = { request: { + scopedVars: [{ __interval: { text: '15s', value: '15s' } }], targets: [ { refId: 'A', datasource: 'prom1' }, { refId: 'B', datasource: 'prom2' }, @@ -30,6 +38,7 @@ const getDataSource = (datasourceOverrides?: Partial) => { getPrometheusTime: () => 123, createQuery: () => ({ expr: 'up', step: 15 }), directUrl: 'prom1', + getRateIntervalScopedVariable: jest.fn(() => ({ __rate_interval: { text: '60s', value: '60s' } })), }; return (Object.assign(datasource, datasourceOverrides) as unknown) as PrometheusDatasource; diff --git a/public/app/plugins/datasource/prometheus/components/PromLink.tsx b/public/app/plugins/datasource/prometheus/components/PromLink.tsx index abe22ea3eb8..19f9eed97de 100644 --- a/public/app/plugins/datasource/prometheus/components/PromLink.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromLink.tsx @@ -3,7 +3,7 @@ import React, { FC, useEffect, useState, memo } from 'react'; import { PrometheusDatasource } from '../datasource'; import { PromQuery } from '../types'; -import { DataQueryRequest, PanelData, textUtil } from '@grafana/data'; +import { DataQueryRequest, PanelData, ScopedVars, textUtil, rangeUtil } from '@grafana/data'; interface Props { datasource: PrometheusDatasource; @@ -22,7 +22,7 @@ const PromLink: FC = ({ panelData, query, datasource }) => { } const { - request: { range, interval }, + request: { range, interval, scopedVars }, } = panelData; const start = datasource.getPrometheusTime(range.from, false); @@ -30,8 +30,18 @@ const PromLink: FC = ({ panelData, query, datasource }) => { const rangeDiff = Math.ceil(end - start); const endTime = range.to.utc().format('YYYY-MM-DD HH:mm'); + const enrichedScopedVars: ScopedVars = { + ...scopedVars, + // As we support $__rate_interval variable in min step, we need add it to scopedVars + ...datasource.getRateIntervalScopedVariable( + rangeUtil.intervalToSeconds(interval), + rangeUtil.intervalToSeconds(datasource.interval) + ), + }; + const options = { interval, + scopedVars: enrichedScopedVars, } as DataQueryRequest; const queryOptions = datasource.createQuery(query, options, start, end);