From 6de0908a62a705675b141519d691e135cbb84677 Mon Sep 17 00:00:00 2001 From: sawhil Date: Mon, 28 Apr 2025 14:05:57 +0530 Subject: [PATCH] feat: api monitoring feedback till 28th april --- .../Domains/DomainDetails/AllEndPoints.tsx | 88 +++++++++++++++++-- .../Domains/DomainDetails/DomainDetails.tsx | 10 ++- .../Domains/DomainDetails/EndPointDetails.tsx | 22 ++--- .../Domains/DomainDetails/TopErrors.tsx | 21 ++++- .../components/DomainMetrics.tsx | 13 ++- .../components/StatusCodeBarCharts.tsx | 6 +- .../Explorer/Domains/DomainList.tsx | 6 +- .../src/container/ApiMonitoring/utils.tsx | 58 ++++++++++-- 8 files changed, 184 insertions(+), 40 deletions(-) diff --git a/frontend/src/container/ApiMonitoring/Explorer/Domains/DomainDetails/AllEndPoints.tsx b/frontend/src/container/ApiMonitoring/Explorer/Domains/DomainDetails/AllEndPoints.tsx index 465adc6a0d..8264758854 100644 --- a/frontend/src/container/ApiMonitoring/Explorer/Domains/DomainDetails/AllEndPoints.tsx +++ b/frontend/src/container/ApiMonitoring/Explorer/Domains/DomainDetails/AllEndPoints.tsx @@ -1,6 +1,11 @@ import { Select } from 'antd'; -import { getAllEndpointsWidgetData } from 'container/ApiMonitoring/utils'; +import { initialQueriesMap } from 'constants/queryBuilder'; +import { + getAllEndpointsWidgetData, + getGroupByFiltersFromGroupByValues, +} from 'container/ApiMonitoring/utils'; import GridCard from 'container/GridCardLayout/GridCard'; +import QueryBuilderSearchV2 from 'container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2'; import { useGetAggregateKeys } from 'hooks/queryBuilder/useGetAggregateKeys'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; @@ -15,6 +20,8 @@ function AllEndPoints({ groupBy, setGroupBy, timeRange, + initialFilters, + setInitialFiltersEndPointStats, }: { domainName: string; setSelectedEndPointName: (name: string) => void; @@ -25,6 +32,8 @@ function AllEndPoints({ startTime: number; endTime: number; }; + initialFilters: IBuilderQuery['filters']; + setInitialFiltersEndPointStats: (filters: IBuilderQuery['filters']) => void; }): JSX.Element { const { data: groupByFiltersData, @@ -72,13 +81,81 @@ function AllEndPoints({ } }, [groupByFiltersData]); + const currentQuery = initialQueriesMap[DataSource.TRACES]; + + // Local state for filters, combining endpoint filter and search filters + const [filters, setFilters] = useState(() => { + // Initialize filters based on the initial endPointName prop + const initialItems = [...initialFilters.items]; + return { op: 'AND', items: initialItems }; + }); + + // Handler for changes from the QueryBuilderSearchV2 component + const handleFilterChange = useCallback( + (newFilters: IBuilderQuery['filters']): void => { + // 1. Update local filters state immediately + setFilters(newFilters); + }, + [], // Dependencies for the callback + ); + + const updatedCurrentQuery = useMemo( + () => ({ + ...currentQuery, + builder: { + ...currentQuery.builder, + queryData: [ + { + ...currentQuery.builder.queryData[0], + dataSource: DataSource.TRACES, + filters, // Use the local filters state + }, + ], + }, + }), + [filters, currentQuery], + ); + + const query = updatedCurrentQuery?.builder?.queryData[0] || null; + const allEndpointsWidgetData = useMemo( - () => getAllEndpointsWidgetData(groupBy, domainName), - [groupBy, domainName], + () => getAllEndpointsWidgetData(groupBy, domainName, filters), + [groupBy, domainName, filters], + ); + + const onRowClick = useCallback( + (props: any): void => { + setSelectedEndPointName(props[SPAN_ATTRIBUTES.URL_PATH] as string); + setSelectedView(VIEWS.ENDPOINT_STATS); + const initialItems = [ + ...filters.items, + ...getGroupByFiltersFromGroupByValues(props, groupBy).items, + ]; + setInitialFiltersEndPointStats({ + items: initialItems, + op: 'AND', + }); + }, + [ + filters, + setInitialFiltersEndPointStats, + setSelectedEndPointName, + setSelectedView, + groupBy, + ], ); return (
+
+
+ +
+
Group by