From 0ad29dff94e97654e70ee3f3b8bbe0a1c1750d69 Mon Sep 17 00:00:00 2001 From: Ruben Vargas Date: Mon, 20 May 2019 15:43:17 -0500 Subject: [PATCH] Validate when tags and/or references fields are null Signed-off-by: Ruben Vargas --- .../jaeger-ui/src/model/transform-trace-data.tsx | 14 +++++++------- packages/jaeger-ui/src/types/trace.tsx | 9 ++++++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/jaeger-ui/src/model/transform-trace-data.tsx b/packages/jaeger-ui/src/model/transform-trace-data.tsx index 89c97c84f1..46eeb83c3d 100644 --- a/packages/jaeger-ui/src/model/transform-trace-data.tsx +++ b/packages/jaeger-ui/src/model/transform-trace-data.tsx @@ -15,11 +15,9 @@ import _isEqual from 'lodash/isEqual'; import { getTraceSpanIdsAsTree } from '../selectors/trace'; -import { KeyValuePair, Process, Span, SpanData, Trace, TraceData } from '../types/trace'; +import { KeyValuePair, Span, SpanData, Trace, TraceData } from '../types/trace'; import TreeNode from '../utils/TreeNode'; -type SpanWithProcess = SpanData & { process: Process }; - function deduplicateTags(spanTags: Array) { const warningsHash: Map = new Map(); const tags: Array = spanTags.reduce>((uniqueTags, tag) => { @@ -38,7 +36,7 @@ function deduplicateTags(spanTags: Array) { * NOTE: Mutates `data` - Transform the HTTP response data into the form the app * generally requires. */ -export default function transformTraceData(data: TraceData & { spans: SpanWithProcess[] }): Trace | null { +export default function transformTraceData(data: TraceData & { spans: SpanData[] }): Trace | null { let { traceID } = data; if (!traceID) { return null; @@ -48,14 +46,14 @@ export default function transformTraceData(data: TraceData & { spans: SpanWithPr let traceEndTime = 0; let traceStartTime = Number.MAX_SAFE_INTEGER; const spanIdCounts = new Map(); - const spanMap = new Map(); + const spanMap = new Map(); // filter out spans with empty start times // eslint-disable-next-line no-param-reassign data.spans = data.spans.filter(span => Boolean(span.startTime)); const max = data.spans.length; for (let i = 0; i < max; i++) { - const span = data.spans[i]; + const span: Span = data.spans[i] as Span; const { startTime, duration, processID } = span; // let spanID = span.spanID; @@ -107,9 +105,11 @@ export default function transformTraceData(data: TraceData & { spans: SpanWithPr span.relativeStartTime = span.startTime - traceStartTime; span.depth = depth - 1; span.hasChildren = node.children.length > 0; + span.warnings = span.warnings || []; + span.tags = span.tags || []; + span.references = span.references || []; const tagsInfo = deduplicateTags(span.tags); span.tags = tagsInfo.tags; - span.warnings = span.warnings || []; span.warnings = span.warnings.concat(tagsInfo.warnings); span.references.forEach(ref => { const refSpan = spanMap.get(ref.spanID) as Span; diff --git a/packages/jaeger-ui/src/types/trace.tsx b/packages/jaeger-ui/src/types/trace.tsx index 8257eb5c2e..dedb6a1b31 100644 --- a/packages/jaeger-ui/src/types/trace.tsx +++ b/packages/jaeger-ui/src/types/trace.tsx @@ -52,9 +52,9 @@ export type SpanData = { startTime: number; duration: number; logs: Array; - tags: Array; - references: Array; - warnings: Array | null; + tags?: Array; + references?: Array; + warnings?: Array | null; }; export type Span = SpanData & { @@ -62,6 +62,9 @@ export type Span = SpanData & { hasChildren: boolean; process: Process; relativeStartTime: number; + tags: NonNullable; + references: NonNullable; + warnings: NonNullable; }; export type TraceData = {