2022-06-28 17:32:02 +05:30
|
|
|
/* eslint-disable */
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
// @ts-nocheck
|
|
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
import { getMetricsQueryRange } from 'api/metrics/getQueryRange';
|
2023-06-28 15:19:52 +05:30
|
|
|
import { GRAPH_TYPES } from 'container/NewDashboard/ComponentsSlider';
|
2021-09-23 15:43:43 +05:30
|
|
|
import { timePreferenceType } from 'container/NewWidget/RightContainer/timeItems';
|
2022-06-24 15:00:21 +05:30
|
|
|
import { Time } from 'container/TopNav/DateTimeSelection/config';
|
2023-06-28 15:19:52 +05:30
|
|
|
import getStartEndRangeTime from 'lib/getStartEndRangeTime';
|
2022-04-05 16:09:57 +05:30
|
|
|
import getStep from 'lib/getStep';
|
2023-06-28 15:19:52 +05:30
|
|
|
import { convertNewDataToOld } from 'lib/newQueryBuilder/convertNewDataToOld';
|
2023-05-02 17:08:03 +03:00
|
|
|
import { mapQueryDataToApi } from 'lib/newQueryBuilder/queryBuilderMappers/mapQueryDataToApi';
|
2022-06-24 15:00:21 +05:30
|
|
|
import { isEmpty } from 'lodash-es';
|
2023-06-28 15:19:52 +05:30
|
|
|
import store from 'store';
|
2023-06-07 15:27:33 +03:00
|
|
|
import { SuccessResponse } from 'types/api';
|
2022-06-24 15:00:21 +05:30
|
|
|
import { MetricRangePayloadProps } from 'types/api/metrics/getQueryRange';
|
2023-06-28 15:19:52 +05:30
|
|
|
import { Query } from 'types/api/queryBuilder/queryBuilderData';
|
2023-05-02 17:08:03 +03:00
|
|
|
import { EQueryType } from 'types/common/dashboard';
|
2023-07-04 08:24:34 +03:00
|
|
|
import { Pagination } from 'hooks/queryPagination';
|
2021-09-23 15:43:43 +05:30
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
export async function GetMetricQueryRange({
|
|
|
|
|
query,
|
|
|
|
|
globalSelectedInterval,
|
|
|
|
|
graphType,
|
|
|
|
|
selectedTime,
|
2023-07-04 08:24:34 +03:00
|
|
|
tableParams,
|
2022-09-09 17:43:25 +05:30
|
|
|
variables = {},
|
2023-06-19 15:57:58 +03:00
|
|
|
params = {},
|
2023-06-07 15:27:33 +03:00
|
|
|
}: GetQueryResultsProps): Promise<SuccessResponse<MetricRangePayloadProps>> {
|
2023-05-10 19:40:27 +03:00
|
|
|
const queryData = query[query.queryType];
|
2023-05-02 17:08:03 +03:00
|
|
|
let legendMap: Record<string, string> = {};
|
2022-06-28 17:32:02 +05:30
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
const QueryPayload = {
|
2023-05-02 17:08:03 +03:00
|
|
|
compositeQuery: {
|
2023-05-10 19:40:27 +03:00
|
|
|
queryType: query.queryType,
|
2023-05-02 17:08:03 +03:00
|
|
|
panelType: graphType,
|
2022-06-24 15:00:21 +05:30
|
|
|
},
|
|
|
|
|
};
|
2023-05-02 17:08:03 +03:00
|
|
|
|
2023-05-10 19:40:27 +03:00
|
|
|
switch (query.queryType) {
|
2022-06-24 15:00:21 +05:30
|
|
|
case EQueryType.QUERY_BUILDER: {
|
2023-05-10 19:40:27 +03:00
|
|
|
const { queryData: data, queryFormulas } = query.builder;
|
2023-07-04 08:24:34 +03:00
|
|
|
const currentQueryData = mapQueryDataToApi(data, 'queryName', tableParams);
|
2023-05-23 16:47:52 +03:00
|
|
|
const currentFormulas = mapQueryDataToApi(queryFormulas, 'queryName');
|
2023-07-04 08:24:34 +03:00
|
|
|
|
2023-05-23 16:47:52 +03:00
|
|
|
const builderQueries = {
|
|
|
|
|
...currentQueryData.data,
|
|
|
|
|
...currentFormulas.data,
|
|
|
|
|
};
|
|
|
|
|
legendMap = {
|
|
|
|
|
...currentQueryData.newLegendMap,
|
|
|
|
|
...currentFormulas.newLegendMap,
|
|
|
|
|
};
|
2021-09-23 15:43:43 +05:30
|
|
|
|
2023-05-23 16:47:52 +03:00
|
|
|
QueryPayload.compositeQuery.builderQueries = builderQueries;
|
2022-06-24 15:00:21 +05:30
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case EQueryType.CLICKHOUSE: {
|
|
|
|
|
const chQueries = {};
|
|
|
|
|
queryData.map((query) => {
|
2023-06-09 14:14:23 +05:30
|
|
|
if (!query.query) return;
|
2022-06-24 15:00:21 +05:30
|
|
|
chQueries[query.name] = {
|
2023-06-09 14:14:23 +05:30
|
|
|
query: query.query,
|
2022-06-24 15:00:21 +05:30
|
|
|
disabled: query.disabled,
|
|
|
|
|
};
|
|
|
|
|
legendMap[query.name] = query.legend;
|
|
|
|
|
});
|
2023-05-02 17:08:03 +03:00
|
|
|
QueryPayload.compositeQuery.chQueries = chQueries;
|
2022-06-24 15:00:21 +05:30
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case EQueryType.PROM: {
|
|
|
|
|
const promQueries = {};
|
|
|
|
|
queryData.map((query) => {
|
|
|
|
|
if (!query.query) return;
|
|
|
|
|
promQueries[query.name] = {
|
|
|
|
|
query: query.query,
|
|
|
|
|
disabled: query.disabled,
|
|
|
|
|
};
|
|
|
|
|
legendMap[query.name] = query.legend;
|
2021-09-23 15:43:43 +05:30
|
|
|
});
|
2023-05-02 17:08:03 +03:00
|
|
|
QueryPayload.compositeQuery.promQueries = promQueries;
|
2022-06-24 15:00:21 +05:30
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-19 15:57:58 +03:00
|
|
|
const { start, end } = getStartEndRangeTime({
|
2022-06-24 15:00:21 +05:30
|
|
|
type: selectedTime,
|
2023-06-19 15:57:58 +03:00
|
|
|
interval: globalSelectedInterval,
|
2022-06-24 15:00:21 +05:30
|
|
|
});
|
2023-06-19 15:57:58 +03:00
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
const response = await getMetricsQueryRange({
|
|
|
|
|
start: parseInt(start, 10) * 1e3,
|
|
|
|
|
end: parseInt(end, 10) * 1e3,
|
2023-06-28 15:19:52 +05:30
|
|
|
step: getStep({
|
|
|
|
|
start: store.getState().globalTime.minTime,
|
|
|
|
|
end: store.getState().globalTime.maxTime,
|
|
|
|
|
inputFormat: 'ns',
|
|
|
|
|
}),
|
2022-09-09 17:43:25 +05:30
|
|
|
variables,
|
2022-06-24 15:00:21 +05:30
|
|
|
...QueryPayload,
|
2023-06-19 15:57:58 +03:00
|
|
|
...params,
|
2022-06-24 15:00:21 +05:30
|
|
|
});
|
|
|
|
|
if (response.statusCode >= 400) {
|
|
|
|
|
throw new Error(
|
|
|
|
|
`API responded with ${response.statusCode} - ${response.error}`,
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-05-02 17:08:03 +03:00
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
if (response.payload?.data?.result) {
|
2023-05-02 17:08:03 +03:00
|
|
|
const v2Range = convertNewDataToOld(response.payload);
|
|
|
|
|
|
|
|
|
|
response.payload = v2Range;
|
|
|
|
|
|
2022-06-24 15:00:21 +05:30
|
|
|
response.payload.data.result = response.payload.data.result.map(
|
|
|
|
|
(queryData) => {
|
|
|
|
|
const newQueryData = queryData;
|
2022-06-29 16:24:49 +05:30
|
|
|
newQueryData.legend = legendMap[queryData.queryName]; // Adds the legend if it is already defined by the user.
|
|
|
|
|
// If metric names is an empty object
|
2022-06-24 15:00:21 +05:30
|
|
|
if (isEmpty(queryData.metric)) {
|
2022-06-29 16:24:49 +05:30
|
|
|
// If metrics list is empty && the user haven't defined a legend then add the legend equal to the name of the query.
|
|
|
|
|
if (!newQueryData.legend) {
|
|
|
|
|
newQueryData.legend = queryData.queryName;
|
|
|
|
|
}
|
|
|
|
|
// If name of the query and the legend if inserted is same then add the same to the metrics object.
|
|
|
|
|
if (queryData.queryName === newQueryData.legend) {
|
|
|
|
|
newQueryData.metric[queryData.queryName] = queryData.queryName;
|
|
|
|
|
}
|
2022-06-24 15:00:21 +05:30
|
|
|
}
|
2023-05-02 17:08:03 +03:00
|
|
|
|
2022-06-29 16:24:49 +05:30
|
|
|
return newQueryData;
|
2022-06-24 15:00:21 +05:30
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-23 15:43:43 +05:30
|
|
|
export interface GetQueryResultsProps {
|
2022-06-28 17:32:02 +05:30
|
|
|
query: Query;
|
2023-06-07 15:27:33 +03:00
|
|
|
graphType: GRAPH_TYPES;
|
|
|
|
|
selectedTime: timePreferenceType;
|
|
|
|
|
globalSelectedInterval: Time;
|
|
|
|
|
variables?: Record<string, unknown>;
|
2023-06-19 15:57:58 +03:00
|
|
|
params?: Record<string, unknown>;
|
2023-07-04 08:24:34 +03:00
|
|
|
tableParams?: {
|
|
|
|
|
pagination?: Pagination;
|
|
|
|
|
selectColumns?: any;
|
|
|
|
|
};
|
2021-09-23 15:43:43 +05:30
|
|
|
}
|