diff --git a/public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx b/public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx
index a8d82af8479..31c42a46ada 100644
--- a/public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx
+++ b/public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx
@@ -2,7 +2,7 @@ import { css } from '@emotion/css';
import React from 'react';
import { DataSourcePluginOptionsEditorProps, updateDatasourcePluginJsonDataOption } from '@grafana/data';
-import { InlineField, InlineFieldRow, Input, useStyles } from '@grafana/ui';
+import { InlineField, InlineFieldRow, InlineSwitch, Input, useStyles } from '@grafana/ui';
import { TempoJsonData } from '../types';
@@ -14,12 +14,29 @@ export function QuerySettings({ options, onOptionsChange }: Props) {
return (
TraceID Query
+
+ {
+ updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceQuery', {
+ ...options.jsonData.traceQuery,
+ timeShiftEnabled: event.currentTarget.checked,
+ });
+ }}
+ />
+
{
it('should include time shift when querying for traceID', () => {
const ds = new TempoDatasource({
...defaultSettings,
- jsonData: { traceQuery: { spanStartTimeShift: '2m', spanEndTimeShift: '4m' } },
+ jsonData: { traceQuery: { timeShiftEnabled: true, spanStartTimeShift: '2m', spanEndTimeShift: '4m' } },
});
const request = ds.traceIdQueryRequest(
@@ -394,6 +394,35 @@ describe('Tempo data source', () => {
expect(request.range.from.unix()).toBe(dateTime(new Date(2022, 8, 13, 15, 58, 0, 0)).unix());
expect(request.range.to.unix()).toBe(dateTime(new Date(2022, 8, 13, 16, 19, 0, 0)).unix());
});
+
+ it('should not include time shift when querying for traceID and time shift config is off', () => {
+ const ds = new TempoDatasource({
+ ...defaultSettings,
+ jsonData: { traceQuery: { timeShiftEnabled: false, spanStartTimeShift: '2m', spanEndTimeShift: '4m' } },
+ });
+
+ const request = ds.traceIdQueryRequest(
+ {
+ requestId: 'test',
+ interval: '',
+ intervalMs: 5,
+ scopedVars: {},
+ targets: [],
+ timezone: '',
+ app: '',
+ startTime: 0,
+ range: {
+ from: dateTime(new Date(2022, 8, 13, 16, 0, 0, 0)),
+ to: dateTime(new Date(2022, 8, 13, 16, 15, 0, 0)),
+ raw: { from: '15m', to: 'now' },
+ },
+ },
+ [{ refId: 'refid1', queryType: 'traceId', query: '' } as TempoQuery]
+ );
+
+ expect(request.range.from.unix()).toBe(dateTime(0).unix());
+ expect(request.range.to.unix()).toBe(dateTime(0).unix());
+ });
});
describe('Tempo apm table', () => {
diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts
index 2dc6bb964cd..2c93be88cbe 100644
--- a/public/app/plugins/datasource/tempo/datasource.ts
+++ b/public/app/plugins/datasource/tempo/datasource.ts
@@ -8,6 +8,7 @@ import {
DataQueryResponseData,
DataSourceApi,
DataSourceInstanceSettings,
+ dateTime,
FieldType,
isValidGoDuration,
LoadingState,
@@ -69,6 +70,7 @@ export class TempoDatasource extends DataSourceWithBackend, targets: TempoQuery[]): DataQueryRequest {
- return {
+ const request = {
...options,
- range: options.range && {
+ targets,
+ };
+
+ if (this.traceQuery?.timeShiftEnabled) {
+ request.range = options.range && {
...options.range,
from: options.range.from.subtract(
rangeUtil.intervalToMs(this.traceQuery?.spanStartTimeShift || '30m'),
'milliseconds'
),
to: options.range.to.add(rangeUtil.intervalToMs(this.traceQuery?.spanEndTimeShift || '30m'), 'milliseconds'),
- },
- targets,
- };
+ };
+ } else {
+ request.range = { from: dateTime(0), to: dateTime(0), raw: { from: dateTime(0), to: dateTime(0) } };
+ }
+
+ return request;
}
async metadataRequest(url: string, params = {}) {
diff --git a/public/app/plugins/datasource/tempo/types.ts b/public/app/plugins/datasource/tempo/types.ts
index 4d4c34a472f..f547e2bc0e4 100644
--- a/public/app/plugins/datasource/tempo/types.ts
+++ b/public/app/plugins/datasource/tempo/types.ts
@@ -30,6 +30,7 @@ export interface TempoJsonData extends DataSourceJsonData {
tag: string;
};
traceQuery?: {
+ timeShiftEnabled?: boolean;
spanStartTimeShift?: string;
spanEndTimeShift?: string;
};