From adf1e942f01f26cd5fb6012a00cf1d43ddc41092 Mon Sep 17 00:00:00 2001 From: Kanahathi Mohideen Date: Sun, 5 Feb 2023 13:51:51 -0500 Subject: [PATCH] Fix review comments Signed-off-by: Kanahathi Mohideen --- .../jaeger-ui/src/model/link-patterns.test.js | 22 +++------ .../jaeger-ui/src/model/link-patterns.tsx | 46 +++++++++++-------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/packages/jaeger-ui/src/model/link-patterns.test.js b/packages/jaeger-ui/src/model/link-patterns.test.js index 30e3dbcb70..c8e9d41358 100644 --- a/packages/jaeger-ui/src/model/link-patterns.test.js +++ b/packages/jaeger-ui/src/model/link-patterns.test.js @@ -310,10 +310,7 @@ describe('getParameterInTrace()', () => { }; it('returns an entry that is present', () => { - expect(getParameterInTrace('traceID', trace)).toEqual({ - key: 'traceID', - value: trace.traceID, - }); + expect(getParameterInTrace('startTime', trace)).toEqual(trace.startTime); }); it('returns undefined when the entry cannot be found', () => { @@ -385,17 +382,16 @@ describe('computeLinks()', () => { text: 'second link (#{myOtherKey})', }, { - type: 'tags', + type: 'logs', key: 'myThirdKey', - url: 'http://example.com/?myKey1=#{myKey}&myKey=#{myThirdKey}&traceID=#{traceID}&startTime=#{startTime}', - text: 'third link (#{myThirdKey}) for traceID - #{traceID}', + url: 'http://example.com/?myKey1=#{myKey}&myKey=#{myThirdKey}&traceID=#{trace.traceID}&startTime=#{trace.startTime}', + text: 'third link (#{myThirdKey}) for traceID - #{trace.traceID}', } ].map(processLinkPattern); const spans = [ { depth: 0, process: {}, tags: [{ key: 'myKey', value: 'valueOfMyKey' }] }, - { depth: 1, process: {}, logs: [{ fields: [{ key: 'myOtherKey', value: 'valueOfMy+Other+Key' }] }] }, - { depth: 1, process: {}, tags: [{ key: 'myThirdKey', value: 'valueOfThirdMyKey' }] }, + { depth: 1, process: {}, logs: [{ fields: [{ key: 'myOtherKey', value: 'valueOfMy+Other+Key' }, { key: 'myThirdKey', value: 'valueOfThirdMyKey' }] }] }, ]; spans[1].references = [ { @@ -403,12 +399,6 @@ describe('computeLinks()', () => { span: spans[0], }, ]; - spans[2].references = [ - { - refType: 'CHILD_OF', - span: spans[0], - }, - ]; const trace = { processes: [], @@ -434,7 +424,7 @@ describe('computeLinks()', () => { text: 'second link (valueOfMy+Other+Key)', }, ]); - expect(computeLinks(linkPatterns, spans[2], spans[2].tags, 0, trace)).toEqual([ + expect(computeLinks(linkPatterns, spans[1], spans[1].logs[0].fields, 1, trace)).toEqual([ { url: 'http://example.com/?myKey1=valueOfMyKey&myKey=valueOfThirdMyKey&traceID=trc1&startTime=1000', text: 'third link (valueOfThirdMyKey) for traceID - trc1', diff --git a/packages/jaeger-ui/src/model/link-patterns.tsx b/packages/jaeger-ui/src/model/link-patterns.tsx index f817db5735..d816ec88d9 100644 --- a/packages/jaeger-ui/src/model/link-patterns.tsx +++ b/packages/jaeger-ui/src/model/link-patterns.tsx @@ -114,15 +114,23 @@ export function getParameterInAncestor(name: string, span: Span) { return undefined; } -export function getParameterInTrace(name: string, trace: Trace | undefined) { - if(trace) { - const validTraceKeys = (Object.keys(trace) as (keyof Trace)[]).filter( +const getValidTraceKeys = memoize(10)( + (trace: Trace) => { + const validKeys = (Object.keys(trace) as (keyof Trace)[]).filter( key => typeof trace[key] === 'string' || typeof trace[key] === 'number' ); + return validKeys; + } +); + +export function getParameterInTrace(name: string, trace: Trace | undefined) { + + if(trace) { + const validTraceKeys = getValidTraceKeys(trace); const key = name as keyof Trace; if(validTraceKeys.includes(key)) { - return { key: key, value: trace[key] }; + return trace[key]; } } @@ -135,20 +143,17 @@ function callTemplate(template: ProcessedTemplate, data: any) { export function computeTraceLink(linkPatterns: ProcessedLinkPattern[], trace: Trace) { const result: TLinksRV = []; - const validKeys = (Object.keys(trace) as (keyof Trace)[]).filter( - key => typeof trace[key] === 'string' || typeof trace[key] === 'number' - ); linkPatterns .filter(pattern => pattern.type('traces')) .forEach(pattern => { const parameterValues: Record = {}; const allParameters = pattern.parameters.every(parameter => { - const key = parameter as keyof Trace; - if (validKeys.includes(key)) { + const val = getParameterInTrace(parameter, trace); + if (val) { // At this point is safe to access to trace object using parameter variable because // we validated parameter against validKeys, this implies that parameter a keyof Trace. - parameterValues[parameter] = trace[key]; + parameterValues[parameter] = val; return true; } return false; @@ -186,17 +191,22 @@ export function computeLinks( if (pattern.type(type) && pattern.key(item.key) && pattern.value(item.value)) { const parameterValues: Record = {}; const allParameters = pattern.parameters.every(parameter => { - let entry = getParameterInArray(parameter, items); + let entry; - if (!entry && !processTags) { - // do not look in ancestors for process tags because the same object may appear in different places in the hierarchy - // and the cache in getLinks uses that object as a key - entry = getParameterInAncestor(parameter, span); + if(parameter.startsWith('trace.')) { + const traceVal = getParameterInTrace(parameter.split('trace.')[1], trace); + if(traceVal) { + entry = { key: parameter, value: traceVal }; + } } + else { + entry = getParameterInArray(parameter, items); - // look up in trace for matching keys - if(!entry) { - entry = getParameterInTrace(parameter, trace); + if (!entry && !processTags) { + // do not look in ancestors for process tags because the same object may appear in different places in the hierarchy + // and the cache in getLinks uses that object as a key + entry = getParameterInAncestor(parameter, span); + } } if (entry) {