From 950c3a59926c95461f695243e263c69c67a609b1 Mon Sep 17 00:00:00 2001 From: Shailesh Parmar Date: Thu, 23 Jun 2022 02:24:50 +0530 Subject: [PATCH] Fix #5551 Feat: Added support to add ML model service via UI and service details page (#5583) --- .../ui/src/assets/img/service-icon-mlflow.png | Bin 0 -> 18915 bytes .../ui/src/assets/img/service-icon-scikit.png | Bin 0 -> 132793 bytes .../resources/ui/src/assets/svg/mlmodal.svg | 3 + .../resources/ui/src/axiosAPIs/mlModelAPI.ts | 34 ++++++++++ .../AddService/Steps/SelectServiceType.tsx | 11 +++- .../EntityLineage/EntityLineage.component.tsx | 4 +- .../MlModelDetail/MlModelDetail.component.tsx | 16 ++++- .../MyAssetStats/MyAssetStats.component.tsx | 9 +++ .../MyAssetStats/MyAssetStats.test.tsx | 7 +- .../components/MyData/MyData.component.tsx | 2 + .../src/components/MyData/MyData.interface.ts | 1 + .../ui/src/components/MyData/MyData.test.tsx | 1 + .../ServiceConfig/ConnectionConfigForm.tsx | 11 +++- .../ServiceConnectionDetails.component.tsx | 6 ++ .../ui/src/constants/services.const.ts | 10 ++- .../resources/ui/src/enums/entity.enum.ts | 1 + .../resources/ui/src/enums/service.enum.ts | 1 + .../ui/src/interface/service.interface.ts | 10 ++- .../resources/ui/src/interface/types.d.ts | 3 +- .../resources/ui/src/mocks/Service.mock.ts | 37 +++++++++++ .../pages/MyDataPage/MyDataPage.component.tsx | 21 ++++++ .../src/pages/MyDataPage/MyDataPage.test.tsx | 10 +++ .../resources/ui/src/pages/service/index.tsx | 60 ++++++++++++++++++ .../ui/src/pages/services/index.test.tsx | 4 ++ .../resources/ui/src/pages/services/index.tsx | 40 ++++++++++-- .../pages/tour-page/TourPage.component.tsx | 1 + .../main/resources/ui/src/styles/tailwind.css | 2 +- .../ui/src/utils/EntityLineageUtils.tsx | 2 +- .../ui/src/utils/MlmodelServiceUtils.ts | 37 +++++++++++ .../resources/ui/src/utils/ServiceUtils.tsx | 9 +++ .../main/resources/ui/src/utils/SvgUtils.tsx | 6 ++ .../src/main/resources/ui/tailwind.config.js | 1 + 32 files changed, 341 insertions(+), 19 deletions(-) create mode 100644 openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mlflow.png create mode 100644 openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-scikit.png create mode 100644 openmetadata-ui/src/main/resources/ui/src/assets/svg/mlmodal.svg create mode 100644 openmetadata-ui/src/main/resources/ui/src/utils/MlmodelServiceUtils.ts diff --git a/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mlflow.png b/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mlflow.png new file mode 100644 index 0000000000000000000000000000000000000000..beeb3f8aec7979c3aaba35c4f2437b5041420683 GIT binary patch literal 18915 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ℑ#GEyHvKx*uUR961_;+YqhI6|J( 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 + + diff --git a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/mlModelAPI.ts b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/mlModelAPI.ts index 538996f684c..cc02e1a5e4b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/mlModelAPI.ts +++ b/openmetadata-ui/src/main/resources/ui/src/axiosAPIs/mlModelAPI.ts @@ -12,6 +12,7 @@ */ import { AxiosResponse } from 'axios'; +import { isNil } from 'lodash'; import { Mlmodel } from '../generated/entity/data/mlmodel'; import { getURLWithQueryFields } from '../utils/APIUtils'; import APIClient from './index'; @@ -25,6 +26,39 @@ export const getMlModelByFQN: Function = ( return APIClient.get(url); }; +export const getMlmodels = ( + serviceName: string, + paging: string, + arrQueryFields: string[] +): Promise => { + const url = `${getURLWithQueryFields( + `/mlmodels`, + arrQueryFields + )}&service=${serviceName}${paging ? paging : ''}`; + + return APIClient.get(url); +}; + +export const getAllMlModal = ( + paging: string, + arrQueryFields: string, + limit?: number +): Promise => { + const searchParams = new URLSearchParams(); + + if (!isNil(limit)) { + searchParams.set('limit', `${limit}`); + } + + const url = getURLWithQueryFields( + `/mlmodels`, + arrQueryFields, + `${searchParams.toString()}${paging ? `&${paging}` : ''}` + ); + + return APIClient.get(url); +}; + export const patchMlModelDetails: Function = ( id: string, data: Mlmodel diff --git a/openmetadata-ui/src/main/resources/ui/src/components/AddService/Steps/SelectServiceType.tsx b/openmetadata-ui/src/main/resources/ui/src/components/AddService/Steps/SelectServiceType.tsx index 5973f0729c3..963e5d34360 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/AddService/Steps/SelectServiceType.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/AddService/Steps/SelectServiceType.tsx @@ -14,7 +14,10 @@ import classNames from 'classnames'; import { startCase } from 'lodash'; import React, { useEffect, useState } from 'react'; -import { serviceTypes } from '../../../constants/services.const'; +import { + excludedService, + serviceTypes, +} from '../../../constants/services.const'; import { ServiceCategory } from '../../../enums/service.enum'; import { errorMsg, getServiceLogo } from '../../../utils/CommonUtils'; import SVGIcons, { Icons } from '../../../utils/SvgUtils'; @@ -51,7 +54,11 @@ const SelectServiceType = ({ ? serviceCategory : allCategory[0]; setCategory(selectedCategory); - setSelectedConnectors(serviceTypes[selectedCategory]); + setSelectedConnectors( + serviceTypes[selectedCategory].filter( + (service) => !excludedService.find((e) => e === service) + ) + ); }, [serviceCategory]); return ( diff --git a/openmetadata-ui/src/main/resources/ui/src/components/EntityLineage/EntityLineage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/EntityLineage/EntityLineage.component.tsx index 32c61a4981b..d0d4db93d48 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/EntityLineage/EntityLineage.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/EntityLineage/EntityLineage.component.tsx @@ -621,7 +621,7 @@ const Entitylineage: FunctionComponent = ({ }; } else { const updatedColumnsLineage: ColumnLineage[] = - currentEdge.columnsLineage.map((l) => { + currentEdge.columnsLineage?.map((l) => { if (l.toColumn === targetHandle) { return { ...l, @@ -633,7 +633,7 @@ const Entitylineage: FunctionComponent = ({ } return l; - }); + }) || []; if ( !updatedColumnsLineage.find((l) => l.toColumn === targetHandle) ) { diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx index 9b768154a37..cd9310c9f03 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/MlModelDetail/MlModelDetail.component.tsx @@ -26,14 +26,17 @@ import React, { import AppState from '../../AppState'; import { getDashboardDetailsPath, + getServiceDetailsPath, getTeamAndUserDetailsPath, } from '../../constants/constants'; import { EntityType } from '../../enums/entity.enum'; +import { ServiceCategory } from '../../enums/service.enum'; import { OwnerType } from '../../enums/user.enum'; import { Mlmodel } from '../../generated/entity/data/mlmodel'; import { EntityReference } from '../../generated/type/entityReference'; import { LabelType, State, TagLabel } from '../../generated/type/tagLabel'; import { getEntityName, getEntityPlaceHolder } from '../../utils/CommonUtils'; +import { serviceTypeLogo } from '../../utils/ServiceUtils'; import { getTagsWithoutTier, getTierTags } from '../../utils/TableUtils'; import Description from '../common/description/Description'; import EntityPageInfo from '../common/entityPageInfo/EntityPageInfo'; @@ -83,8 +86,19 @@ const MlModelDetail: FC = ({ const mlModelTags = useMemo(() => { return getTagsWithoutTier(mlModelDetail.tags || []); }, [mlModelDetail.tags]); - const slashedMlModelName: TitleBreadcrumbProps['titleLinks'] = [ + { + name: mlModelDetail.service.name || '', + url: mlModelDetail.service.name + ? getServiceDetailsPath( + mlModelDetail.service.name, + ServiceCategory.ML_MODAL_SERVICES + ) + : '', + imgSrc: mlModelDetail.serviceType + ? serviceTypeLogo(mlModelDetail.serviceType || '') + : undefined, + }, { name: getEntityName(mlModelDetail as unknown as EntityReference), url: '', diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.component.tsx index 7765827d7cf..703879eb53c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.component.tsx @@ -30,6 +30,7 @@ type Props = { countDashboards: number; countPipelines: number; countServices: number; + countMlModal: number; countTables: number; countTopics: number; countTeams: number; @@ -47,6 +48,7 @@ type Summary = { const MyAssetStats: FunctionComponent = ({ countDashboards, countPipelines, + countMlModal, countServices, countTables, countTopics, @@ -85,6 +87,13 @@ const MyAssetStats: FunctionComponent = ({ link: getExplorePathWithSearch(undefined, 'pipelines'), dataTestId: 'pipelines', }, + mlModal: { + icon: Icons.MLMODAL, + data: 'ML Models', + count: countMlModal, + link: getExplorePathWithSearch(undefined, 'mlmodels'), + dataTestId: 'mlmodels', + }, service: { icon: Icons.SERVICE, data: 'Services', diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.test.tsx b/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.test.tsx index 838e073e050..a13cefcd47d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/MyAssetStats/MyAssetStats.test.tsx @@ -38,6 +38,7 @@ const mockProp = { countTeams: 7, countTopics: 13, countUsers: 100, + countMlModal: 2, }; describe('Test MyDataHeader Component', () => { @@ -51,14 +52,14 @@ describe('Test MyDataHeader Component', () => { expect(myDataHeader).toBeInTheDocument(); }); - it('Should have 7 data summary details', () => { + it('Should have 8 data summary details', () => { const { container } = render(, { wrapper: MemoryRouter, }); const dataSummary = getAllByTestId(container, /-summary$/); - expect(dataSummary.length).toBe(7); + expect(dataSummary.length).toBe(8); }); it('OnClick it should redirect to respective page', () => { @@ -72,6 +73,7 @@ describe('Test MyDataHeader Component', () => { const topics = getByTestId(container, 'topics'); const dashboards = getByTestId(container, 'dashboards'); const pipelines = getByTestId(container, 'pipelines'); + const mlmodel = getByTestId(container, 'mlmodels'); const service = getByTestId(container, 'service'); const user = getByTestId(container, 'user'); const terms = getByTestId(container, 'terms'); @@ -80,6 +82,7 @@ describe('Test MyDataHeader Component', () => { expect(topics).toHaveAttribute('href', '/explore/topics/'); expect(dashboards).toHaveAttribute('href', '/explore/dashboards/'); expect(pipelines).toHaveAttribute('href', '/explore/pipelines/'); + expect(mlmodel).toHaveAttribute('href', '/explore/mlmodels/'); expect(service).toHaveAttribute('href', '/services'); expect(user).toHaveAttribute( 'href', diff --git a/openmetadata-ui/src/main/resources/ui/src/components/MyData/MyData.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/MyData/MyData.component.tsx index abc925100be..94399f057ad 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/MyData/MyData.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/MyData/MyData.component.tsx @@ -51,6 +51,7 @@ const MyData: React.FC = ({ countTeams, countUsers, ownedData, + countMlModal, followedData, feedData, feedFilter, @@ -108,6 +109,7 @@ const MyData: React.FC = ({
= ({ case ServiceCategory.PIPELINE_SERVICES: { connSch = getPipelineConfig(serviceType as PipelineServiceType); + break; + } + case ServiceCategory.ML_MODAL_SERVICES: { + connSch = getMlmodelConfig(serviceType as MlModelServiceType); + break; } } diff --git a/openmetadata-ui/src/main/resources/ui/src/components/ServiceConnectionDetails/ServiceConnectionDetails.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/ServiceConnectionDetails/ServiceConnectionDetails.component.tsx index f1963ffac8f..5af4f368bd6 100644 --- a/openmetadata-ui/src/main/resources/ui/src/components/ServiceConnectionDetails/ServiceConnectionDetails.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/components/ServiceConnectionDetails/ServiceConnectionDetails.component.tsx @@ -23,11 +23,13 @@ import { EntityType } from '../../enums/entity.enum'; import { DashboardServiceType } from '../../generated/entity/services/dashboardService'; import { DatabaseServiceType } from '../../generated/entity/services/databaseService'; import { MessagingServiceType } from '../../generated/entity/services/messagingService'; +import { MlModelServiceType } from '../../generated/entity/services/mlmodelService'; import { PipelineServiceType } from '../../generated/entity/services/pipelineService'; import { ConfigData } from '../../interface/service.interface'; import { getDashboardConfig } from '../../utils/DashboardServiceUtils'; import { getDatabaseConfig } from '../../utils/DatabaseServiceUtils'; import { getMessagingConfig } from '../../utils/MessagingServiceUtils'; +import { getMlmodelConfig } from '../../utils/MlmodelServiceUtils'; import { getPipelineConfig } from '../../utils/PipelineServiceUtils'; import PopOver from '../common/popover/PopOver'; @@ -143,6 +145,10 @@ const ServiceConnectionDetails = ({ case EntityType.PIPELINE_SERVICE: setSchema(getPipelineConfig(serviceFQN as PipelineServiceType).schema); + break; + case EntityType.MLMODEL_SERVICE: + setSchema(getMlmodelConfig(serviceFQN as MlModelServiceType).schema); + break; } }, [serviceCategory, serviceFQN]); diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts b/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts index 6f129dff0cd..c2906ad572b 100644 --- a/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts +++ b/openmetadata-ui/src/main/resources/ui/src/constants/services.const.ts @@ -30,6 +30,7 @@ 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 metabase from '../assets/img/service-icon-metabase.png'; +import mlflow from '../assets/img/service-icon-mlflow.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'; @@ -41,6 +42,7 @@ import query from '../assets/img/service-icon-query.png'; import redash from '../assets/img/service-icon-redash.png'; import redshift from '../assets/img/service-icon-redshift.png'; import salesforce from '../assets/img/service-icon-salesforce.png'; +import scikit from '../assets/img/service-icon-scikit.png'; import singlestore from '../assets/img/service-icon-singlestore.png'; import snowflakes from '../assets/img/service-icon-snowflakes.png'; import mysql from '../assets/img/service-icon-sql.png'; @@ -57,6 +59,7 @@ import topicDefault from '../assets/svg/topic.svg'; import { DashboardServiceType } from '../generated/entity/services/dashboardService'; import { DatabaseServiceType } from '../generated/entity/services/databaseService'; import { MessagingServiceType } from '../generated/entity/services/messagingService'; +import { MlModelServiceType } from '../generated/entity/services/mlmodelService'; import { PipelineServiceType } from '../generated/entity/services/pipelineService'; export const NoDataFoundPlaceHolder = noDataFound; @@ -90,6 +93,8 @@ export const DRUID = druid; export const DYNAMODB = dynamodb; export const SINGLESTORE = singlestore; export const SALESFORCE = salesforce; +export const MLFLOW = mlflow; +export const SCIKIT = scikit; export const DELTALAKE = deltalake; export const DEFAULT_SERVICE = iconDefaultService; @@ -103,12 +108,13 @@ export const PIPELINE_DEFAULT = pipelineDefault; export const PLUS = plus; export const NOSERVICE = noService; - +export const excludedService = [MlModelServiceType.Sklearn]; export const serviceTypes: Record> = { databaseServices: Object.values(DatabaseServiceType), messagingServices: Object.values(MessagingServiceType), dashboardServices: Object.values(DashboardServiceType), pipelineServices: Object.values(PipelineServiceType), + mlmodelServices: Object.values(MlModelServiceType), }; export const arrServiceTypes: Array = [ @@ -116,6 +122,7 @@ export const arrServiceTypes: Array = [ 'messagingServices', 'dashboardServices', 'pipelineServices', + 'mlmodelServices', ]; export const servicesDisplayName = { @@ -123,6 +130,7 @@ export const servicesDisplayName = { messagingServices: 'Messaging Service', dashboardServices: 'Dashboard Service', pipelineServices: 'Pipeline Service', + mlmodelServices: 'ML Model Service', }; export const STEPS_FOR_ADD_SERVICE: Array = [ diff --git a/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts b/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts index 5d59d7cbdb3..bf447ab5afa 100644 --- a/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts +++ b/openmetadata-ui/src/main/resources/ui/src/enums/entity.enum.ts @@ -25,6 +25,7 @@ export enum EntityType { MESSAGING_SERVICE = 'messagingService', DASHBOARD_SERVICE = 'dashboardService', PIPELINE_SERVICE = 'pipelineService', + MLMODEL_SERVICE = 'mlmodelService', WEBHOOK = 'webhook', MLMODEL = 'mlmodel', TYPE = 'type', diff --git a/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts b/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts index 2fe58b931ce..be04e029459 100644 --- a/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts +++ b/openmetadata-ui/src/main/resources/ui/src/enums/service.enum.ts @@ -16,6 +16,7 @@ export enum ServiceCategory { MESSAGING_SERVICES = 'messagingServices', DASHBOARD_SERVICES = 'dashboardServices', PIPELINE_SERVICES = 'pipelineServices', + ML_MODAL_SERVICES = 'mlmodelServices', } export enum IngestionType { diff --git a/openmetadata-ui/src/main/resources/ui/src/interface/service.interface.ts b/openmetadata-ui/src/main/resources/ui/src/interface/service.interface.ts index b0a592fb16f..b3c26958b0f 100644 --- a/openmetadata-ui/src/main/resources/ui/src/interface/service.interface.ts +++ b/openmetadata-ui/src/main/resources/ui/src/interface/service.interface.ts @@ -15,6 +15,7 @@ import { DynamicObj, Paging } from 'Models'; import { DashboardService } from '../generated/entity/services/dashboardService'; import { DatabaseService } from '../generated/entity/services/databaseService'; import { MessagingService } from '../generated/entity/services/messagingService'; +import { MlmodelService } from '../generated/entity/services/mlmodelService'; import { PipelineService } from '../generated/entity/services/pipelineService'; export interface IngestionSchedule { @@ -60,13 +61,15 @@ export interface EditObj { export type ServiceDataObj = { name: string } & Partial & Partial & Partial & - Partial; + Partial & + Partial; export type DataService = | DatabaseService | MessagingService | DashboardService - | PipelineService; + | PipelineService + | MlmodelService; export interface ServiceResponse { data: Array; @@ -76,4 +79,5 @@ export interface ServiceResponse { export type ConfigData = Partial & Partial & Partial & - Partial; + Partial & + Partial; diff --git a/openmetadata-ui/src/main/resources/ui/src/interface/types.d.ts b/openmetadata-ui/src/main/resources/ui/src/interface/types.d.ts index faf272d26e2..1148bf1281d 100644 --- a/openmetadata-ui/src/main/resources/ui/src/interface/types.d.ts +++ b/openmetadata-ui/src/main/resources/ui/src/interface/types.d.ts @@ -399,7 +399,8 @@ declare module 'Models' { | 'databaseServices' | 'messagingServices' | 'dashboardServices' - | 'pipelineServices'; + | 'pipelineServices' + | 'mlmodelServices'; export type SampleData = { columns: Array; diff --git a/openmetadata-ui/src/main/resources/ui/src/mocks/Service.mock.ts b/openmetadata-ui/src/main/resources/ui/src/mocks/Service.mock.ts index 9f8d14291fc..7f7d7ef1128 100644 --- a/openmetadata-ui/src/main/resources/ui/src/mocks/Service.mock.ts +++ b/openmetadata-ui/src/main/resources/ui/src/mocks/Service.mock.ts @@ -41,9 +41,46 @@ export const mockServiceDetails = { href: 'http://pipelineServices', }, }, + { + collection: { + name: 'mlmodelServices', + documentation: 'MlModel service collection', + href: 'http://localhost:8585/api/v1/services/mlmodelServices', + }, + }, ], }; +export const mockMlmodelService = { + data: { + data: [ + { + id: 'b59a9acb-6c90-481e-afd9-ec0f208c4f35', + name: 'mlflow_svc', + fullyQualifiedName: 'mlflow_svc', + serviceType: 'Mlflow', + description: 'description for mlflow_svc', + version: 0.4, + updatedAt: 1655890983668, + updatedBy: 'anonymous', + connection: { + config: { + type: 'Mlflow', + registryUri: 'http://localhost:8088', + trackingUri: 'http://localhost:8088', + supportsMetadataExtraction: null, + }, + }, + href: 'http://localhost:8585/api/v1/services/mlmodelServices/b59a9acb-6c90-481e-afd9-ec0f208c4f35', + deleted: false, + }, + ], + paging: { + total: 1, + }, + }, +}; + export const mockDatabaseService = { data: { data: [ diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx index c3bdafb36cf..c193c8a3cb0 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/MyDataPage/MyDataPage.component.tsx @@ -22,6 +22,7 @@ import AppState from '../../AppState'; import { getAllDashboards } from '../../axiosAPIs/dashboardAPI'; import { getFeedsWithFilter, postFeedById } from '../../axiosAPIs/feedsAPI'; import { fetchSandboxConfig, searchData } from '../../axiosAPIs/miscAPI'; +import { getAllMlModal } from '../../axiosAPIs/mlModelAPI'; import { getAllPipelines } from '../../axiosAPIs/pipelineAPI'; import { getAllTables } from '../../axiosAPIs/tableAPI'; import { getTeams } from '../../axiosAPIs/teamsAPI'; @@ -60,6 +61,7 @@ const MyDataPage = () => { const [countTopics, setCountTopics] = useState(); const [countDashboards, setCountDashboards] = useState(); const [countPipelines, setCountPipelines] = useState(); + const [countMlModal, setCountMlModal] = useState(); const [countUsers, setCountUsers] = useState(); const [countTeams, setCountTeams] = useState(); @@ -171,6 +173,23 @@ const MyDataPage = () => { ); setCountDashboards(0); }); + + // limit=0 will fetch empty data list with total count + getAllMlModal('', '', 0) + .then((res) => { + if (res.data) { + setCountMlModal(res.data.paging.total); + } else { + throw jsonData['api-error-messages']['unexpected-server-response']; + } + }) + .catch((err: AxiosError) => { + showErrorToast( + err, + jsonData['api-error-messages']['unexpected-server-response'] + ); + setCountMlModal(0); + }); }; const fetchTeamsAndUsersCount = () => { @@ -415,10 +434,12 @@ const MyDataPage = () => { !isUndefined(countDashboards) && !isUndefined(countPipelines) && !isUndefined(countTeams) && + !isUndefined(countMlModal) && !isUndefined(countUsers) ? ( ({ ), })); +jest.mock('../../axiosAPIs/mlModelAPI', () => ({ + getAllMlModal: jest.fn().mockImplementation(() => + Promise.resolve({ + data: { + data: [], + }, + }) + ), +})); + jest.mock('../../axiosAPIs/userAPI', () => ({ getUsers: jest.fn().mockImplementation(() => Promise.resolve({ diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/service/index.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/service/index.tsx index fc699c4c950..0049dead94a 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/service/index.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/service/index.tsx @@ -28,6 +28,7 @@ import { triggerIngestionPipelineById, } from '../../axiosAPIs/ingestionPipelineAPI'; import { fetchAirflowConfig } from '../../axiosAPIs/miscAPI'; +import { getMlmodels } from '../../axiosAPIs/mlModelAPI'; import { getPipelines } from '../../axiosAPIs/pipelineAPI'; import { getServiceByFQN, updateService } from '../../axiosAPIs/serviceAPI'; import { getTopics } from '../../axiosAPIs/topicsAPI'; @@ -57,6 +58,7 @@ import { ServiceCategory } from '../../enums/service.enum'; import { OwnerType } from '../../enums/user.enum'; import { Dashboard } from '../../generated/entity/data/dashboard'; import { Database } from '../../generated/entity/data/database'; +import { Mlmodel } from '../../generated/entity/data/mlmodel'; import { Pipeline } from '../../generated/entity/data/pipeline'; import { Topic } from '../../generated/entity/data/topic'; import { DatabaseService } from '../../generated/entity/services/databaseService'; @@ -129,6 +131,8 @@ const ServicePage: FunctionComponent = () => { return 'Topics'; case ServiceCategory.PIPELINE_SERVICES: return 'Pipelines'; + case ServiceCategory.ML_MODAL_SERVICES: + return 'Models'; case ServiceCategory.DATABASE_SERVICES: default: return 'Databases'; @@ -420,6 +424,26 @@ const ServicePage: FunctionComponent = () => { }); }; + const fetchMlModal = (paging = '') => { + setIsloading(true); + getMlmodels(serviceFQN, paging, ['owner', 'tags']) + .then((res: AxiosResponse) => { + if (res.data.data) { + setData(res.data.data); + setPaging(res.data.paging); + setInstanceCount(res.data.paging.total); + setIsloading(false); + } else { + setData([]); + setPaging(pagingObject); + setIsloading(false); + } + }) + .catch(() => { + setIsloading(false); + }); + }; + const getAirflowStatus = () => { return new Promise((resolve, reject) => { checkAirflowStatus() @@ -456,6 +480,11 @@ const ServicePage: FunctionComponent = () => { break; } + case ServiceCategory.ML_MODAL_SERVICES: { + fetchMlModal(paging); + + break; + } default: break; } @@ -472,6 +501,9 @@ const ServicePage: FunctionComponent = () => { case ServiceCategory.PIPELINE_SERVICES: return getEntityLink(SearchIndex.PIPELINE, fqn); + case ServiceCategory.ML_MODAL_SERVICES: + return getEntityLink(SearchIndex.MLMODEL, fqn); + case ServiceCategory.DATABASE_SERVICES: default: return `/database/${fqn}`; @@ -520,6 +552,16 @@ const ServicePage: FunctionComponent = () => { ); } + case ServiceCategory.ML_MODAL_SERVICES: { + return ( + <> + Model Name + Description + Owner + Tags + + ); + } default: return <>; } @@ -594,6 +636,24 @@ const ServicePage: FunctionComponent = () => { ); } + case ServiceCategory.ML_MODAL_SERVICES: { + const mlmodal = data as Mlmodel; + + return ( + + {mlmodal.tags && mlmodal.tags?.length > 0 ? ( + + ) : ( + '--' + )} + + ); + } default: return <>; } diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.test.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.test.tsx index 03c24ec4438..aedd806a5ce 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.test.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.test.tsx @@ -37,6 +37,7 @@ import { mockLookerService, mockMessagingService, mockMetabaseService, + mockMlmodelService, mockPipelineService, mockPowerBIService, mockPulsarService, @@ -81,6 +82,9 @@ jest.mock('../../axiosAPIs/serviceAPI', () => ({ case 'pipelineServices': return Promise.resolve(mockPipelineService); + case 'mlmodelServices': + return Promise.resolve(mockMlmodelService); + default: return Promise.resolve(mockDashboardService); } diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx index 6e38f2a0e31..aea05403186 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/services/index.tsx @@ -45,6 +45,7 @@ import { ServiceCategory } from '../../enums/service.enum'; import { DashboardService } from '../../generated/entity/services/dashboardService'; import { DatabaseService } from '../../generated/entity/services/databaseService'; import { MessagingService } from '../../generated/entity/services/messagingService'; +import { MlmodelService } from '../../generated/entity/services/mlmodelService'; import { PipelineService } from '../../generated/entity/services/pipelineService'; import { EntityReference } from '../../generated/type/entityReference'; import { Paging } from '../../generated/type/paging'; @@ -71,6 +72,7 @@ type ServiceRecord = { messagingServices: Array; dashboardServices: Array; pipelineServices: Array; + mlmodelServices: Array; }; type ServicePagingRecord = { @@ -78,6 +80,7 @@ type ServicePagingRecord = { messagingServices: Paging; dashboardServices: Paging; pipelineServices: Paging; + mlmodelServices: Paging; }; export type ApiData = { @@ -104,12 +107,14 @@ const ServicesPage = () => { messagingServices: pagingObject, dashboardServices: pagingObject, pipelineServices: pagingObject, + mlmodelServices: pagingObject, }); const [services, setServices] = useState({ databaseServices: [], messagingServices: [], dashboardServices: [], pipelineServices: [], + mlmodelServices: [], }); const [serviceList, setServiceList] = useState>([]); const [isLoading, setIsLoading] = useState(false); @@ -121,6 +126,7 @@ const ServicesPage = () => { messagingServices: 0, dashboardServices: 0, pipelineServices: 0, + mlmodelServices: 0, }); const [currentPage, setCurrentPage] = useState(1); @@ -170,6 +176,7 @@ const ServicesPage = () => { messagingServices: servicePaging.messagingServices.total || 0, dashboardServices: servicePaging.dashboardServices.total || 0, pipelineServices: servicePaging.pipelineServices.total || 0, + mlmodelServices: servicePaging.mlmodelServices.total || 0, }); setServiceList( serviceRecord[serviceName] as unknown as Array @@ -190,14 +197,14 @@ const ServicesPage = () => { } } } - setIsLoading(false); }) .catch((err: AxiosError) => { showErrorToast( err, jsonData['api-error-messages']['fetch-services-error'] ); - }); + }) + .finally(() => setIsLoading(false)); } }; @@ -255,7 +262,7 @@ const ServicesPage = () => { onClick={() => { handleTabChange(tab.name); }}> -

+

{tab.displayName}

@@ -322,6 +329,31 @@ const ServicesPage = () => { ); } + + case ServiceCategory.ML_MODAL_SERVICES: { + const mlmodel = service as unknown as MlmodelService; + + return ( + <> +
+ + + {mlmodel.connection.config?.registryUri} + +
+
+ + + {mlmodel.connection.config?.trackingUri} + +
+ + ); + } default: { return <>; } @@ -416,7 +448,7 @@ const ServicesPage = () => { {serviceList.map((service, index) => (
diff --git a/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx b/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx index 77a2d2c92ed..e3fa2da0b87 100644 --- a/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/pages/tour-page/TourPage.component.tsx @@ -127,6 +127,7 @@ const TourPage = () => { return ( edge.toEntity === n.id); if (!isUndefined(edge.lineageDetails)) { - edge.lineageDetails.columnsLineage.forEach((e) => { + edge.lineageDetails.columnsLineage?.forEach((e) => { const toColumn = e.toColumn || ''; if (e.fromColumns && e.fromColumns.length > 0) { e.fromColumns.forEach((fromColumn) => { diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/MlmodelServiceUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/MlmodelServiceUtils.ts new file mode 100644 index 00000000000..61bb61215aa --- /dev/null +++ b/openmetadata-ui/src/main/resources/ui/src/utils/MlmodelServiceUtils.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2021 Collate + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { cloneDeep } from 'lodash'; +import { COMMON_UI_SCHEMA } from '../constants/services.const'; +import { MlModelServiceType } from '../generated/entity/services/mlmodelService'; +import mlflowConnection from '../jsons/connectionSchemas/connections/mlmodel/mlflowConnection.json'; +import sklearnConnection from '../jsons/connectionSchemas/connections/mlmodel/sklearnConnection.json'; + +export const getMlmodelConfig = (type: MlModelServiceType) => { + let schema = {}; + const uiSchema = { ...COMMON_UI_SCHEMA }; + switch (type) { + case MlModelServiceType.Mlflow: { + schema = mlflowConnection; + + break; + } + case MlModelServiceType.Sklearn: { + schema = sklearnConnection; + + break; + } + } + + return cloneDeep({ schema, uiSchema }); +}; diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.tsx index e98d8d7977f..cfb5c63e31a 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtils.tsx @@ -52,6 +52,7 @@ import { LOOKER, MARIADB, METABASE, + MLFLOW, MSSQL, MYSQL, ORACLE, @@ -64,6 +65,7 @@ import { REDASH, REDSHIFT, SALESFORCE, + SCIKIT, serviceTypes, SINGLESTORE, SNOWFLAKE, @@ -76,6 +78,7 @@ import { } from '../constants/services.const'; import { ServiceCategory } from '../enums/service.enum'; import { ConnectionType } from '../generated/api/services/ingestionPipelines/testServiceConnection'; +import { MlModelServiceType } from '../generated/entity/data/mlmodel'; import { DashboardServiceType } from '../generated/entity/services/dashboardService'; import { DatabaseServiceType } from '../generated/entity/services/databaseService'; import { PipelineType as IngestionPipelineType } from '../generated/entity/services/ingestionPipelines/ingestionPipeline'; @@ -186,6 +189,12 @@ export const serviceTypeLogo = (type: string) => { case PipelineServiceType.Prefect: return PREFECT; + + case MlModelServiceType.Mlflow: + return MLFLOW; + + case MlModelServiceType.Sklearn: + return SCIKIT; default: { let logo; if (serviceTypes.messagingServices.includes(type)) { diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx index f191be1b01b..4e9b8a8456c 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx +++ b/openmetadata-ui/src/main/resources/ui/src/utils/SvgUtils.tsx @@ -110,6 +110,7 @@ import LogoMonogram from '../assets/svg/logo-monogram.svg'; import Logo from '../assets/svg/logo.svg'; import IconManageColor from '../assets/svg/manage-color.svg'; import IconMinus from '../assets/svg/minus.svg'; +import IconMlModal from '../assets/svg/mlmodal.svg'; import IconPaperPlanePrimary from '../assets/svg/paper-plane-primary.svg'; import IconPaperPlane from '../assets/svg/paper-plane.svg'; import IconPendingBadge from '../assets/svg/pending-badge.svg'; @@ -238,6 +239,7 @@ export const Icons = { EXTERNAL_LINK_GREY: 'external-link-grey', PROFILER: 'icon-profiler', PIPELINE: 'pipeline', + MLMODAL: 'mlmodal', PIPELINE_GREY: 'pipeline-grey', DBTMODEL_GREY: 'dbtmodel-grey', DBTMODEL_LIGHT_GREY: 'dbtmodel-light-grey', @@ -570,6 +572,10 @@ const SVGIcons: FunctionComponent = ({ case Icons.TOPIC: IconComponent = IconTopic; + break; + case Icons.MLMODAL: + IconComponent = IconMlModal; + break; case Icons.DASHBOARD: IconComponent = IconDashboard; diff --git a/openmetadata-ui/src/main/resources/ui/tailwind.config.js b/openmetadata-ui/src/main/resources/ui/tailwind.config.js index d26842f6ede..c71ee154597 100644 --- a/openmetadata-ui/src/main/resources/ui/tailwind.config.js +++ b/openmetadata-ui/src/main/resources/ui/tailwind.config.js @@ -173,6 +173,7 @@ module.exports = { 'screen-xxl': '2160px', 'full-hd': '1080px', 600: '600px', + 700: '700px', }, minWidth: { badgeCount: '30px',