diff options
author | Kristian Aune <kkraune@users.noreply.github.com> | 2022-08-10 14:56:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-10 14:56:48 +0200 |
commit | b3a241b6da97bf8c032b9d506e9994484a1d114c (patch) | |
tree | 69581a09c730eac9f9bd8a168e00ae735acb83e8 | |
parent | b0fdd9f2e8885ed21cbf584d6e3b1218ba6ae4d2 (diff) | |
parent | bbd623a0feea3e7d212018081a29dfca040c4f03 (diff) |
Merge pull request #23621 from Ethnas/master
Spans get more descriptive names
-rw-r--r-- | client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx | 129 |
1 files changed, 79 insertions, 50 deletions
diff --git a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx index 53d132a2ff0..7f0508ae62e 100644 --- a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx +++ b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx @@ -2,6 +2,8 @@ let traceID = ''; let processes = {}; let output = {}; let traceStartTimestamp = 0; +const processMap = new Map(); +let processID = 1; // Generates a random hex string of size "size" const genRanHex = (size) => @@ -13,12 +15,13 @@ export default function transform(trace) { traceID = genRanHex(32); output = { data: [{ traceID: traceID, spans: [], processes: {} }] }; let data = output['data'][0]['spans']; - processes = output['data'][0]['processes']; - processes.p0 = { serviceName: 'Query', tags: [] }; let temp = trace['trace']['children']; + let message = temp[0]['message'].split(' '); + processes = output['data'][0]['processes']; + processes.p0 = { serviceName: message[3], tags: [] }; let spans = digDownInTrace(temp); traceStartTimestamp = findTraceStartTime(spans); - let firstSpan = createNewSpan(traceStartTimestamp); + let firstSpan = createNewSpan(traceStartTimestamp, 0, 'p0', message[6]); data.push(firstSpan); traverseSpans(spans, firstSpan); @@ -33,7 +36,7 @@ function traverseChildren(span, parent) { (span['children'][span['children'].length - 1]['timestamp'] - span['children'][0]['timestamp']) * 1000; - if (isNaN(duration) || duration === 0) { + if (isNaN(duration) || duration <= 0) { duration = 1; } parent['duration'] = duration; @@ -41,10 +44,12 @@ function traverseChildren(span, parent) { let x = span['children'][i]; if (x.hasOwnProperty('children')) { // Create a new parent span so that the timeline for the spans are correct + let message = findProcessName(parent['operationName']); + let processKey = message === '' ? 'p0' : getProcess(message); logSpan = createNewSpan( traceStartTimestamp + x['timestamp'] * 1000, duration, - 'p0', + processKey, parent['operationName'], [{ refType: 'CHILD_OF', traceID: traceID, spanID: parent['spanID'] }] ); @@ -54,7 +59,7 @@ function traverseChildren(span, parent) { createChildren(x['message'], parent['spanID']); } else { // only add logs with a timestamp - if (x.hasOwnProperty('timestamp')) { + if (x.hasOwnProperty('message') && x.hasOwnProperty('timestamp')) { let logPointStart = traceStartTimestamp + x['timestamp'] * 1000; let logPointDuration; if (i >= span['children'].length - 1) { @@ -63,13 +68,15 @@ function traverseChildren(span, parent) { logPointDuration = findDuration(span['children'], i) - x['timestamp'] * 1000; } - if (isNaN(logPointDuration) || logPointDuration === 0) { + if (isNaN(logPointDuration) || logPointDuration <= 0) { logPointDuration = 1; } - let logSpan = createNewSpan( + let message = findProcessName(x['message']); + let processKey = message === '' ? 'p0' : getProcess(message); + logSpan = createNewSpan( logPointStart, logPointDuration, - 'p0', + processKey, x['message'], [ { @@ -97,7 +104,9 @@ function traverseSpans(spans, firstSpan) { spans[i].hasOwnProperty('message') && spans[i].hasOwnProperty('timestamp') ) { - let span = createNewSpan(0, 0, 'p0', spans[i]['message'], [ + let message = findProcessName(spans[i]['message']); + let processKey = message === '' ? 'p0' : getProcess(message); + let span = createNewSpan(0, 0, processKey, spans[i]['message'], [ { refType: 'CHILD_OF', traceID: traceID, @@ -112,7 +121,7 @@ function traverseSpans(spans, firstSpan) { } else { duration = findDuration(spans, i) - spans[i]['timestamp'] * 1000; } - if (isNaN(duration) || duration === 0) { + if (isNaN(duration) || duration <= 0) { duration = 1; } span['duration'] = duration; @@ -123,21 +132,16 @@ function traverseSpans(spans, firstSpan) { function createChildren(children, parentID) { let child = children[0]; let processKey = genRanHex(5); - processes[processKey] = { serviceName: genRanHex(3), tags: [] }; - let spanID = genRanHex(16); + processes[processKey] = { serviceName: 'Proton:' + genRanHex(3), tags: [] }; let data = output['data'][0]['spans']; let startTimestamp = Date.parse(child['start_time']) * 1000; - let newSpan = { - traceID: traceID, - spanID: spanID, - operationName: 'something', - startTime: startTimestamp, - duration: child['duration_ms'] * 1000, - references: [{ refType: 'CHILD_OF', traceID: traceID, spanID: parentID }], - tags: [], - logs: [], - processID: processKey, - }; + let newSpan = createNewSpan( + startTimestamp, + child['duration_ms'] * 1000, + processKey, + 'Search Dispatch', + [{ refType: 'CHILD_OF', traceID: traceID, spanID: parentID }] + ); data.push(newSpan); let traces = child['traces']; for (let k = 0; k < traces.length; k++) { @@ -146,6 +150,8 @@ function createChildren(children, parentID) { let events; let firstEvent; let duration; + processKey = getProcessID(); + processes[processKey] = { serviceName: trace['tag'], tags: [] }; if (trace['tag'] === 'query_execution') { events = trace['threads'][0]['traces']; firstEvent = events[0]; @@ -168,23 +174,17 @@ function createChildren(children, parentID) { firstEvent = events[0]; duration = (traceTimestamp - firstEvent['timestamp_ms']) * 1000; } - let childSpanID = genRanHex(16); - let childSpan = { - traceID: traceID, - spanID: childSpanID, - operationName: trace['tag'], - startTime: startTimestamp + firstEvent['timestamp_ms'] * 1000, - duration: duration, - references: [{ refType: 'CHILD_OF', traceID: traceID, spanID: spanID }], - tags: [], - logs: [], - processID: processKey, - }; + let childSpan = createNewSpan( + startTimestamp + firstEvent['timestamp_ms'] * 1000, + duration, + processKey, + trace['tag'], + [{ refType: 'CHILD_OF', traceID: traceID, spanID: newSpan['spanID'] }] + ); data.push(childSpan); if (events.length > 0) { for (let j = 0; j < events.length; j++) { let event = events[j]; - let eventID = genRanHex(16); let eventStart = event['timestamp_ms']; let operationName; if (event.hasOwnProperty('event')) { @@ -201,19 +201,19 @@ function createChildren(children, parentID) { operationName = event['tag']; duration = (events[j + 1]['timestamp_ms'] - eventStart) * 1000; } - let eventSpan = { - traceID: traceID, - spanID: eventID, - operationName: operationName, - startTime: startTimestamp + eventStart * 1000, - duration: duration, - references: [ - { refType: 'CHILD_OF', traceID: traceID, spanID: childSpanID }, - ], - tags: [], - logs: [], - processID: processKey, - }; + let eventSpan = createNewSpan( + startTimestamp + eventStart * 1000, + duration, + processKey, + operationName, + [ + { + refType: 'CHILD_OF', + traceID: traceID, + spanID: childSpan['spanID'], + }, + ] + ); data.push(eventSpan); } } @@ -299,3 +299,32 @@ function createNewSpan( }; return newSpan; } + +function getProcess(key) { + if (processMap.has(key)) { + return processMap.get(key); + } else { + let id = 'p' + getProcessID(); + processes[id] = { serviceName: key, tags: [] }; + processMap.set(key, id); + return id; + } +} + +function getProcessID() { + processID += 1; + return processID; +} + +// find a name to use for a process using the operationName from a span +function findProcessName(string) { + let regex = /(?:[a-z]+\.)+[a-zA-Z]+/gm; + let match = string.match(regex); + if (match != null && match.length > 0) { + let temp = match[0]; + temp = temp.split('.'); + return temp[temp.length - 1]; + } else { + return ''; + } +} |