summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx178
1 files changed, 67 insertions, 111 deletions
diff --git a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
index 5838d0b3f0f..53d132a2ff0 100644
--- a/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
+++ b/client/js/app/src/app/pages/querybuilder/TransformVespaTrace.jsx
@@ -16,25 +16,19 @@ export default function transform(trace) {
processes = output['data'][0]['processes'];
processes.p0 = { serviceName: 'Query', tags: [] };
let temp = trace['trace']['children'];
- let spans = findChildren(temp);
+ let spans = digDownInTrace(temp);
traceStartTimestamp = findTraceStartTime(spans);
- let topSpanFirstHalf = createNewSpan(traceStartTimestamp);
- data.push(topSpanFirstHalf);
-
- const retrieved = findLogsAndChildren(spans, topSpanFirstHalf);
- const logs = retrieved['logs'];
- const indexes = retrieved['indexes'];
- traverseLogs(logs, indexes);
+ let firstSpan = createNewSpan(traceStartTimestamp);
+ data.push(firstSpan);
+ traverseSpans(spans, firstSpan);
return output;
}
-function traverseChildren(span, logs, children, indexes, parent) {
+function traverseChildren(span, parent) {
let data = output['data'][0]['spans'];
let logSpan;
- let spanTimestamp = span['timestamp'];
if (span.hasOwnProperty('children')) {
- // Create a new parent span so that the timeline for the logs are correct
let duration =
(span['children'][span['children'].length - 1]['timestamp'] -
span['children'][0]['timestamp']) *
@@ -43,55 +37,62 @@ function traverseChildren(span, logs, children, indexes, parent) {
duration = 1;
}
parent['duration'] = duration;
- logSpan = createNewSpan(
- traceStartTimestamp + spanTimestamp,
- duration,
- 'p0',
- parent['operationName'],
- [{ refType: 'CHILD_OF', traceID: traceID, spanID: parent['spanID'] }]
- );
- data.push(logSpan);
- let log = [];
- for (let x of span['children']) {
+ for (let i = 0; i < span['children'].length; i++) {
+ let x = span['children'][i];
if (x.hasOwnProperty('children')) {
- traverseChildren(x, logs, children, indexes, logSpan);
+ // Create a new parent span so that the timeline for the spans are correct
+ logSpan = createNewSpan(
+ traceStartTimestamp + x['timestamp'] * 1000,
+ duration,
+ 'p0',
+ parent['operationName'],
+ [{ refType: 'CHILD_OF', traceID: traceID, spanID: parent['spanID'] }]
+ );
+ data.push(logSpan);
+ traverseChildren(x, logSpan);
} else if (Array.isArray(x['message'])) {
- if (log.length > 0) {
- // finished moving down the search chain
- // create a new array for holding the logs that represent moving up the search chain
- logs.push(log);
- indexes.push(data.indexOf(parent));
- log = [];
- }
createChildren(x['message'], parent['spanID']);
} else {
// only add logs with a timestamp
if (x.hasOwnProperty('timestamp')) {
- log.push(x);
+ let logPointStart = traceStartTimestamp + x['timestamp'] * 1000;
+ let logPointDuration;
+ if (i >= span['children'].length - 1) {
+ logPointDuration = 1;
+ } else {
+ logPointDuration =
+ findDuration(span['children'], i) - x['timestamp'] * 1000;
+ }
+ if (isNaN(logPointDuration) || logPointDuration === 0) {
+ logPointDuration = 1;
+ }
+ let logSpan = createNewSpan(
+ logPointStart,
+ logPointDuration,
+ 'p0',
+ x['message'],
+ [
+ {
+ refType: 'CHILD_OF',
+ traceID: traceID,
+ spanID: parent['spanID'],
+ },
+ ]
+ );
+ data.push(logSpan);
}
}
}
- indexes.push(data.indexOf(parent));
- logs.push(log);
}
}
-function findLogsAndChildren(spans, topSpanFirstHalf) {
- let logs = [];
- let children = [];
- let indexes = [];
+function traverseSpans(spans, firstSpan) {
let data = output['data'][0]['spans'];
- let totalDuration = findDuration(spans);
- topSpanFirstHalf['duration'] = totalDuration;
+ let totalDuration = findTotalDuration(spans);
+ firstSpan['duration'] = totalDuration;
for (let i = 0; i < spans.length; i++) {
if (spans[i].hasOwnProperty('children')) {
- traverseChildren(
- spans[i],
- logs,
- children,
- indexes,
- data[data.length - 1]
- );
+ traverseChildren(spans[i], data[data.length - 1]);
} else if (
spans[i].hasOwnProperty('message') &&
spans[i].hasOwnProperty('timestamp')
@@ -100,7 +101,7 @@ function findLogsAndChildren(spans, topSpanFirstHalf) {
{
refType: 'CHILD_OF',
traceID: traceID,
- spanID: topSpanFirstHalf['spanID'],
+ spanID: firstSpan['spanID'],
},
]);
data.push(span);
@@ -109,69 +110,14 @@ function findLogsAndChildren(spans, topSpanFirstHalf) {
if (i >= spans.length - 1) {
duration = 1;
} else {
- duration = (spans[i + 1]['timestamp'] - spans[i]['timestamp']) * 1000;
- duration = duration === 0 ? 1 : duration;
+ duration = findDuration(spans, i) - spans[i]['timestamp'] * 1000;
}
- if (isNaN(duration)) {
+ if (isNaN(duration) || duration === 0) {
duration = 1;
}
span['duration'] = duration;
}
}
- return { logs: logs, indexes: indexes };
-}
-
-function traverseLogs(logs, indexes) {
- let data = output['data'][0]['spans'];
- let previous;
- for (let i = 0; i < logs.length; i++) {
- previous = data[indexes[i]];
- let log = logs[i];
- let logStartTimestamp = traceStartTimestamp + log[0]['timestamp'] * 1000;
- let logDuration =
- (log[log.length - 1]['timestamp'] - log[0]['timestamp']) * 1000;
- if (logDuration === 0) {
- logDuration = 1;
- }
- let childSpan = createNewSpan(
- logStartTimestamp,
- logDuration,
- 'p0',
- 'test',
- [{ refType: 'CHILD_OF', traceID: traceID, spanID: previous['spanID'] }]
- );
- data.push(childSpan);
- for (let k = 0; k < log.length - 1; k++) {
- if (
- log[k].hasOwnProperty('message') &&
- log[k].hasOwnProperty('timestamp')
- ) {
- let logPointStart = traceStartTimestamp + log[k]['timestamp'] * 1000;
- let logPointDuration;
- if (k >= log.length - 1) {
- logPointDuration = 1;
- } else {
- logPointDuration =
- (log[k + 1]['timestamp'] - log[k]['timestamp']) * 1000;
- logPointDuration = logPointDuration === 0 ? 1 : logPointDuration;
- }
- let logSpan = createNewSpan(
- logPointStart,
- logPointDuration,
- 'p0',
- log[k]['message'],
- [
- {
- refType: 'CHILD_OF',
- traceID: traceID,
- spanID: childSpan['spanID'],
- },
- ]
- );
- data.push(logSpan);
- }
- }
- }
}
function createChildren(children, parentID) {
@@ -274,7 +220,7 @@ function createChildren(children, parentID) {
}
}
-function findChildren(traces) {
+function digDownInTrace(traces) {
for (let trace of traces) {
if (trace.hasOwnProperty('children')) {
return trace['children'];
@@ -308,18 +254,28 @@ function findTraceStartTime(spans) {
return startTime;
}
-function findDuration(spans) {
- let notFound = true;
- let duration = 0;
+// Finds the total duration of the entire trace
+function findTotalDuration(spans) {
let i = spans.length - 1;
- while (notFound && i >= 0) {
+ while (i >= 0) {
if (spans[i].hasOwnProperty('timestamp')) {
- duration = spans[i]['timestamp'];
- notFound = false;
+ return spans[i]['timestamp'] * 1000;
}
i--;
}
- return duration * 1000;
+ return 0;
+}
+
+// Finds the duration of a single span
+function findDuration(span, i) {
+ i = i + 1;
+ while (i < span.length) {
+ if (span[i].hasOwnProperty('timestamp')) {
+ return span[i]['timestamp'] * 1000;
+ }
+ i++;
+ }
+ return 0;
}
function createNewSpan(