From 468f0565305c102d35e396bd639996058cbf620f Mon Sep 17 00:00:00 2001 From: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:24:38 +0530 Subject: [PATCH] feat: added kafka - scenario - 4 (#6370) * feat: added kafka - scenario - 4 * feat: added error handling and correct api handler for kafka apis --- .../MQDetailPage/MQDetailPage.tsx | 20 +++++------ .../MessagingQueues/MQDetails/MQDetails.tsx | 6 ++-- .../MQDetails/MQTables/MQTables.tsx | 24 ++++++++----- .../MQTables/getConsumerLagDetails.ts | 34 ++++++++----------- .../MQDetails/MQTables/getKafkaSpanEval.tsx | 27 +++++++++++++++ .../MQTables/getPartitionLatencyDetails.ts | 26 ++++++-------- .../MQTables/getPartitionLatencyOverview.ts | 31 +++++++---------- .../MQTables/getTopicThroughputDetails.ts | 25 +++++--------- .../MQTables/getTopicThroughputOverview.ts | 34 +++++++------------ .../MQDetails/MessagingQueueOverview.tsx | 8 +++++ .../pages/MessagingQueues/MessagingQueues.tsx | 2 +- .../MessagingQueues/MessagingQueuesUtils.ts | 6 ++-- 12 files changed, 124 insertions(+), 119 deletions(-) create mode 100644 frontend/src/pages/MessagingQueues/MQDetails/MQTables/getKafkaSpanEval.tsx diff --git a/frontend/src/pages/MessagingQueues/MQDetailPage/MQDetailPage.tsx b/frontend/src/pages/MessagingQueues/MQDetailPage/MQDetailPage.tsx index 931502b8e1..be8aec1da1 100644 --- a/frontend/src/pages/MessagingQueues/MQDetailPage/MQDetailPage.tsx +++ b/frontend/src/pages/MessagingQueues/MQDetailPage/MQDetailPage.tsx @@ -13,7 +13,6 @@ import { MessagingQueuesViewTypeOptions, ProducerLatencyOptions, } from '../MessagingQueuesUtils'; -import { SelectLabelWithComingSoon } from '../MQCommon/MQCommon'; import MessagingQueueOverview from '../MQDetails/MessagingQueueOverview'; import MessagingQueuesDetails from '../MQDetails/MQDetails'; import MessagingQueuesConfigOptions from '../MQGraph/MQConfigOptions'; @@ -70,13 +69,8 @@ function MQDetailPage(): JSX.Element { value: MessagingQueuesViewType.producerLatency.value, }, { - label: ( - - ), - value: MessagingQueuesViewType.consumerLatency.value, - disabled: true, + label: MessagingQueuesViewType.dropRate.label, + value: MessagingQueuesViewType.dropRate.value, }, ]} /> @@ -96,10 +90,12 @@ function MQDetailPage(): JSX.Element { )}
- + {selectedView !== MessagingQueuesViewType.dropRate.value && ( + + )}
); diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQDetails.tsx b/frontend/src/pages/MessagingQueues/MQDetails/MQDetails.tsx index 6ec3d45f28..40a943172f 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQDetails.tsx +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQDetails.tsx @@ -139,7 +139,7 @@ const checkValidityOfDetailConfigs = ( return Boolean(configDetails?.topic && configDetails?.service_name); } - return false; + return selectedView === MessagingQueuesViewType.dropRate.value; }; function MessagingQueuesDetails({ @@ -213,14 +213,14 @@ function MessagingQueuesDetails({ ); diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/MQTables.tsx b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/MQTables.tsx index 52c01fce45..34ab160553 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/MQTables.tsx +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/MQTables.tsx @@ -1,3 +1,4 @@ +/* eslint-disable no-nested-ternary */ /* eslint-disable react/require-default-props */ import './MQTables.styles.scss'; @@ -169,15 +170,18 @@ function MessagingQueuesTable({ }); }; - const { mutate: getViewDetails, isLoading } = useMutation(tableApi, { - onSuccess: (data) => { - if (data.payload) { - setColumns(getColumns(data?.payload, history)); - setTableData(getTableData(data?.payload)); - } + const { mutate: getViewDetails, isLoading, error, isError } = useMutation( + tableApi, + { + onSuccess: (data) => { + if (data.payload) { + setColumns(getColumns(data?.payload, history)); + setTableData(getTableData(data?.payload)); + } + }, + onError: handleConsumerDetailsOnError, }, - onError: handleConsumerDetailsOnError, - }); + ); useEffect( () => { @@ -230,6 +234,10 @@ function MessagingQueuesTable({ + ) : isError ? ( +
+ {error?.message || SOMETHING_WENT_WRONG} +
) : ( <> {currentTab && ( diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getConsumerLagDetails.ts b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getConsumerLagDetails.ts index ad8a290dd7..20f9c2394b 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getConsumerLagDetails.ts +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getConsumerLagDetails.ts @@ -1,20 +1,18 @@ import axios from 'api'; -import { ErrorResponseHandler } from 'api/ErrorResponseHandler'; -import { AxiosError } from 'axios'; -import { SOMETHING_WENT_WRONG } from 'constants/api'; import { MessagingQueueServiceDetailType } from 'pages/MessagingQueues/MessagingQueuesUtils'; import { ErrorResponse, SuccessResponse } from 'types/api'; export interface MessagingQueueServicePayload { start?: number | string; end?: number | string; - variables: { + variables?: { partition?: string; topic?: string; consumer_group?: string; service_name?: string; }; detailType?: MessagingQueueServiceDetailType | 'producer' | 'consumer'; + evalTime?: number; } export interface MessagingQueuesPayloadProps { @@ -42,21 +40,17 @@ export const getConsumerLagDetails = async ( SuccessResponse | ErrorResponse > => { const { detailType, ...restProps } = props; - try { - const response = await axios.post( - `/messaging-queues/kafka/consumer-lag/${props.detailType}`, - { - ...restProps, - }, - ); + const response = await axios.post( + `/messaging-queues/kafka/consumer-lag/${props.detailType}`, + { + ...restProps, + }, + ); - return { - statusCode: 200, - error: null, - message: response.data.status, - payload: response.data.data, - }; - } catch (error) { - return ErrorResponseHandler((error as AxiosError) || SOMETHING_WENT_WRONG); - } + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; }; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getKafkaSpanEval.tsx b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getKafkaSpanEval.tsx new file mode 100644 index 0000000000..db0b24f9c6 --- /dev/null +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getKafkaSpanEval.tsx @@ -0,0 +1,27 @@ +import axios from 'api'; +import { ErrorResponse, SuccessResponse } from 'types/api'; + +import { + MessagingQueueServicePayload, + MessagingQueuesPayloadProps, +} from './getConsumerLagDetails'; + +export const getKafkaSpanEval = async ( + props: Omit, +): Promise< + SuccessResponse | ErrorResponse +> => { + const { start, end, evalTime } = props; + const response = await axios.post(`messaging-queues/kafka/span/evaluation`, { + start, + end, + eval_time: evalTime, + }); + + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; +}; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyDetails.ts b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyDetails.ts index 8c0b26f594..1897609aa0 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyDetails.ts +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyDetails.ts @@ -1,7 +1,4 @@ import axios from 'api'; -import { ErrorResponseHandler } from 'api/ErrorResponseHandler'; -import { AxiosError } from 'axios'; -import { SOMETHING_WENT_WRONG } from 'constants/api'; import { MessagingQueueServiceDetailType } from 'pages/MessagingQueues/MessagingQueuesUtils'; import { ErrorResponse, SuccessResponse } from 'types/api'; @@ -22,18 +19,15 @@ export const getPartitionLatencyDetails = async ( } else { endpoint = `/messaging-queues/kafka/consumer-lag/producer-details`; } - try { - const response = await axios.post(endpoint, { - ...rest, - }); - return { - statusCode: 200, - error: null, - message: response.data.status, - payload: response.data.data, - }; - } catch (error) { - return ErrorResponseHandler((error as AxiosError) || SOMETHING_WENT_WRONG); - } + const response = await axios.post(endpoint, { + ...rest, + }); + + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; }; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyOverview.ts b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyOverview.ts index 49c8eed757..cdc7fb0cb8 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyOverview.ts +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getPartitionLatencyOverview.ts @@ -1,7 +1,4 @@ import axios from 'api'; -import { ErrorResponseHandler } from 'api/ErrorResponseHandler'; -import { AxiosError } from 'axios'; -import { SOMETHING_WENT_WRONG } from 'constants/api'; import { ErrorResponse, SuccessResponse } from 'types/api'; import { @@ -14,21 +11,17 @@ export const getPartitionLatencyOverview = async ( ): Promise< SuccessResponse | ErrorResponse > => { - try { - const response = await axios.post( - `/messaging-queues/kafka/partition-latency/overview`, - { - ...props, - }, - ); + const response = await axios.post( + `/messaging-queues/kafka/partition-latency/overview`, + { + ...props, + }, + ); - return { - statusCode: 200, - error: null, - message: response.data.status, - payload: response.data.data, - }; - } catch (error) { - return ErrorResponseHandler((error as AxiosError) || SOMETHING_WENT_WRONG); - } + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; }; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputDetails.ts b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputDetails.ts index 3a995ef590..fb5817abd0 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputDetails.ts +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputDetails.ts @@ -1,7 +1,4 @@ import axios from 'api'; -import { ErrorResponseHandler } from 'api/ErrorResponseHandler'; -import { AxiosError } from 'axios'; -import { SOMETHING_WENT_WRONG } from 'constants/api'; import { ErrorResponse, SuccessResponse } from 'types/api'; import { @@ -16,18 +13,14 @@ export const getTopicThroughputDetails = async ( > => { const { detailType, ...rest } = props; const endpoint = `/messaging-queues/kafka/topic-throughput/${detailType}`; - try { - const response = await axios.post(endpoint, { - ...rest, - }); + const response = await axios.post(endpoint, { + ...rest, + }); - return { - statusCode: 200, - error: null, - message: response.data.status, - payload: response.data.data, - }; - } catch (error) { - return ErrorResponseHandler((error as AxiosError) || SOMETHING_WENT_WRONG); - } + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; }; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputOverview.ts b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputOverview.ts index 7ed896d8ca..ac955e8405 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputOverview.ts +++ b/frontend/src/pages/MessagingQueues/MQDetails/MQTables/getTopicThroughputOverview.ts @@ -1,7 +1,4 @@ import axios from 'api'; -import { ErrorResponseHandler } from 'api/ErrorResponseHandler'; -import { AxiosError } from 'axios'; -import { SOMETHING_WENT_WRONG } from 'constants/api'; import { ErrorResponse, SuccessResponse } from 'types/api'; import { @@ -15,23 +12,18 @@ export const getTopicThroughputOverview = async ( SuccessResponse | ErrorResponse > => { const { detailType, start, end } = props; - console.log(detailType); - try { - const response = await axios.post( - `messaging-queues/kafka/topic-throughput/${detailType}`, - { - start, - end, - }, - ); + const response = await axios.post( + `messaging-queues/kafka/topic-throughput/${detailType}`, + { + start, + end, + }, + ); - return { - statusCode: 200, - error: null, - message: response.data.status, - payload: response.data.data, - }; - } catch (error) { - return ErrorResponseHandler((error as AxiosError) || SOMETHING_WENT_WRONG); - } + return { + statusCode: 200, + error: null, + message: response.data.status, + payload: response.data.data, + }; }; diff --git a/frontend/src/pages/MessagingQueues/MQDetails/MessagingQueueOverview.tsx b/frontend/src/pages/MessagingQueues/MQDetails/MessagingQueueOverview.tsx index 104b7ec237..ea55384ac3 100644 --- a/frontend/src/pages/MessagingQueues/MQDetails/MessagingQueueOverview.tsx +++ b/frontend/src/pages/MessagingQueues/MQDetails/MessagingQueueOverview.tsx @@ -12,6 +12,7 @@ import { ProducerLatencyOptions, } from '../MessagingQueuesUtils'; import { MessagingQueueServicePayload } from './MQTables/getConsumerLagDetails'; +import { getKafkaSpanEval } from './MQTables/getKafkaSpanEval'; import { getPartitionLatencyOverview } from './MQTables/getPartitionLatencyOverview'; import { getTopicThroughputOverview } from './MQTables/getTopicThroughputOverview'; import MessagingQueuesTable from './MQTables/MQTables'; @@ -51,6 +52,9 @@ const getTableApi = (selectedView: MessagingQueuesViewTypeOptions): any => { if (selectedView === MessagingQueuesViewType.producerLatency.value) { return getTopicThroughputOverview; } + if (selectedView === MessagingQueuesViewType.dropRate.value) { + return getKafkaSpanEval; + } return getPartitionLatencyOverview; }; @@ -78,6 +82,10 @@ function MessagingQueueOverview({ ? 'producer' : 'consumer' : undefined, + evalTime: + selectedView === MessagingQueuesViewType.dropRate.value + ? 2363404 + : undefined, }; return ( diff --git a/frontend/src/pages/MessagingQueues/MessagingQueues.tsx b/frontend/src/pages/MessagingQueues/MessagingQueues.tsx index e64f8aba18..0bd930363c 100644 --- a/frontend/src/pages/MessagingQueues/MessagingQueues.tsx +++ b/frontend/src/pages/MessagingQueues/MessagingQueues.tsx @@ -187,7 +187,7 @@ function MessagingQueues(): JSX.Element {
-

{MessagingQueuesViewType.consumerLatency.label}

+

{MessagingQueuesViewType.dropRate.label}

1D

diff --git a/frontend/src/pages/MessagingQueues/MessagingQueuesUtils.ts b/frontend/src/pages/MessagingQueues/MessagingQueuesUtils.ts index f92b9b6010..0270258b33 100644 --- a/frontend/src/pages/MessagingQueues/MessagingQueuesUtils.ts +++ b/frontend/src/pages/MessagingQueues/MessagingQueuesUtils.ts @@ -238,9 +238,9 @@ export const MessagingQueuesViewType = { label: 'Producer Latency view', value: MessagingQueuesViewTypeOptions.ProducerLatency, }, - consumerLatency: { - label: 'Consumer latency view', - value: MessagingQueuesViewTypeOptions.ConsumerLatency, + dropRate: { + label: 'Drop Rate', + value: 'dropRate', }, };