From ac02294c1c89e592bd41b8699a2f51f5d6ddae4f Mon Sep 17 00:00:00 2001 From: Ruben Vargas Date: Sat, 4 Apr 2020 09:34:19 -0600 Subject: [PATCH] DDG: Remove kind.server filter and handle service calling itself Signed-off-by: Ruben Vargas --- .../src/model/ddg/transformTracesToPaths.tsx | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/packages/jaeger-ui/src/model/ddg/transformTracesToPaths.tsx b/packages/jaeger-ui/src/model/ddg/transformTracesToPaths.tsx index 76e7b10c59..a5a1509918 100644 --- a/packages/jaeger-ui/src/model/ddg/transformTracesToPaths.tsx +++ b/packages/jaeger-ui/src/model/ddg/transformTracesToPaths.tsx @@ -20,6 +20,9 @@ import { TDdgPayloadEntry, TDdgPayloadPath, TDdgPayload } from './types'; import { FetchedTrace } from '../../types'; import { Span } from '../../types/trace'; +const isKindServer = (span: Span) => + span.tags.find(({ key, value }) => key === 'span.kind' && value === 'server'); + function transformTracesToPaths( traces: Record, focalService: string, @@ -36,20 +39,31 @@ function transformTracesToPaths( return !span.hasChildren; }) .forEach(leaf => { - const spans = spanAncestorIds(leaf).map(id => { + const spans = spanAncestorIds(leaf).reduce((acumulator: Span[], id: string): Span[] => { const span = spanMap.get(id); if (!span) throw new Error(`Ancestor spanID ${id} not found in trace ${traceID}`); - return span; - }); + if (acumulator.length > 0) { + const headSpan = acumulator[acumulator.length - 1]; + // Transition inside the same service ServiceA -> ServiceA + if (headSpan.processID === span.processID) { + if (isKindServer(span) && !isKindServer(headSpan)) { + acumulator.pop(); + acumulator.push(span); + } else if (isKindServer(span) && isKindServer(headSpan)) { + acumulator.push(span); + } + return acumulator; + } + } + acumulator.push(span); + return acumulator; + }, []); spans.reverse(); spans.push(leaf); - - const path: TDdgPayloadEntry[] = spans - .filter(span => span.tags.find(({ key, value }) => key === 'span.kind' && value === 'server')) - .map(({ processID, operationName: operation }) => ({ - service: data.processes[processID].serviceName, - operation, - })); + const path: TDdgPayloadEntry[] = spans.map(({ processID, operationName: operation }) => ({ + service: data.processes[processID].serviceName, + operation, + })); if ( path.some(