From 038014484f0ec7a214faa33bc7e4e6df7b459b37 Mon Sep 17 00:00:00 2001 From: Kyrylo Shmidt Date: Wed, 14 Jun 2023 11:53:27 +0200 Subject: [PATCH] Add code object ids to the GET_SPANS message --- .../TraceTimelineViewer/SpanDetail/index.tsx | 32 +++-------------- .../src/components/TracePage/index.tsx | 17 ++-------- .../src/utils/getSpanDataForDigma.ts | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 43 deletions(-) create mode 100644 packages/jaeger-ui/src/utils/getSpanDataForDigma.ts diff --git a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/index.tsx b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/index.tsx index 9a6b53059c..b4c9c83b5e 100644 --- a/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/index.tsx +++ b/packages/jaeger-ui/src/components/TracePage/TraceTimelineViewer/SpanDetail/index.tsx @@ -32,6 +32,7 @@ import { getInsightTypeInfo, getInsightTypeOrderPriority } from '../../../common import { InsightIcon } from '../../../common/InsightIcon'; import Button from '../../../common/Button'; import { CrosshairIcon } from '../../../common/icons/CrosshairIcon'; +import getSpanDataForDigma from '../../../../utils/getSpanDataForDigma'; import { TNil } from '../../../../types'; import { KeyValuePair, Link, Log, Span } from '../../../../types/trace'; @@ -63,7 +64,6 @@ export default class SpanDetail extends React.Component { - const tag = this.props.span.tags.find((x: any) => x.key === value); - return tag ? { ...acc, [key]: tag.value } : acc; - }, {}); - - return { - ...tagsValues, - id: this.props.span.spanID, - name: this.props.span.operationName, - }; - } - _handleCodeButtonClick() { - const spanInfo = this._prepareSpanInfo(); + const spanInfo = getSpanDataForDigma(this.props.span); window.sendMessageToDigma({ action: actions.GO_TO_SPAN, @@ -127,7 +106,7 @@ export default class SpanDetail extends React.Component diff --git a/packages/jaeger-ui/src/components/TracePage/index.tsx b/packages/jaeger-ui/src/components/TracePage/index.tsx index 755aa8231c..8f4eca2fa9 100644 --- a/packages/jaeger-ui/src/components/TracePage/index.tsx +++ b/packages/jaeger-ui/src/components/TracePage/index.tsx @@ -61,6 +61,7 @@ import TraceFlamegraph from './TraceFlamegraph/index'; import { TraceGraphConfig } from '../../types/config'; import { actions } from '../../api/digma/actions'; import { dispatcher } from '../../api/digma/dispatcher'; +import getSpanDataForDigma from '../../utils/getSpanDataForDigma'; import './index.css'; @@ -225,21 +226,7 @@ export class TracePageImpl extends React.PureComponent { window.sendMessageToDigma({ action: actions.GET_SPANS_DATA, payload: { - spans: trace.spans - .map(span => { - const otelLibraryNameTag = span.tags.find(tag => tag.key === 'otel.library.name'); - const functionTag = span.tags.find(tag => tag.key === 'code.function'); - const namespaceTag = span.tags.find(tag => tag.key === 'code.namespace'); - - return { - id: span.spanID, - name: span.operationName, - instrumentationLibrary: otelLibraryNameTag && otelLibraryNameTag.value, - ...(functionTag ? { function: functionTag.value } : {}), - ...(namespaceTag ? { namespace: namespaceTag.value } : {}), - }; - }) - .filter(span => span.instrumentationLibrary), + spans: trace.spans.map(getSpanDataForDigma).filter(span => span.instrumentationLibrary), }, }); } diff --git a/packages/jaeger-ui/src/utils/getSpanDataForDigma.ts b/packages/jaeger-ui/src/utils/getSpanDataForDigma.ts new file mode 100644 index 0000000000..5fb4ccf8ec --- /dev/null +++ b/packages/jaeger-ui/src/utils/getSpanDataForDigma.ts @@ -0,0 +1,34 @@ +import { Span } from '../types/trace'; + +interface IDigmaSpanData { + id: string; + name: string; + instrumentationLibrary?: string; + function?: string; + namespace?: string; + spanCodeObjectId?: string; + methodCodeObjectId?: string; +} + +const getSpanDataForDigma = (span: Span): IDigmaSpanData => { + const tagsToGet: Omit = { + instrumentationLibrary: 'otel.library.name', + function: 'code.function', + namespace: 'code.namespace', + spanCodeObjectId: 'digma.span.code.object.id', + methodCodeObjectId: 'digma.method.code.object.id', + }; + + const tagsValues = Object.entries(tagsToGet).reduce((acc, [key, value]) => { + const tag = span.tags.find((x: any) => x.key === value); + return tag ? { ...acc, [key]: tag.value } : acc; + }, {}); + + return { + ...tagsValues, + id: span.spanID, + name: span.operationName, + }; +}; + +export default getSpanDataForDigma;