2023-07-28 21:54:36 +05:30
|
|
|
import { QueryParams } from 'constants/query';
|
|
|
|
|
import ROUTES from 'constants/routes';
|
|
|
|
|
|
2023-06-12 18:19:07 +05:30
|
|
|
import { TopOperationList } from './TopOperationsTable';
|
2023-07-28 21:54:36 +05:30
|
|
|
import { NavigateToTraceProps } from './types';
|
2023-06-12 18:19:07 +05:30
|
|
|
|
2023-12-12 14:16:06 +05:30
|
|
|
export const getErrorRate = (list: TopOperationList): number => {
|
|
|
|
|
if (list.errorCount === 0 && list.numCalls === 0) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
return (list.errorCount / list.numCalls) * 100;
|
|
|
|
|
};
|
2023-07-28 21:54:36 +05:30
|
|
|
|
|
|
|
|
export const navigateToTrace = ({
|
|
|
|
|
servicename,
|
|
|
|
|
operation,
|
|
|
|
|
minTime,
|
|
|
|
|
maxTime,
|
|
|
|
|
selectedTraceTags,
|
2024-06-15 13:53:56 +05:30
|
|
|
apmToTraceQuery,
|
2025-02-14 08:24:49 +04:30
|
|
|
safeNavigate,
|
2023-07-28 21:54:36 +05:30
|
|
|
}: NavigateToTraceProps): void => {
|
|
|
|
|
const urlParams = new URLSearchParams();
|
2025-02-14 08:24:49 +04:30
|
|
|
urlParams.set(
|
|
|
|
|
QueryParams.startTime,
|
|
|
|
|
Math.floor(minTime / 1_000_000).toString(),
|
|
|
|
|
);
|
|
|
|
|
urlParams.set(QueryParams.endTime, Math.floor(maxTime / 1_000_000).toString());
|
2024-06-15 13:53:56 +05:30
|
|
|
|
|
|
|
|
const JSONCompositeQuery = encodeURIComponent(JSON.stringify(apmToTraceQuery));
|
|
|
|
|
|
|
|
|
|
const newTraceExplorerPath = `${
|
|
|
|
|
ROUTES.TRACES_EXPLORER
|
|
|
|
|
}?${urlParams.toString()}&selected={"serviceName":["${servicename}"],"operation":["${operation}"]}&filterToFetchData=["duration","status","serviceName","operation"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${
|
|
|
|
|
QueryParams.compositeQuery
|
|
|
|
|
}=${JSONCompositeQuery}`;
|
|
|
|
|
|
2025-02-14 08:24:49 +04:30
|
|
|
safeNavigate(newTraceExplorerPath);
|
2023-07-28 21:54:36 +05:30
|
|
|
};
|
2023-08-16 12:18:56 +05:30
|
|
|
|
|
|
|
|
export const getNearestHighestBucketValue = (
|
|
|
|
|
value: number,
|
|
|
|
|
buckets: number[],
|
|
|
|
|
): string => {
|
2024-04-15 13:37:08 +05:30
|
|
|
// sort the buckets
|
|
|
|
|
buckets.sort((a, b) => a - b);
|
2023-08-16 12:18:56 +05:30
|
|
|
const nearestBucket = buckets.find((bucket) => bucket >= value);
|
|
|
|
|
return nearestBucket?.toString() || '+Inf';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const convertMilSecToNanoSec = (value: number): number =>
|
|
|
|
|
value * 1000000000;
|
2023-11-01 17:53:31 +05:30
|
|
|
|
|
|
|
|
export const convertedTracesToDownloadData = (
|
|
|
|
|
originalData: TopOperationList[],
|
|
|
|
|
): Record<string, string>[] =>
|
|
|
|
|
originalData.map((item) => {
|
|
|
|
|
const newObj: Record<string, string> = {
|
|
|
|
|
Name: item.name,
|
|
|
|
|
'P50 (in ms)': (item.p50 / 1000000).toFixed(2),
|
|
|
|
|
'P95 (in ms)': (item.p95 / 1000000).toFixed(2),
|
|
|
|
|
'P99 (in ms)': (item.p99 / 1000000).toFixed(2),
|
|
|
|
|
'Number of calls': item.numCalls.toString(),
|
|
|
|
|
'Error Rate (%)': getErrorRate(item).toFixed(2),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return newObj;
|
|
|
|
|
});
|