mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-21 09:26:52 +00:00
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
/* eslint-disable no-param-reassign */
|
|
import { errorColor } from 'lib/getRandomColor';
|
|
import { ITraceTree } from 'types/api/trace/getTraceItem';
|
|
/**
|
|
* Traverses the Span Tree data and returns the relevant meta data.
|
|
* Metadata includes globalStart, globalEnd,
|
|
*/
|
|
export const getSpanTreeMetadata = (
|
|
treeData: ITraceTree,
|
|
spanServiceColours: { [key: string]: string },
|
|
): GetSpanTreeMetaData => {
|
|
let globalStart = Number.POSITIVE_INFINITY;
|
|
let globalEnd = Number.NEGATIVE_INFINITY;
|
|
let totalSpans = 0;
|
|
let levels = 1;
|
|
const traverse = (treeNode: ITraceTree, level = 0): void => {
|
|
if (!treeNode) {
|
|
return;
|
|
}
|
|
totalSpans += 1;
|
|
levels = Math.max(levels, level);
|
|
const { startTime } = treeNode;
|
|
const endTime = startTime + treeNode.value / 1e6;
|
|
globalStart = Math.min(globalStart, startTime);
|
|
globalEnd = Math.max(globalEnd, endTime);
|
|
if (treeNode.hasError) {
|
|
treeNode.serviceColour = errorColor;
|
|
} else treeNode.serviceColour = spanServiceColours[treeNode.serviceName];
|
|
treeNode.children.forEach((childNode) => {
|
|
traverse(childNode, level + 1);
|
|
});
|
|
};
|
|
traverse(treeData, 1);
|
|
|
|
return {
|
|
globalStart,
|
|
globalEnd,
|
|
spread: globalEnd - globalStart,
|
|
totalSpans,
|
|
levels,
|
|
treeData,
|
|
};
|
|
};
|
|
|
|
interface GetSpanTreeMetaData {
|
|
globalStart: number;
|
|
globalEnd: number;
|
|
spread: number;
|
|
totalSpans: number;
|
|
levels: number;
|
|
treeData: ITraceTree;
|
|
}
|