signoz/frontend/src/lib/dashboard/prepareQueryRangePayload.ts
Rajat Dabade 503417719c
refactor: Added new props to GetMetricQueryRange to control Step from without global time range. (#3304)
* refactor: added new props to GetMetricQueryRange

* refactor: review comments

* chore: removed the unnecessary props in query-range payload

* chore: name updated

---------

Co-authored-by: Vishal Sharma <makeavish786@gmail.com>
Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com>
Co-authored-by: Palash Gupta <palashgdev@gmail.com>
2023-10-09 14:46:44 +05:30

109 lines
2.8 KiB
TypeScript

import getStartEndRangeTime from 'lib/getStartEndRangeTime';
import getStep from 'lib/getStep';
import { mapQueryDataToApi } from 'lib/newQueryBuilder/queryBuilderMappers/mapQueryDataToApi';
import store from 'store';
import { QueryRangePayload } from 'types/api/metrics/getQueryRange';
import { EQueryType } from 'types/common/dashboard';
import { GetQueryResultsProps } from './getQueryResults';
type PrepareQueryRangePayload = {
queryPayload: QueryRangePayload;
legendMap: Record<string, string>;
};
export const prepareQueryRangePayload = ({
query,
globalSelectedInterval,
graphType,
selectedTime,
tableParams,
variables = {},
params = {},
}: GetQueryResultsProps): PrepareQueryRangePayload => {
let legendMap: Record<string, string> = {};
const { allowSelectedIntervalForStepGen, ...restParams } = params;
const compositeQuery: QueryRangePayload['compositeQuery'] = {
queryType: query.queryType,
panelType: graphType,
};
switch (query.queryType) {
case EQueryType.QUERY_BUILDER: {
const { queryData: data, queryFormulas } = query.builder;
const currentQueryData = mapQueryDataToApi(data, 'queryName', tableParams);
const currentFormulas = mapQueryDataToApi(queryFormulas, 'queryName');
const builderQueries = {
...currentQueryData.data,
...currentFormulas.data,
};
legendMap = {
...currentQueryData.newLegendMap,
...currentFormulas.newLegendMap,
};
compositeQuery.builderQueries = builderQueries;
break;
}
case EQueryType.CLICKHOUSE: {
const chQueries = query[query.queryType].reduce((acc, query) => {
if (!query.query) return acc;
acc[query.name] = query;
legendMap[query.name] = query.legend;
return acc;
}, {} as NonNullable<QueryRangePayload['compositeQuery']['chQueries']>);
compositeQuery.chQueries = chQueries;
break;
}
case EQueryType.PROM: {
// eslint-disable-next-line sonarjs/no-identical-functions
const promQueries = query[query.queryType].reduce((acc, query) => {
if (!query.query) return acc;
acc[query.name] = query;
legendMap[query.name] = query.legend;
return acc;
}, {} as NonNullable<QueryRangePayload['compositeQuery']['promQueries']>);
compositeQuery.promQueries = promQueries;
break;
}
default:
break;
}
const { start, end } = getStartEndRangeTime({
type: selectedTime,
interval: globalSelectedInterval,
});
const queryPayload: QueryRangePayload = {
start: parseInt(start, 10) * 1e3,
end: parseInt(end, 10) * 1e3,
step: getStep({
start: allowSelectedIntervalForStepGen
? start
: store.getState().globalTime.minTime,
end: allowSelectedIntervalForStepGen
? end
: store.getState().globalTime.maxTime,
inputFormat: 'ns',
}),
variables,
compositeQuery,
...restParams,
};
return { legendMap, queryPayload };
};