diff --git a/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-glue.png b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-glue.png new file mode 100644 index 00000000000..cd6ed92b257 Binary files /dev/null and b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-glue.png differ diff --git a/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-mariadb.png b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-mariadb.png new file mode 100644 index 00000000000..995c4cdb685 Binary files /dev/null and b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-mariadb.png differ diff --git a/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-vertica.png b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-vertica.png new file mode 100644 index 00000000000..53cfa0ee058 Binary files /dev/null and b/catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-vertica.png differ diff --git a/catalog-rest-service/src/main/resources/ui/src/components/Ingestion/Ingestion.component.tsx b/catalog-rest-service/src/main/resources/ui/src/components/Ingestion/Ingestion.component.tsx index 3fdb44b7718..62dda7058ad 100644 --- a/catalog-rest-service/src/main/resources/ui/src/components/Ingestion/Ingestion.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/components/Ingestion/Ingestion.component.tsx @@ -26,6 +26,7 @@ import { TITLE_FOR_NON_ADMIN_ACTION, } from '../../constants/constants'; import { NoDataFoundPlaceHolder } from '../../constants/services.const'; +import { ServiceCategory } from '../../enums/service.enum'; import { useAuth } from '../../hooks/authHooks'; import { isEven } from '../../utils/CommonUtils'; import { Button } from '../buttons/Button/Button'; @@ -287,7 +288,9 @@ const Ingestion: React.FC = ({ {ingestion.service.name} diff --git a/catalog-rest-service/src/main/resources/ui/src/constants/constants.ts b/catalog-rest-service/src/main/resources/ui/src/constants/constants.ts index 1c829074599..f5c646e6381 100644 --- a/catalog-rest-service/src/main/resources/ui/src/constants/constants.ts +++ b/catalog-rest-service/src/main/resources/ui/src/constants/constants.ts @@ -41,6 +41,7 @@ const PLACEHOLDER_ROUTE_DASHBOARD_FQN = ':dashboardFQN'; const PLACEHOLDER_ROUTE_DATABASE_FQN = ':databaseFQN'; const PLACEHOLDER_ROUTE_SERVICE_FQN = ':serviceFQN'; const PLACEHOLDER_ROUTE_SERVICE_TYPE = ':serviceType'; +const PLACEHOLDER_ROUTE_SERVICE_CAT = ':serviceCategory'; const PLACEHOLDER_ROUTE_SEARCHQUERY = ':searchQuery'; const PLACEHOLDER_ROUTE_TAB = ':tab'; const PLACEHOLDER_ROUTE_TEAM = ':team'; @@ -114,7 +115,7 @@ export const ROUTES = { STORE: '/store', FEEDS: '/feeds', DUMMY: '/dummy', - SERVICE: `/service/${PLACEHOLDER_ROUTE_SERVICE_TYPE}/${PLACEHOLDER_ROUTE_SERVICE_FQN}`, + SERVICE: `/service/${PLACEHOLDER_ROUTE_SERVICE_CAT}/${PLACEHOLDER_ROUTE_SERVICE_TYPE}/${PLACEHOLDER_ROUTE_SERVICE_FQN}`, SERVICES: '/services', USERS: '/users', SCORECARD: '/scorecard', @@ -170,10 +171,12 @@ export const getDatasetTabPath = (datasetFQN: string, tab = 'schema') => { export const getServiceDetailsPath = ( serviceFQN: string, - serviceType: string + serviceType: string, + serviceCat: string ) => { let path = ROUTES.SERVICE; path = path + .replace(PLACEHOLDER_ROUTE_SERVICE_CAT, serviceCat) .replace(PLACEHOLDER_ROUTE_SERVICE_TYPE, serviceType) .replace(PLACEHOLDER_ROUTE_SERVICE_FQN, serviceFQN); diff --git a/catalog-rest-service/src/main/resources/ui/src/constants/services.const.ts b/catalog-rest-service/src/main/resources/ui/src/constants/services.const.ts index 04f8e8cce9d..336e48d1f70 100644 --- a/catalog-rest-service/src/main/resources/ui/src/constants/services.const.ts +++ b/catalog-rest-service/src/main/resources/ui/src/constants/services.const.ts @@ -21,9 +21,11 @@ import noService from '../assets/img/no-service.png'; import airflow from '../assets/img/service-icon-airflow.png'; import athena from '../assets/img/service-icon-athena.png'; import serviceDefault from '../assets/img/service-icon-generic.png'; +import glue from '../assets/img/service-icon-glue.png'; import hive from '../assets/img/service-icon-hive.png'; import kafka from '../assets/img/service-icon-kafka.png'; import looker from '../assets/img/service-icon-looker.png'; +import mariadb from '../assets/img/service-icon-mariadb.png'; import mssql from '../assets/img/service-icon-mssql.png'; import oracle from '../assets/img/service-icon-oracle.png'; import postgres from '../assets/img/service-icon-post.png'; @@ -38,6 +40,7 @@ import mysql from '../assets/img/service-icon-sql.png'; import superset from '../assets/img/service-icon-superset.png'; import tableau from '../assets/img/service-icon-tableau.png'; import trino from '../assets/img/service-icon-trino.png'; +import vertica from '../assets/img/service-icon-vertica.png'; import plus from '../assets/svg/plus.svg'; export const NoDataFoundPlaceHolder = noDataFound; @@ -52,6 +55,9 @@ export const SNOWFLAKE = snowflakes; export const ATHENA = athena; export const PRESTO = presto; export const TRINO = trino; +export const GLUE = glue; +export const MARIADB = mariadb; +export const VERTICA = vertica; export const KAFKA = kafka; export const PULSAR = pulsar; export const SUPERSET = superset; @@ -79,10 +85,13 @@ export const serviceTypes: Record> = { 'Athena', 'Presto', 'Trino', + 'Glue', + 'MariaDB', + 'Vertica', ], messagingServices: ['Kafka'], dashboardServices: ['Superset', 'Looker', 'Tableau', 'Redash'], - pipelineServices: ['Airflow', 'Prefect'], + pipelineServices: ['Airflow', 'Prefect', 'Glue'], }; export const arrServiceTypes: Array = [ diff --git a/catalog-rest-service/src/main/resources/ui/src/enums/service.enum.ts b/catalog-rest-service/src/main/resources/ui/src/enums/service.enum.ts index d84f083cc54..921c89b3549 100644 --- a/catalog-rest-service/src/main/resources/ui/src/enums/service.enum.ts +++ b/catalog-rest-service/src/main/resources/ui/src/enums/service.enum.ts @@ -34,6 +34,9 @@ export enum DatabaseServiceType { ATHENA = 'Athena', PRESTO = 'Presto', TRINO = 'Trino', + GLUE = 'Glue', + MARIADB = 'MariaDB', + VERTICA = 'Vertica', } export enum MessagingServiceType { diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/DashboardDetailsPage/DashboardDetailsPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/DashboardDetailsPage/DashboardDetailsPage.component.tsx index 9d6d50ae31d..bfde64e5524 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/DashboardDetailsPage/DashboardDetailsPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/DashboardDetailsPage/DashboardDetailsPage.component.tsx @@ -20,6 +20,7 @@ import { getServiceDetailsPath, } from '../../constants/constants'; import { EntityType } from '../../enums/entity.enum'; +import { ServiceCategory } from '../../enums/service.enum'; import { Chart } from '../../generated/entity/data/chart'; import { Dashboard } from '../../generated/entity/data/dashboard'; import { User } from '../../generated/entity/teams/user'; @@ -169,7 +170,8 @@ const DashboardDetailsPage = () => { url: serviceRes.data.name ? getServiceDetailsPath( serviceRes.data.name, - serviceRes.data.serviceType + serviceRes.data.serviceType, + ServiceCategory.DASHBOARD_SERVICES ) : '', imgSrc: serviceRes.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx index 86d7ac4d0ab..d06c647c960 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/DatasetDetailsPage/DatasetDetailsPage.component.tsx @@ -41,6 +41,7 @@ import { getServiceDetailsPath, } from '../../constants/constants'; import { EntityType } from '../../enums/entity.enum'; +import { ServiceCategory } from '../../enums/service.enum'; import { Table, TableData, @@ -231,7 +232,8 @@ const DatasetDetailsPage: FunctionComponent = () => { url: resService.data.name ? getServiceDetailsPath( resService.data.name, - resService.data.serviceType + resService.data.serviceType, + ServiceCategory.DATABASE_SERVICES ) : '', imgSrc: resService.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/EntityVersionPage/EntityVersionPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/EntityVersionPage/EntityVersionPage.component.tsx index b68ef1e9216..7fd6a58754f 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/EntityVersionPage/EntityVersionPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/EntityVersionPage/EntityVersionPage.component.tsx @@ -17,6 +17,7 @@ import { getDatasetVersionPath, getServiceDetailsPath, } from '../../constants/constants'; +import { ServiceCategory } from '../../enums/service.enum'; import { Table } from '../../generated/entity/data/table'; import { EntityHistory } from '../../generated/type/entityHistory'; import useToastContext from '../../hooks/useToastContext'; @@ -72,7 +73,8 @@ const EntityVersionPage: FunctionComponent = () => { url: resService.data.name ? getServiceDetailsPath( resService.data.name, - resService.data.serviceType + resService.data.serviceType, + ServiceCategory.DATABASE_SERVICES ) : '', imgSrc: resService.data.serviceType @@ -131,7 +133,8 @@ const EntityVersionPage: FunctionComponent = () => { url: resService.data.name ? getServiceDetailsPath( resService.data.name, - resService.data.serviceType + resService.data.serviceType, + ServiceCategory.DATABASE_SERVICES ) : '', imgSrc: resService.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx index ae292e26c4e..da7014528b9 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx @@ -25,15 +25,12 @@ import { getIngestionWorkflows } from '../../axiosAPIs/ingestionWorkflowAPI'; import { searchData } from '../../axiosAPIs/miscAPI'; import Loader from '../../components/Loader/Loader'; import MyData from '../../components/MyData/MyData.component'; -import { PAGE_SIZE } from '../../constants/constants'; import { myDataEntityCounts, myDataSearchIndex, } from '../../constants/Mydata.constants'; -import { - getAllServices, - getEntityCountByService, -} from '../../utils/ServiceUtils'; +import { getEntityCountByType } from '../../utils/EntityUtils'; +import { getAllServices } from '../../utils/ServiceUtils'; const MyDataPage = () => { const [error, setError] = useState(''); @@ -49,7 +46,7 @@ const MyDataPage = () => { searchData( value.queryString, value.from, - PAGE_SIZE, + 0, value.filters, value.sortField, value.sortOrder, @@ -59,8 +56,8 @@ const MyDataPage = () => { setSearchResult(res); if (isUndefined(entityCounts)) { setEntityCounts( - getEntityCountByService( - res.data.aggregations?.['sterms#Service']?.buckets + getEntityCountByType( + res.data.aggregations?.['sterms#EntityType']?.buckets ) ); } diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/PipelineDetails/PipelineDetailsPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/PipelineDetails/PipelineDetailsPage.component.tsx index 40e6c958080..a96376b175f 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/PipelineDetails/PipelineDetailsPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/PipelineDetails/PipelineDetailsPage.component.tsx @@ -21,6 +21,7 @@ import { getServiceDetailsPath, } from '../../constants/constants'; import { EntityType } from '../../enums/entity.enum'; +import { ServiceCategory } from '../../enums/service.enum'; import { Pipeline, Task } from '../../generated/entity/data/pipeline'; import { User } from '../../generated/entity/teams/user'; import { EntityLineage } from '../../generated/type/entityLineage'; @@ -147,7 +148,8 @@ const PipelineDetailsPage = () => { url: serviceRes.data.name ? getServiceDetailsPath( serviceRes.data.name, - serviceRes.data.serviceType + serviceRes.data.serviceType, + ServiceCategory.PIPELINE_SERVICES ) : '', imgSrc: serviceRes.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/TopicDetails/TopicDetailsPage.component.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/TopicDetails/TopicDetailsPage.component.tsx index fba54550fb6..90f8d7c4b72 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/TopicDetails/TopicDetailsPage.component.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/TopicDetails/TopicDetailsPage.component.tsx @@ -20,6 +20,7 @@ import { getTopicDetailsPath, } from '../../constants/constants'; import { EntityType } from '../../enums/entity.enum'; +import { ServiceCategory } from '../../enums/service.enum'; import { Topic } from '../../generated/entity/data/topic'; import { User } from '../../generated/entity/teams/user'; import useToastContext from '../../hooks/useToastContext'; @@ -143,7 +144,8 @@ const TopicDetailsPage: FunctionComponent = () => { url: serviceRes.data.name ? getServiceDetailsPath( serviceRes.data.name, - serviceRes.data.serviceType + serviceRes.data.serviceType, + ServiceCategory.MESSAGING_SERVICES ) : '', imgSrc: serviceRes.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/database-details/index.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/database-details/index.tsx index 6e60e6aa8a5..781a1af99a2 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/database-details/index.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/database-details/index.tsx @@ -48,6 +48,7 @@ import { pagingObject, TITLE_FOR_NON_ADMIN_ACTION, } from '../../constants/constants'; +import { ServiceCategory } from '../../enums/service.enum'; import { Database } from '../../generated/entity/data/database'; import { Table } from '../../generated/entity/data/table'; import useToastContext from '../../hooks/useToastContext'; @@ -125,7 +126,8 @@ const DatabaseDetails: FunctionComponent = () => { url: resService.data.name ? getServiceDetailsPath( resService.data.name, - resService.data.serviceType + resService.data.serviceType, + ServiceCategory.DATABASE_SERVICES ) : '', imgSrc: resService.data.serviceType diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/service/index.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/service/index.tsx index 4acb387bfd5..a5227c0c26f 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/service/index.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/service/index.tsx @@ -70,9 +70,12 @@ type ServiceDataObj = { name: string } & Partial & Partial; const ServicePage: FunctionComponent = () => { - const { serviceFQN, serviceType } = useParams() as Record; + const { serviceFQN, serviceType, serviceCategory } = useParams() as Record< + string, + string + >; const [serviceName, setServiceName] = useState( - getServiceCategoryFromType(serviceType) + serviceCategory || getServiceCategoryFromType(serviceType) ); const [slashedTableName, setSlashedTableName] = useState< TitleBreadcrumbProps['titleLinks'] @@ -578,8 +581,8 @@ const ServicePage: FunctionComponent = () => { }; useEffect(() => { - setServiceName(getServiceCategoryFromType(serviceType)); - }, [serviceType]); + setServiceName(serviceCategory || getServiceCategoryFromType(serviceType)); + }, [serviceCategory, serviceType]); useEffect(() => { getServiceByFQN(serviceName, serviceFQN).then( diff --git a/catalog-rest-service/src/main/resources/ui/src/pages/services/index.tsx b/catalog-rest-service/src/main/resources/ui/src/pages/services/index.tsx index 90415c57c4e..e9ef0e05b45 100644 --- a/catalog-rest-service/src/main/resources/ui/src/pages/services/index.tsx +++ b/catalog-rest-service/src/main/resources/ui/src/pages/services/index.tsx @@ -468,7 +468,8 @@ const ServicesPage = () => {