import { WarningFilled } from '@ant-design/icons'; import { Flex, Typography } from 'antd'; import { ResizeTable } from 'components/ResizeTable'; import { ENTITY_VERSION_V4 } from 'constants/app'; import { MAX_RPS_LIMIT } from 'constants/global'; import ResourceAttributesFilter from 'container/ResourceAttributesFilter'; import { useGetQueriesRange } from 'hooks/queryBuilder/useGetQueriesRange'; import useLicense from 'hooks/useLicense'; import { useNotifications } from 'hooks/useNotifications'; import { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; import { AppState } from 'store/reducers'; import { ServicesList } from 'types/api/metrics/getService'; import { GlobalReducer } from 'types/reducer/globalTime'; import { isCloudUser } from 'utils/app'; import { getTotalRPS } from 'utils/services'; import { getColumns } from '../Columns/ServiceColumn'; import { ServiceMetricsTableProps } from '../types'; import { getServiceListFromQuery } from '../utils'; function ServiceMetricTable({ topLevelOperations, queryRangeRequestData, }: ServiceMetricsTableProps): JSX.Element { const { minTime, maxTime, selectedTime: globalSelectedInterval } = useSelector< AppState, GlobalReducer >((state) => state.globalTime); const { notifications } = useNotifications(); const { t: getText } = useTranslation(['services']); const { data: licenseData, isFetching } = useLicense(); const isCloudUserVal = isCloudUser(); const queries = useGetQueriesRange(queryRangeRequestData, ENTITY_VERSION_V4, { queryKey: [ `GetMetricsQueryRange-${queryRangeRequestData[0].selectedTime}-${globalSelectedInterval}`, maxTime, minTime, globalSelectedInterval, ], keepPreviousData: true, enabled: true, refetchOnMount: false, onError: (error) => { notifications.error({ message: error.message, }); }, }); const isLoading = queries.some((query) => query.isLoading); const services: ServicesList[] = useMemo( () => getServiceListFromQuery({ queries, topLevelOperations, isLoading, }), [isLoading, queries, topLevelOperations], ); const { search } = useLocation(); const tableColumns = useMemo(() => getColumns(search, true), [search]); const [RPS, setRPS] = useState(0); useEffect(() => { if (!isFetching && licenseData?.payload?.onTrial && isCloudUserVal) { if (services.length > 0) { const rps = getTotalRPS(services); setRPS(rps); } else { setRPS(0); } } }, [services, licenseData, isFetching, isCloudUserVal]); const paginationConfig = { defaultPageSize: 10, showTotal: (total: number, range: number[]): string => `${range[0]}-${range[1]} of ${total} items`, hideOnSinglePage: true, }; return ( <> {RPS > MAX_RPS_LIMIT && ( {getText('rps_over_100')} )} ); } export default ServiceMetricTable;