From 95fe21c18fe94417b4547214bfc91273d641d3bc Mon Sep 17 00:00:00 2001 From: darth-coder00 <86726556+darth-coder00@users.noreply.github.com> Date: Sat, 20 Nov 2021 21:54:47 +0530 Subject: [PATCH] Added new connectors Glue, MariaDB, Vertica from UI (#1289) --- .../ui/src/assets/img/service-icon-glue.png | Bin 0 -> 9446 bytes .../src/assets/img/service-icon-mariadb.png | Bin 0 -> 33880 bytes .../src/assets/img/service-icon-vertica.png | Bin 0 -> 5720 bytes .../Ingestion/Ingestion.component.tsx | 5 +- .../resources/ui/src/constants/constants.ts | 7 ++- .../ui/src/constants/services.const.ts | 11 +++- .../resources/ui/src/enums/service.enum.ts | 3 ++ .../DashboardDetailsPage.component.tsx | 4 +- .../DatasetDetailsPage.component.tsx | 4 +- .../EntityVersionPage.component.tsx | 7 ++- .../pages/MyDataPage/MyDataPage.component.tsx | 13 ++--- .../PipelineDetailsPage.component.tsx | 4 +- .../TopicDetailsPage.component.tsx | 4 +- .../ui/src/pages/database-details/index.tsx | 4 +- .../resources/ui/src/pages/service/index.tsx | 11 ++-- .../resources/ui/src/pages/services/index.tsx | 3 +- .../resources/ui/src/utils/EntityUtils.tsx | 48 +++++++++++++++++- .../resources/ui/src/utils/ServiceUtils.ts | 21 ++++++++ 18 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-glue.png create mode 100644 catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-mariadb.png create mode 100644 catalog-rest-service/src/main/resources/ui/src/assets/img/service-icon-vertica.png 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 0000000000000000000000000000000000000000..cd6ed92b2571934f87049d2ef3a7a6cd5440e7da GIT binary patch literal 9446 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 NA7qrIYov@r{||>S+cW?G literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..53cfa0ee05825b0a5308e406cb8746d707d56364 GIT binary patch literal 5720 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 XN4K4p*N!w = ({ {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 = () => {