From 70641c77189f5008f762f354b1a13e49ce1855b2 Mon Sep 17 00:00:00 2001 From: Joey <90795735+joey-grafana@users.noreply.github.com> Date: Tue, 16 May 2023 08:19:46 +0100 Subject: [PATCH] [v9.5.x] Tempo: Fix get label values based on CoreApp type (#68513) Tempo: Fix get label values based on CoreApp type (#68463) Fix and update test (cherry picked from commit a1f76af15ac38717f4c7fa182196c51f3e42bfbb) --- .../plugins/datasource/tempo/datasource.test.ts | 3 ++- .../app/plugins/datasource/tempo/datasource.ts | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/tempo/datasource.test.ts b/public/app/plugins/datasource/tempo/datasource.test.ts index 179bd6c5e70..0706e690869 100644 --- a/public/app/plugins/datasource/tempo/datasource.test.ts +++ b/public/app/plugins/datasource/tempo/datasource.test.ts @@ -12,6 +12,7 @@ import { LoadingState, MutableDataFrame, PluginType, + CoreApp, } from '@grafana/data'; import { BackendDataSourceResponse, @@ -450,7 +451,7 @@ describe('Tempo service graph view', () => { }); setDataSourceSrv(backendSrvWithPrometheus as any); const response = await lastValueFrom( - ds.query({ targets: [{ queryType: 'serviceMap' }], range: getDefaultTimeRange() } as any) + ds.query({ targets: [{ queryType: 'serviceMap' }], range: getDefaultTimeRange(), app: CoreApp.Explore } as any) ); expect(response.data).toHaveLength(3); diff --git a/public/app/plugins/datasource/tempo/datasource.ts b/public/app/plugins/datasource/tempo/datasource.ts index 374437d4d4b..9b0ab037e82 100644 --- a/public/app/plugins/datasource/tempo/datasource.ts +++ b/public/app/plugins/datasource/tempo/datasource.ts @@ -3,6 +3,8 @@ import { EMPTY, from, lastValueFrom, merge, Observable, of, throwError } from 'r import { catchError, concatMap, map, mergeMap, toArray } from 'rxjs/operators'; import { + CoreApp, + DataFrame, DataQueryRequest, DataQueryResponse, DataQueryResponseData, @@ -597,7 +599,20 @@ function errorAndDurationQuery( let serviceGraphViewMetrics = []; let errorRateBySpanName = ''; let durationsBySpanName: string[] = []; - const spanNames = getEscapedSpanNames(rateResponse.data[0][0]?.fields[1]?.values.toArray() ?? []); + + let labels = []; + if (request.app === CoreApp.Explore) { + if (rateResponse.data[0][0]?.fields[1]?.values) { + labels = rateResponse.data[0][0]?.fields[1]?.values.toArray(); + } + } else if (rateResponse.data[0]) { + rateResponse.data[0].map((df: DataFrame) => { + if (df.fields[1]?.labels && df.fields[1]?.labels['span_name']) { + labels.push(df.fields[1]?.labels['span_name']); + } + }); + } + const spanNames = getEscapedSpanNames(labels); if (spanNames.length > 0) { errorRateBySpanName = buildExpr(errorRateMetric, 'span_name=~"' + spanNames.join('|') + '"', request);