Tracing: Split name column in search results (#72449)

* Split name column

* Add tests

* Update test
This commit is contained in:
Joey 2023-08-14 13:26:08 +01:00 committed by GitHub
parent c830c01e61
commit e6c96e7308
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 71 deletions

View File

@ -110,15 +110,18 @@ describe('createTableFrameFromSearch()', () => {
// TraceID must have unit = 'string' to prevent the ID from rendering as Infinity
expect(frame.fields[0].config.unit).toBe('string');
expect(frame.fields[1].name).toBe('traceName');
expect(frame.fields[1].values[0]).toBe('c10d7ca4e3a00354 ');
expect(frame.fields[1].name).toBe('traceService');
expect(frame.fields[1].values[0]).toBe('requester');
expect(frame.fields[2].name).toBe('startTime');
expect(frame.fields[2].values[0]).toBe('2022-01-28 03:00:28');
expect(frame.fields[2].values[1]).toBe('2022-01-27 22:56:06');
expect(frame.fields[2].name).toBe('traceName');
expect(frame.fields[2].values[0]).toBe('app');
expect(frame.fields[3].name).toBe('traceDuration');
expect(frame.fields[3].values[0]).toBe(65);
expect(frame.fields[3].name).toBe('startTime');
expect(frame.fields[3].values[0]).toBe('2022-01-28 03:00:28');
expect(frame.fields[3].values[1]).toBe('2022-01-27 22:56:06');
expect(frame.fields[4].name).toBe('traceDuration');
expect(frame.fields[4].values[0]).toBe(65);
});
});
@ -134,60 +137,64 @@ describe('createTableFrameFromTraceQlQuery()', () => {
expect(frame.fields[1].name).toBe('startTime');
expect(frame.fields[1].type).toBe('string');
expect(frame.fields[1].values[1]).toBe('2022-01-27 22:56:06');
// Trace name field
expect(frame.fields[2].name).toBe('traceName');
// Trace service field
expect(frame.fields[2].name).toBe('traceService');
expect(frame.fields[2].type).toBe('string');
expect(frame.fields[2].values[0]).toBe('lb HTTP Client');
expect(frame.fields[2].values[0]).toBe('lb');
// Trace name field
expect(frame.fields[3].name).toBe('traceName');
expect(frame.fields[3].type).toBe('string');
expect(frame.fields[3].values[0]).toBe('HTTP Client');
// Duration field
expect(frame.fields[3].name).toBe('traceDuration');
expect(frame.fields[3].type).toBe('number');
expect(frame.fields[3].values[2]).toBe(44);
expect(frame.fields[4].name).toBe('traceDuration');
expect(frame.fields[4].type).toBe('number');
expect(frame.fields[4].values[2]).toBe(44);
// Subframes field
expect(frame.fields[4].name).toBe('nested');
expect(frame.fields[4].type).toBe('nestedFrames');
expect(frame.fields[5].name).toBe('nested');
expect(frame.fields[5].type).toBe('nestedFrames');
// Single spanset
expect(frame.fields[4].values[0][0].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[4].values[0][0].fields[0].values[0]).toBe('b1586c3c8c34d');
expect(frame.fields[4].values[0][0].fields[1].name).toBe('spanID');
expect(frame.fields[4].values[0][0].fields[1].values[0]).toBe('162a4adae63b61f1');
expect(frame.fields[4].values[0][0].fields[2].name).toBe('spanStartTime');
expect(frame.fields[4].values[0][0].fields[2].values[0]).toBe('2022-10-19 09:03:34');
expect(frame.fields[4].values[0][0].fields[4].name).toBe('http.method');
expect(frame.fields[4].values[0][0].fields[4].values[0]).toBe('GET');
expect(frame.fields[4].values[0][0].fields[5].name).toBe('service.name');
expect(frame.fields[4].values[0][0].fields[5].values[0]).toBe('db');
expect(frame.fields[4].values[0][0].fields[6].name).toBe('duration');
expect(frame.fields[4].values[0][0].fields[6].values[0]).toBe(545000);
expect(frame.fields[5].values[0][0].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[5].values[0][0].fields[0].values[0]).toBe('b1586c3c8c34d');
expect(frame.fields[5].values[0][0].fields[1].name).toBe('spanID');
expect(frame.fields[5].values[0][0].fields[1].values[0]).toBe('162a4adae63b61f1');
expect(frame.fields[5].values[0][0].fields[2].name).toBe('spanStartTime');
expect(frame.fields[5].values[0][0].fields[2].values[0]).toBe('2022-10-19 09:03:34');
expect(frame.fields[5].values[0][0].fields[4].name).toBe('http.method');
expect(frame.fields[5].values[0][0].fields[4].values[0]).toBe('GET');
expect(frame.fields[5].values[0][0].fields[5].name).toBe('service.name');
expect(frame.fields[5].values[0][0].fields[5].values[0]).toBe('db');
expect(frame.fields[5].values[0][0].fields[6].name).toBe('duration');
expect(frame.fields[5].values[0][0].fields[6].values[0]).toBe(545000);
// Multiple spansets - set 0
expect(frame.fields[4].values[1][0].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[4].values[1][0].fields[0].values[0]).toBe('9161e77388f3e');
expect(frame.fields[4].values[1][0].fields[1].name).toBe('spanID');
expect(frame.fields[4].values[1][0].fields[1].values[0]).toBe('3b9a5c222d3ddd8f');
expect(frame.fields[4].values[1][0].fields[2].name).toBe('spanStartTime');
expect(frame.fields[4].values[1][0].fields[2].values[0]).toBe('2022-10-19 08:57:55');
expect(frame.fields[4].values[1][0].fields[4].name).toBe('by(resource.service.name)');
expect(frame.fields[4].values[1][0].fields[4].values[0]).toBe('db');
expect(frame.fields[4].values[1][0].fields[5].name).toBe('http.method');
expect(frame.fields[4].values[1][0].fields[5].values[0]).toBe('GET');
expect(frame.fields[4].values[1][0].fields[6].name).toBe('service.name');
expect(frame.fields[4].values[1][0].fields[6].values[0]).toBe('db');
expect(frame.fields[4].values[1][0].fields[7].name).toBe('duration');
expect(frame.fields[4].values[1][0].fields[7].values[0]).toBe(877000);
expect(frame.fields[5].values[1][0].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[5].values[1][0].fields[0].values[0]).toBe('9161e77388f3e');
expect(frame.fields[5].values[1][0].fields[1].name).toBe('spanID');
expect(frame.fields[5].values[1][0].fields[1].values[0]).toBe('3b9a5c222d3ddd8f');
expect(frame.fields[5].values[1][0].fields[2].name).toBe('spanStartTime');
expect(frame.fields[5].values[1][0].fields[2].values[0]).toBe('2022-10-19 08:57:55');
expect(frame.fields[5].values[1][0].fields[4].name).toBe('by(resource.service.name)');
expect(frame.fields[5].values[1][0].fields[4].values[0]).toBe('db');
expect(frame.fields[5].values[1][0].fields[5].name).toBe('http.method');
expect(frame.fields[5].values[1][0].fields[5].values[0]).toBe('GET');
expect(frame.fields[5].values[1][0].fields[6].name).toBe('service.name');
expect(frame.fields[5].values[1][0].fields[6].values[0]).toBe('db');
expect(frame.fields[5].values[1][0].fields[7].name).toBe('duration');
expect(frame.fields[5].values[1][0].fields[7].values[0]).toBe(877000);
// Multiple spansets - set 1
expect(frame.fields[4].values[1][1].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[4].values[1][1].fields[0].values[0]).toBe('9161e77388f3e');
expect(frame.fields[4].values[1][1].fields[1].name).toBe('spanID');
expect(frame.fields[4].values[1][1].fields[1].values[0]).toBe('894d90db6b5807f');
expect(frame.fields[4].values[1][1].fields[2].name).toBe('spanStartTime');
expect(frame.fields[4].values[1][1].fields[2].values[0]).toBe('2022-10-19 08:57:55');
expect(frame.fields[4].values[1][1].fields[4].name).toBe('by(resource.service.name)');
expect(frame.fields[4].values[1][1].fields[4].values[0]).toBe('app');
expect(frame.fields[4].values[1][1].fields[5].name).toBe('http.method');
expect(frame.fields[4].values[1][1].fields[5].values[0]).toBe('GET');
expect(frame.fields[4].values[1][1].fields[6].name).toBe('service.name');
expect(frame.fields[4].values[1][1].fields[6].values[0]).toBe('app');
expect(frame.fields[4].values[1][1].fields[7].name).toBe('duration');
expect(frame.fields[4].values[1][1].fields[7].values[0]).toBe(11073000);
expect(frame.fields[5].values[1][1].fields[0].name).toBe('traceIdHidden');
expect(frame.fields[5].values[1][1].fields[0].values[0]).toBe('9161e77388f3e');
expect(frame.fields[5].values[1][1].fields[1].name).toBe('spanID');
expect(frame.fields[5].values[1][1].fields[1].values[0]).toBe('894d90db6b5807f');
expect(frame.fields[5].values[1][1].fields[2].name).toBe('spanStartTime');
expect(frame.fields[5].values[1][1].fields[2].values[0]).toBe('2022-10-19 08:57:55');
expect(frame.fields[5].values[1][1].fields[4].name).toBe('by(resource.service.name)');
expect(frame.fields[5].values[1][1].fields[4].values[0]).toBe('app');
expect(frame.fields[5].values[1][1].fields[5].name).toBe('http.method');
expect(frame.fields[5].values[1][1].fields[5].values[0]).toBe('GET');
expect(frame.fields[5].values[1][1].fields[6].name).toBe('service.name');
expect(frame.fields[5].values[1][1].fields[6].values[0]).toBe('app');
expect(frame.fields[5].values[1][1].fields[7].name).toBe('duration');
expect(frame.fields[5].values[1][1].fields[7].values[0]).toBe(11073000);
});
});

