From c6cc8fe45437d54f00a1a66e608973d6cea33731 Mon Sep 17 00:00:00 2001 From: Joe Farro Date: Thu, 14 Dec 2017 17:42:47 -0500 Subject: [PATCH] Fix trace name resolution Signed-off-by: Joe Farro --- .../SearchTracePage/TraceResultsScatterPlot.js | 3 ++- .../SearchTracePage/TraceSearchResult.js | 3 ++- src/components/TracePage/TracePageHeader.js | 3 ++- src/components/TracePage/index.js | 2 +- src/constants/fallback-trace-name.js | 15 +++++++++++++++ src/model/search.js | 6 ++---- src/model/search.test.js | 3 ++- src/model/trace-viewer.js | 6 +++--- 8 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 src/constants/fallback-trace-name.js diff --git a/src/components/SearchTracePage/TraceResultsScatterPlot.js b/src/components/SearchTracePage/TraceResultsScatterPlot.js index e01c87394f..7396902af8 100644 --- a/src/components/SearchTracePage/TraceResultsScatterPlot.js +++ b/src/components/SearchTracePage/TraceResultsScatterPlot.js @@ -19,6 +19,7 @@ import dimensions from 'react-dimensions'; import { XYPlot, XAxis, YAxis, MarkSeries, Hint } from 'react-vis'; import { compose, withState, withProps } from 'recompose'; +import FALLBACK_TRACE_NAME from '../../constants/fallback-trace-name'; import { formatDuration } from '../../utils/date'; import './react-vis.css'; @@ -47,7 +48,7 @@ function TraceResultsScatterPlotBase(props) { /> {overValue && ( -

{overValue.name || '¯\\_(ツ)_/¯'}

+

{overValue.name || FALLBACK_TRACE_NAME}

)} diff --git a/src/components/SearchTracePage/TraceSearchResult.js b/src/components/SearchTracePage/TraceSearchResult.js index de1ef32a5a..a86940377c 100644 --- a/src/components/SearchTracePage/TraceSearchResult.js +++ b/src/components/SearchTracePage/TraceSearchResult.js @@ -19,6 +19,7 @@ import moment from 'moment'; import { formatDuration } from '../../utils/date'; import TraceServiceTag from './TraceServiceTag'; +import FALLBACK_TRACE_NAME from '../../constants/fallback-trace-name'; import './TraceSearchResult.css'; @@ -36,7 +37,7 @@ export default function TraceSearchResult({ trace, durationPercent = 100 }) { background: getBackgroundStyle(durationPercent), }} > - {traceName} + {traceName || FALLBACK_TRACE_NAME} {formatDuration(duration * 1000)}
diff --git a/src/components/TracePage/TracePageHeader.js b/src/components/TracePage/TracePageHeader.js index 7111bc6290..5f14fd62c7 100644 --- a/src/components/TracePage/TracePageHeader.js +++ b/src/components/TracePage/TracePageHeader.js @@ -18,6 +18,7 @@ import * as React from 'react'; import { Dropdown, Menu } from 'semantic-ui-react'; import KeyboardShortcutsHelp from './KeyboardShortcutsHelp'; +import FALLBACK_TRACE_NAME from '../../constants/fallback-trace-name'; import { formatDatetime, formatDuration } from '../../utils/date'; type TracePageHeaderProps = { @@ -91,7 +92,7 @@ export default function TracePageHeader(props: TracePageHeaderProps) { style={{ float: 'none' }} /> - {name} + {name || FALLBACK_TRACE_NAME}
diff --git a/src/components/TracePage/index.js b/src/components/TracePage/index.js index 9c3b724de7..b909cdd7e1 100644 --- a/src/components/TracePage/index.js +++ b/src/components/TracePage/index.js @@ -236,7 +236,7 @@ export default class TracePage extends React.PureComponent'; diff --git a/src/model/search.js b/src/model/search.js index 4654b3f3db..58d765b387 100644 --- a/src/model/search.js +++ b/src/model/search.js @@ -39,9 +39,8 @@ export function getTraceSummary(trace: Trace): TraceSummary { let numErrorSpans = 0; // serviceName -> { name, numberOfSpans } const serviceMap = {}; - for (let i = 0; i < spans.length; i++) { - const { duration, processID, spanID, startTime, tags } = spans[i]; + const { duration, processID, references, startTime, tags } = spans[i]; // time bounds of trace minTs = minTs > startTime ? startTime : minTs; maxTs = maxTs < startTime + duration ? startTime + duration : maxTs; @@ -61,8 +60,7 @@ export function getTraceSummary(trace: Trace): TraceSummary { }; serviceMap[serviceName] = svcData; } - // trace name - if (spanID === traceID) { + if (!references || !references.length) { const { operationName } = spans[i]; traceName = `${svcData.name}: ${operationName}`; } diff --git a/src/model/search.test.js b/src/model/search.test.js index e4ad3626f2..866ca82a75 100644 --- a/src/model/search.test.js +++ b/src/model/search.test.js @@ -51,7 +51,7 @@ describe('getTraceSummary()', () => { { traceID: 'main-id', processID: 'pid0', - spanID: 'main-id', + spanID: 'span-id-0', operationName: 'op0', startTime: 1502221240933000, duration: 236857, @@ -65,6 +65,7 @@ describe('getTraceSummary()', () => { startTime: 1502221241144382, duration: 25305, tags: [], + references: [{ refType: 'CHILD_OF', traceID: 'main-id', spanID: 'span-id-0' }], }, ], duration: 236857, diff --git a/src/model/trace-viewer.js b/src/model/trace-viewer.js index dd0700096f..cbc756014a 100644 --- a/src/model/trace-viewer.js +++ b/src/model/trace-viewer.js @@ -13,7 +13,7 @@ // limitations under the License. // eslint-disable-next-line import/prefer-default-export -export function getTraceName(spans, processes) { - const span = spans.find(sp => sp.spanID === sp.traceID) || spans[0]; - return span ? `${processes[span.processID].serviceName}: ${span.operationName}` : ''; +export function getTraceName(spans) { + const span = spans.filter(sp => !sp.references || !sp.references.length)[0]; + return span ? `${span.process.serviceName}: ${span.operationName}` : ''; }