diff --git a/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx b/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx index 3bc5c202f05..598f69bb8f6 100644 --- a/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx +++ b/public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx @@ -17,6 +17,8 @@ export interface TraceToMetricsOptions { datasourceUid?: string; tags?: Array>; queries: TraceToMetricQuery[]; + spanStartTimeShift?: string; + spanEndTimeShift?: string; } export interface TraceToMetricQuery { @@ -90,6 +92,50 @@ export function TraceToMetricsSettings({ options, onOptionsChange }: Props) { + + + + updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { + ...options.jsonData.tracesToMetrics, + spanStartTimeShift: v.currentTarget.value, + }) + } + value={options.jsonData.tracesToMetrics?.spanStartTimeShift || ''} + /> + + + + + + + updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', { + ...options.jsonData.tracesToMetrics, + spanEndTimeShift: v.currentTarget.value, + }) + } + value={options.jsonData.tracesToMetrics?.spanEndTimeShift || ''} + /> + + + {options.jsonData.tracesToMetrics?.queries?.map((query, i) => (
diff --git a/public/app/features/explore/TraceView/createSpanLink.test.ts b/public/app/features/explore/TraceView/createSpanLink.test.ts index 980970f0105..925cd932fb4 100644 --- a/public/app/features/explore/TraceView/createSpanLink.test.ts +++ b/public/app/features/explore/TraceView/createSpanLink.test.ts @@ -476,6 +476,30 @@ describe('createSpanLinkFactory', () => { )}` ); }); + + it('with adjusted start and end time', () => { + const splitOpenFn = jest.fn(); + const createLink = createSpanLinkFactory({ + splitOpenFn, + traceToMetricsOptions: { + datasourceUid: 'prom1Uid', + queries: [{ query: 'customQuery' }], + spanStartTimeShift: '-1h', + spanEndTimeShift: '1h', + }, + }); + expect(createLink).toBeDefined(); + + const links = createLink!(createTraceSpan()); + const linkDef = links?.metricLinks?.[0]; + + expect(linkDef).toBeDefined(); + expect(linkDef!.href).toBe( + `/explore?left=${encodeURIComponent( + '{"range":{"from":"2020-10-14T00:00:00.000Z","to":"2020-10-14T02:00:01.000Z"},"datasource":"prom1Uid","queries":[{"expr":"customQuery","refId":"A"}],"panelsState":{}}' + )}` + ); + }); }); it('correctly interpolates span attributes', () => { diff --git a/public/app/features/explore/TraceView/createSpanLink.tsx b/public/app/features/explore/TraceView/createSpanLink.tsx index 256efe998b7..25a32994adb 100644 --- a/public/app/features/explore/TraceView/createSpanLink.tsx +++ b/public/app/features/explore/TraceView/createSpanLink.tsx @@ -171,8 +171,12 @@ function legacyCreateSpanLinkFactory( internalLink: dataLink.internal!, scopedVars: {}, range: getTimeRangeFromSpan(span, { - startMs: 0, - endMs: 0, + startMs: traceToMetricsOptions.spanStartTimeShift + ? rangeUtil.intervalToMs(traceToMetricsOptions.spanStartTimeShift) + : 0, + endMs: traceToMetricsOptions.spanEndTimeShift + ? rangeUtil.intervalToMs(traceToMetricsOptions.spanEndTimeShift) + : 0, }), field: {} as Field, onClickFn: splitOpenFn,