signoz/frontend/src/utils/getSpanTreeMetadata.ts
palash-signoz 01bad0f18a
chore: eslint fix (#884)
* chore: eslint is updated

* chore: some eslint fixes are made

* chore: some more eslint fix are updated

* chore: some eslint fix is made

* chore: styled components type is added

* chore: some more eslint fix are made

* chore: some more eslint fix are updated

* chore: some more eslint fix are updated

* fix: eslint fixes

Co-authored-by: Pranshu Chittora <pranshu@signoz.io>
2022-03-24 12:06:57 +05:30

54 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;
}
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;
}