diff --git a/public/app/plugins/datasource/tempo/datasource.test.ts b/public/app/plugins/datasource/tempo/datasource.test.ts index caffd39b7c8..96ea7bf8a6a 100644 --- a/public/app/plugins/datasource/tempo/datasource.test.ts +++ b/public/app/plugins/datasource/tempo/datasource.test.ts @@ -106,7 +106,10 @@ describe('Tempo data source', () => { expect(response.data).toHaveLength(2); expect(response.data[0].name).toBe('Nodes'); 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).toEqual(serviceGraphLinks); expect(response.data[1].name).toBe('Edges'); expect(response.data[1].fields[0].values.length).toBe(2); @@ -337,3 +340,28 @@ const mockInvalidJson = { }, ], }; + +const serviceGraphLinks = [ + { + url: '', + title: 'Request rate', + internal: { + query: { + expr: 'rate(traces_service_graph_request_total{server="${__data.fields.id}"}[$__interval])', + }, + datasourceUid: 'prom', + datasourceName: 'Prometheus', + }, + }, + { + url: '', + title: 'Failed request rate', + internal: { + query: { + expr: 'rate(traces_service_graph_request_failed_total{server="${__data.fields.id}"}[$__interval])', + }, + datasourceUid: 'prom', + datasourceName: 'Prometheus', + }, + }, +]; diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts index 9e8747f839a..ad26adfd777 100644 --- a/public/app/plugins/datasource/tempo/datasource.ts +++ b/public/app/plugins/datasource/tempo/datasource.ts @@ -313,8 +313,16 @@ function serviceMapQuery(request: DataQueryRequest, datasourceUid: s const { nodes, edges } = mapPromMetricsToServiceMap(responses, request.range); nodes.fields[0].config = { links: [ - makePromLink('Total requests', totalsMetric, datasourceUid), - makePromLink('Failed requests', failedMetric, datasourceUid), + makePromLink( + 'Request rate', + `rate(${totalsMetric}{server="\${__data.fields.id}"}[$__interval])`, + datasourceUid + ), + makePromLink( + 'Failed request rate', + `rate(${failedMetric}{server="\${__data.fields.id}"}[$__interval])`, + datasourceUid + ), ], };