diff --git a/public/app/plugins/datasource/tempo/datasource.test.ts b/public/app/plugins/datasource/tempo/datasource.test.ts index e692163b64a..b43ae4a4822 100644 --- a/public/app/plugins/datasource/tempo/datasource.test.ts +++ b/public/app/plugins/datasource/tempo/datasource.test.ts @@ -174,7 +174,7 @@ describe('Tempo data source', () => { expect(response.data[0].fields[0].values.length).toBe(3); // Test Links - expect(response.data[0].fields[0].config.links.length).toBeGreaterThan(0); + expect(response.data[0].fields[0].config.links.length).toBe(4); expect(response.data[0].fields[0].config.links).toEqual(serviceGraphLinks); expect(response.data[1].name).toBe('Edges'); @@ -493,4 +493,16 @@ const serviceGraphLinks = [ datasourceName: 'Prometheus', }, }, + { + url: '', + title: 'View traces', + internal: { + query: { + queryType: 'nativeSearch', + serviceName: '${__data.fields[0]}', + } as TempoQuery, + datasourceUid: 'tempo', + datasourceName: 'Tempo', + }, + }, ]; diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts index 9d65db82183..7287ab709a1 100644 --- a/public/app/plugins/datasource/tempo/datasource.ts +++ b/public/app/plugins/datasource/tempo/datasource.ts @@ -202,7 +202,7 @@ export class TempoDatasource extends DataSourceWithBackend 0) { - subQueries.push(serviceMapQuery(options, this.serviceMap.datasourceUid)); + subQueries.push(serviceMapQuery(options, this.serviceMap.datasourceUid, this.name)); } if (targets.traceId?.length > 0) { @@ -396,7 +396,7 @@ function queryServiceMapPrometheus(request: DataQueryRequest, datasou ); } -function serviceMapQuery(request: DataQueryRequest, datasourceUid: string) { +function serviceMapQuery(request: DataQueryRequest, datasourceUid: string, tempoDatasourceUid: string) { return queryServiceMapPrometheus(makePromServiceMapRequest(request), datasourceUid).pipe( // Just collect all the responses first before processing into node graph data toArray(), @@ -424,6 +424,7 @@ function serviceMapQuery(request: DataQueryRequest, datasourceUid: s `rate(${failedMetric}{server="\${__data.fields.id}"}[$__rate_interval])`, datasourceUid ), + makeTempoLink('View traces', `\${__data.fields[0]}`, tempoDatasourceUid), ], }; @@ -449,6 +450,21 @@ function makePromLink(title: string, metric: string, datasourceUid: string) { }; } +function makeTempoLink(title: string, serviceName: string, datasourceUid: string) { + return { + url: '', + title, + internal: { + query: { + queryType: 'nativeSearch', + serviceName: serviceName, + } as TempoQuery, + datasourceUid: datasourceUid, + datasourceName: 'Tempo', + }, + }; +} + function makePromServiceMapRequest(options: DataQueryRequest): DataQueryRequest { return { ...options,