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; };