View File

@ -529,6 +529,7 @@ export function createTableFrameFromSearch(data: TraceSearchMetadata[], instance
],
},
},
{ name: 'traceService', type: FieldType.string, config: { displayNameFromDS: 'Trace service' } },
{ name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Trace name' } },
{ name: 'startTime', type: FieldType.string, config: { displayNameFromDS: 'Start time' } },
{ name: 'traceDuration', type: FieldType.number, config: { displayNameFromDS: 'Duration', unit: 'ms' } },
@ -553,23 +554,15 @@ export function createTableFrameFromSearch(data: TraceSearchMetadata[], instance
}
function transformToTraceData(data: TraceSearchMetadata) {
let traceName = '';
if (data.rootServiceName) {
traceName += data.rootServiceName + ' ';
}
if (data.rootTraceName) {
traceName += data.rootTraceName;
}
const traceStartTime = parseInt(data.startTimeUnixNano!, 10) / 1000000;
let startTime = !isNaN(traceStartTime) ? dateTimeFormat(traceStartTime) : '';
const startTime = !isNaN(traceStartTime) ? dateTimeFormat(traceStartTime) : '';
return {
traceID: data.traceID,
startTime,
traceDuration: data.durationMs,
traceName,
traceService: data.rootServiceName || '',
traceName: data.rootTraceName || '',
};
}
@ -615,6 +608,7 @@ export function createTableFrameFromTraceQlQuery(
},
},
},
{ name: 'traceService', type: FieldType.string, config: { displayNameFromDS: 'Service' } },
{ name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Name' } },
{
name: 'traceDuration',
@ -649,17 +643,18 @@ export function createTableFrameFromTraceQlQuery(
const traceData: TraceTableData = transformToTraceData(trace);
frame.fields[0].values.push(traceData.traceID);
frame.fields[1].values.push(traceData.startTime);
frame.fields[2].values.push(traceData.traceName);
frame.fields[3].values.push(traceData.traceDuration);
frame.fields[2].values.push(traceData.traceService);
frame.fields[3].values.push(traceData.traceName);
frame.fields[4].values.push(traceData.traceDuration);
if (trace.spanSets) {
frame.fields[4].values.push(
frame.fields[5].values.push(
trace.spanSets.map((spanSet: Spanset) => {
return traceSubFrame(trace, spanSet, instanceSettings);
})
);
} else if (trace.spanSet) {
frame.fields[4].values.push([traceSubFrame(trace, trace.spanSet, instanceSettings)]);
frame.fields[5].values.push([traceSubFrame(trace, trace.spanSet, instanceSettings)]);
}
});

View File

@ -2278,7 +2278,8 @@ export const tempoSearchResponse = {
traces: [
{
traceID: 'e641dcac1c3a0565',
rootServiceName: 'c10d7ca4e3a00354',
rootServiceName: 'requester',
rootTraceName: 'app',
startTimeUnixNano: '1643356828724000000',
durationMs: 65,
},