From f99ed517bc4d34447bbff1bca0c28d26b0235756 Mon Sep 17 00:00:00 2001 From: Pere Miquel Brull Date: Thu, 28 Nov 2024 14:08:11 +0100 Subject: [PATCH 1/2] FIX - TestSuite source to get the right interface based on the service type (#18838) --- .../src/metadata/data_quality/runner/base_test_suite_source.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ingestion/src/metadata/data_quality/runner/base_test_suite_source.py b/ingestion/src/metadata/data_quality/runner/base_test_suite_source.py index 9651e0d045f7..bf4897843a9f 100644 --- a/ingestion/src/metadata/data_quality/runner/base_test_suite_source.py +++ b/ingestion/src/metadata/data_quality/runner/base_test_suite_source.py @@ -49,9 +49,10 @@ def __init__( ): self.validator_builder_class = ValidatorBuilder self._interface = None - self._interface_type: str = config.source.type.lower() self.entity = entity self.service_conn_config = self._copy_service_config(config, self.entity.database) # type: ignore + self._interface_type: str = self.service_conn_config.type.value.lower() + self.source_config = TestSuitePipeline.model_validate( config.source.sourceConfig.config ) From cb33f274fce483c14ce23fb2991b765364005666 Mon Sep 17 00:00:00 2001 From: harshsoni2024 <64592571+harshsoni2024@users.noreply.github.com> Date: Thu, 28 Nov 2024 18:50:42 +0530 Subject: [PATCH 2/2] Connector: rename microstrategy connector (#18604) --- .../native/1.6.0/mysql/schemaChanges.sql | 24 ++++ .../native/1.6.0/postgres/schemaChanges.sql | 24 ++++ .../{mstr.yaml => microstrategy.yaml} | 5 +- .../{mstr => microstrategy}/__init__.py | 0 .../{mstr => microstrategy}/client.py | 21 ++- .../{mstr => microstrategy}/connection.py | 17 +-- .../{mstr => microstrategy}/metadata.py | 32 +++-- .../{mstr => microstrategy}/models.py | 2 +- .../dashboard/microstrategy/service_spec.py | 6 + .../source/dashboard/mstr/service_spec.py | 4 - .../topology/dashboard/test_microstrategy.py | 127 ++++++++++++++++++ .../dashboard/microstrategy/index.md | 22 ++- .../dashboard/microstrategy/yaml.md | 26 ++-- .../dashboard/microstrategy/index.md | 23 +++- .../dashboard/microstrategy/yaml.md | 26 ++-- .../{mstr.json => microstrategy.json} | 4 +- .../dashboard/microStrategyConnection.json | 59 ++++++++ .../connections/dashboard/mstrConnection.json | 53 -------- .../entity/services/dashboardService.json | 6 +- .../locales/en-US/Dashboard/MicroStrategy.md | 32 +++++ .../ui/public/locales/en-US/Dashboard/Mstr.md | 25 ---- .../assets/img/service-icon-microstrategy.svg | 11 ++ .../ui/src/assets/img/service-icon-mstr.png | Bin 23441 -> 0 bytes .../ui/src/constants/Services.constant.ts | 4 +- .../ui/src/locale/languages/mr-in.json | 1 - .../ui/src/utils/DashboardServiceUtils.ts | 6 +- .../ui/src/utils/ServiceUtilClassBase.ts | 6 + 27 files changed, 409 insertions(+), 157 deletions(-) rename ingestion/src/metadata/examples/workflows/{mstr.yaml => microstrategy.yaml} (94%) rename ingestion/src/metadata/ingestion/source/dashboard/{mstr => microstrategy}/__init__.py (100%) rename ingestion/src/metadata/ingestion/source/dashboard/{mstr => microstrategy}/client.py (93%) rename ingestion/src/metadata/ingestion/source/dashboard/{mstr => microstrategy}/connection.py (79%) rename ingestion/src/metadata/ingestion/source/dashboard/{mstr => microstrategy}/metadata.py (90%) rename ingestion/src/metadata/ingestion/source/dashboard/{mstr => microstrategy}/models.py (99%) create mode 100644 ingestion/src/metadata/ingestion/source/dashboard/microstrategy/service_spec.py delete mode 100644 ingestion/src/metadata/ingestion/source/dashboard/mstr/service_spec.py create mode 100644 ingestion/tests/unit/topology/dashboard/test_microstrategy.py rename openmetadata-service/src/main/resources/json/data/testConnections/dashboard/{mstr.json => microstrategy.json} (85%) create mode 100644 openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json delete mode 100644 openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/mstrConnection.json create mode 100644 openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/MicroStrategy.md delete mode 100644 openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Mstr.md create mode 100644 openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-microstrategy.svg delete mode 100644 openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mstr.png diff --git a/bootstrap/sql/migrations/native/1.6.0/mysql/schemaChanges.sql b/bootstrap/sql/migrations/native/1.6.0/mysql/schemaChanges.sql index 9203128c0b24..aaa61aa8d720 100644 --- a/bootstrap/sql/migrations/native/1.6.0/mysql/schemaChanges.sql +++ b/bootstrap/sql/migrations/native/1.6.0/mysql/schemaChanges.sql @@ -1773,3 +1773,27 @@ SET json = JSON_SET( ) ) WHERE serviceType = 'DBTCloud'; + +-- Update serviceType in dashboard_entity table +UPDATE dashboard_entity +SET json = JSON_SET(json, '$.serviceType', 'MicroStrategy') +WHERE JSON_UNQUOTE(JSON_EXTRACT(json, '$.serviceType')) = 'Mstr'; + +-- Update serviceType in dashboard_service_entity table +UPDATE dashboard_service_entity +SET json = JSON_SET(json, '$.serviceType', 'MicroStrategy') +WHERE JSON_UNQUOTE(JSON_EXTRACT(json, '$.serviceType')) = 'Mstr'; + +UPDATE dashboard_service_entity +SET json = JSON_SET(json, '$.connection.config.type', 'MicroStrategy') +WHERE JSON_UNQUOTE(JSON_EXTRACT(json, '$.connection.config.type')) = 'Mstr'; + +-- Update serviceType in dashboard_data_model_entity table +UPDATE dashboard_data_model_entity +SET json = JSON_SET(json, '$.serviceType', 'MicroStrategy') +WHERE JSON_UNQUOTE(JSON_EXTRACT(json, '$.serviceType')) = 'Mstr'; + +-- Update serviceType in chart_entity table +UPDATE chart_entity +SET json = JSON_SET(json, '$.serviceType', 'MicroStrategy') +WHERE JSON_UNQUOTE(JSON_EXTRACT(json, '$.serviceType')) = 'Mstr'; \ No newline at end of file diff --git a/bootstrap/sql/migrations/native/1.6.0/postgres/schemaChanges.sql b/bootstrap/sql/migrations/native/1.6.0/postgres/schemaChanges.sql index 38fb01676a24..461d746d5504 100644 --- a/bootstrap/sql/migrations/native/1.6.0/postgres/schemaChanges.sql +++ b/bootstrap/sql/migrations/native/1.6.0/postgres/schemaChanges.sql @@ -1756,3 +1756,27 @@ and servicetype = 'DBTCloud'; UPDATE pipeline_service_entity SET json = jsonb_set(json, '{connection, config, projectIds}', '[]', true) WHERE servicetype = 'DBTCloud'; + +-- Update serviceType in dashboard_entity table +UPDATE dashboard_entity +SET json = jsonb_set(json, '{serviceType}', '"MicroStrategy"') +WHERE jsonb_extract_path_text(json, 'serviceType') = 'Mstr'; + +-- Update serviceType in dashboard_service_entity table +UPDATE dashboard_service_entity +SET json = jsonb_set(json, '{serviceType}', '"MicroStrategy"') +WHERE jsonb_extract_path_text(json, 'serviceType') = 'Mstr'; + +UPDATE dashboard_service_entity +SET json = jsonb_set(json, '{connection,config,type}', '"MicroStrategy"') +WHERE jsonb_extract_path_text(json, 'connection', 'config', 'type') = 'Mstr'; + +-- Update serviceType in dashboard_data_model_entity table +UPDATE dashboard_data_model_entity +SET json = jsonb_set(json, '{serviceType}', '"MicroStrategy"') +WHERE jsonb_extract_path_text(json, 'serviceType') = 'Mstr'; + +-- Update serviceType in chart_entity table +UPDATE chart_entity +SET json = jsonb_set(json, '{serviceType}', '"MicroStrategy"') +WHERE jsonb_extract_path_text(json, 'serviceType') = 'Mstr'; \ No newline at end of file diff --git a/ingestion/src/metadata/examples/workflows/mstr.yaml b/ingestion/src/metadata/examples/workflows/microstrategy.yaml similarity index 94% rename from ingestion/src/metadata/examples/workflows/mstr.yaml rename to ingestion/src/metadata/examples/workflows/microstrategy.yaml index 64ad7a44c0ee..4989872137ef 100644 --- a/ingestion/src/metadata/examples/workflows/mstr.yaml +++ b/ingestion/src/metadata/examples/workflows/microstrategy.yaml @@ -1,13 +1,14 @@ source: - type: mstr + type: microstrategy serviceName: test serviceConnection: config: - type: Mstr + type: MicroStrategy username: username password: password hostPort: http://hostPort projectName: project + loginMode: "8" sourceConfig: config: type: DashboardMetadata diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/__init__.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/__init__.py similarity index 100% rename from ingestion/src/metadata/ingestion/source/dashboard/mstr/__init__.py rename to ingestion/src/metadata/ingestion/source/dashboard/microstrategy/__init__.py diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/client.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/client.py similarity index 93% rename from ingestion/src/metadata/ingestion/source/dashboard/mstr/client.py rename to ingestion/src/metadata/ingestion/source/dashboard/microstrategy/client.py index 1388364db11c..7c25e8793cdc 100644 --- a/ingestion/src/metadata/ingestion/source/dashboard/mstr/client.py +++ b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/client.py @@ -9,19 +9,19 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -REST Auth & Client for Mstr +REST Auth & Client for MicroStrategy """ import traceback from typing import List, Optional import requests -from metadata.generated.schema.entity.services.connections.dashboard.mstrConnection import ( - MstrConnection, +from metadata.generated.schema.entity.services.connections.dashboard.microStrategyConnection import ( + MicroStrategyConnection, ) from metadata.ingestion.connections.test_connections import SourceConnectionException from metadata.ingestion.ometa.client import REST, ClientConfig -from metadata.ingestion.source.dashboard.mstr.models import ( +from metadata.ingestion.source.dashboard.microstrategy.models import ( AuthHeaderCookie, MstrDashboard, MstrDashboardDetails, @@ -37,30 +37,29 @@ logger = ingestion_logger() API_VERSION = "MicroStrategyLibrary/api" -LOGIN_MODE_GUEST = 8 APPLICATION_TYPE = 35 -class MSTRClient: +class MicroStrategyClient: """ Client Handling API communication with Metabase """ def _get_base_url(self, path=None): if not path: - return f"{clean_uri(self.config.hostPort)}/{API_VERSION}" - return f"{clean_uri(self.config.hostPort)}/{API_VERSION}/{path}" + return f"{clean_uri(str(self.config.hostPort))}/{API_VERSION}" + return f"{clean_uri(str(self.config.hostPort))}/{API_VERSION}/{path}" def __init__( self, - config: MstrConnection, + config: MicroStrategyConnection, ): self.config = config self.auth_params: AuthHeaderCookie = self._get_auth_header_and_cookies() client_config = ClientConfig( - base_url=clean_uri(config.hostPort), + base_url=clean_uri(str(self.config.hostPort)), api_version=API_VERSION, extra_headers=self.auth_params.auth_header, allow_redirects=True, @@ -81,7 +80,7 @@ def _get_auth_header_and_cookies(self) -> Optional[AuthHeaderCookie]: data = { "username": self.config.username, "password": self.config.password.get_secret_value(), - "loginMode": LOGIN_MODE_GUEST, + "loginMode": self.config.loginMode, "applicationType": APPLICATION_TYPE, } response = requests.post( diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/connection.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/connection.py similarity index 79% rename from ingestion/src/metadata/ingestion/source/dashboard/mstr/connection.py rename to ingestion/src/metadata/ingestion/source/dashboard/microstrategy/connection.py index 156022a8aaca..ce96e54b3cee 100644 --- a/ingestion/src/metadata/ingestion/source/dashboard/mstr/connection.py +++ b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/connection.py @@ -17,31 +17,29 @@ from metadata.generated.schema.entity.automations.workflow import ( Workflow as AutomationWorkflow, ) -from metadata.generated.schema.entity.services.connections.dashboard.mstrConnection import ( - MstrConnection, +from metadata.generated.schema.entity.services.connections.dashboard.microStrategyConnection import ( + MicroStrategyConnection, ) from metadata.generated.schema.entity.services.connections.testConnectionResult import ( TestConnectionResult, ) from metadata.ingestion.connections.test_connections import test_connection_steps from metadata.ingestion.ometa.ometa_api import OpenMetadata -from metadata.ingestion.source.dashboard.mstr.client import MSTRClient -from metadata.utils.constants import THREE_MIN +from metadata.ingestion.source.dashboard.microstrategy.client import MicroStrategyClient -def get_connection(connection: MstrConnection) -> MSTRClient: +def get_connection(connection: MicroStrategyConnection) -> MicroStrategyClient: """ Create connection """ - return MSTRClient(connection) + return MicroStrategyClient(connection) def test_connection( metadata: OpenMetadata, - client: MSTRClient, - service_connection: MstrConnection, + client: MicroStrategyClient, + service_connection: MicroStrategyConnection, automation_workflow: Optional[AutomationWorkflow] = None, - timeout_seconds: Optional[int] = THREE_MIN, ) -> TestConnectionResult: """ Test connection. This can be executed either as part @@ -55,5 +53,4 @@ def test_connection( test_fn=test_fn, service_type=service_connection.type.value, automation_workflow=automation_workflow, - timeout_seconds=timeout_seconds, ) diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/metadata.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/metadata.py similarity index 90% rename from ingestion/src/metadata/ingestion/source/dashboard/mstr/metadata.py rename to ingestion/src/metadata/ingestion/source/dashboard/microstrategy/metadata.py index d26ee0ef0e60..1fcd23c1ccab 100644 --- a/ingestion/src/metadata/ingestion/source/dashboard/mstr/metadata.py +++ b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/metadata.py @@ -8,7 +8,7 @@ # 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. -"""Mstr source module""" +"""MicroStrategy source module""" import traceback from typing import Iterable, List, Optional @@ -16,8 +16,8 @@ from metadata.generated.schema.api.data.createDashboard import CreateDashboardRequest from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest from metadata.generated.schema.entity.data.chart import Chart -from metadata.generated.schema.entity.services.connections.dashboard.mstrConnection import ( - MstrConnection, +from metadata.generated.schema.entity.services.connections.dashboard.microStrategyConnection import ( + MicroStrategyConnection, ) from metadata.generated.schema.entity.services.ingestionPipelines.status import ( StackTraceError, @@ -34,7 +34,7 @@ from metadata.ingestion.api.steps import InvalidSourceException from metadata.ingestion.ometa.ometa_api import OpenMetadata from metadata.ingestion.source.dashboard.dashboard_service import DashboardServiceSource -from metadata.ingestion.source.dashboard.mstr.models import ( +from metadata.ingestion.source.dashboard.microstrategy.models import ( MstrDashboard, MstrDashboardDetails, MstrPage, @@ -47,9 +47,9 @@ logger = ingestion_logger() -class MstrSource(DashboardServiceSource): +class MicrostrategySource(DashboardServiceSource): """ - MSTR Source Class + Microstrategy Source Class """ @classmethod @@ -60,10 +60,10 @@ def create( pipeline_name: Optional[str] = None, ): config = WorkflowSource.model_validate(config_dict) - connection: MstrConnection = config.serviceConnection.root.config - if not isinstance(connection, MstrConnection): + connection: MicroStrategyConnection = config.serviceConnection.root.config + if not isinstance(connection, MicroStrategyConnection): raise InvalidSourceException( - f"Expected MstrConnection, but got {connection}" + f"Expected MicroStrategyConnection, but got {connection}" ) return cls(config, metadata) @@ -75,14 +75,18 @@ def get_dashboards_list(self) -> Optional[List[MstrDashboard]]: if self.client.is_project_name(): project = self.client.get_project_by_name() - dashboards.extend(self.client.get_dashboards_list(project.id, project.name)) - - if not self.client.is_project_name(): - for project in self.client.get_projects_list(): + if project: dashboards.extend( self.client.get_dashboards_list(project.id, project.name) ) + if not self.client.is_project_name(): + for project in self.client.get_projects_list(): + if project: + dashboards.extend( + self.client.get_dashboards_list(project.id, project.name) + ) + return dashboards def get_dashboard_name(self, dashboard: MstrDashboard) -> str: @@ -121,7 +125,7 @@ def yield_dashboard( if dashboard_details: try: dashboard_url = ( - f"{clean_uri(self.service_connection.hostPort)}/MicroStrategyLibrary/app/" + f"{clean_uri(str(self.service_connection.hostPort))}/MicroStrategyLibrary/app/" f"{dashboard_details.projectId}/{dashboard_details.id}" ) dashboard_request = CreateDashboardRequest( diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/models.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/models.py similarity index 99% rename from ingestion/src/metadata/ingestion/source/dashboard/mstr/models.py rename to ingestion/src/metadata/ingestion/source/dashboard/microstrategy/models.py index 372dfb92d0a6..0c550cdfea7b 100644 --- a/ingestion/src/metadata/ingestion/source/dashboard/mstr/models.py +++ b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/models.py @@ -9,7 +9,7 @@ # See the License for the specific language governing permissions and # limitations under the License. """ -MSTR Models +MicroStrategy Models """ from datetime import datetime from typing import Any, List, Optional diff --git a/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/service_spec.py b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/service_spec.py new file mode 100644 index 000000000000..d9b6c3a9547b --- /dev/null +++ b/ingestion/src/metadata/ingestion/source/dashboard/microstrategy/service_spec.py @@ -0,0 +1,6 @@ +from metadata.ingestion.source.dashboard.microstrategy.metadata import ( + MicrostrategySource, +) +from metadata.utils.service_spec.default import DefaultDatabaseSpec + +ServiceSpec = DefaultDatabaseSpec(metadata_source_class=MicrostrategySource) diff --git a/ingestion/src/metadata/ingestion/source/dashboard/mstr/service_spec.py b/ingestion/src/metadata/ingestion/source/dashboard/mstr/service_spec.py deleted file mode 100644 index f2ea7e03df8a..000000000000 --- a/ingestion/src/metadata/ingestion/source/dashboard/mstr/service_spec.py +++ /dev/null @@ -1,4 +0,0 @@ -from metadata.ingestion.source.dashboard.mstr.metadata import MstrSource -from metadata.utils.service_spec import BaseSpec - -ServiceSpec = BaseSpec(metadata_source_class=MstrSource) diff --git a/ingestion/tests/unit/topology/dashboard/test_microstrategy.py b/ingestion/tests/unit/topology/dashboard/test_microstrategy.py new file mode 100644 index 000000000000..5af80363c50e --- /dev/null +++ b/ingestion/tests/unit/topology/dashboard/test_microstrategy.py @@ -0,0 +1,127 @@ +# 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. + +""" +Test Microstrategy using the topology +""" +from datetime import datetime +from types import SimpleNamespace +from unittest import TestCase +from unittest.mock import patch + +from metadata.generated.schema.metadataIngestion.workflow import ( + OpenMetadataWorkflowConfig, +) +from metadata.ingestion.ometa.ometa_api import OpenMetadata +from metadata.ingestion.source.dashboard.microstrategy.metadata import ( + MicrostrategySource, +) +from metadata.ingestion.source.dashboard.microstrategy.models import ( + MstrDashboard, + MstrOwner, + MstrProject, +) + +mock_micro_config = { + "source": { + "type": "microstrategy", + "serviceName": "local_stitch_test", + "serviceConnection": { + "config": { + "type": "MicroStrategy", + "hostPort": "https://demo.microstrategy.com", + "username": "username", + "password": "password", + } + }, + "sourceConfig": {"config": {"type": "DashboardMetadata"}}, + }, + "sink": {"type": "metadata-rest", "config": {}}, + "workflowConfig": { + "loggerLevel": "DEBUG", + "openMetadataServerConfig": { + "hostPort": "http://localhost:8585/api", + "authProvider": "openmetadata", + "securityConfig": { + "jwtToken": "eyJraWQiOiJHYjM4OWEtOWY3Ni1nZGpzLWE5MmotMDI0MmJrOTQzNTYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlzQm90IjpmYWxzZSwiaXNzIjoib3Blbi1tZXRhZGF0YS5vcmciLCJpYXQiOjE2NjM5Mzg0NjIsImVtYWlsIjoiYWRtaW5Ab3Blbm1ldGFkYXRhLm9yZyJ9.tS8um_5DKu7HgzGBzS1VTA5uUjKWOCU0B_j08WXBiEC0mr0zNREkqVfwFDD-d24HlNEbrqioLsBuFRiwIWKc1m_ZlVQbG7P36RUxhuv2vbSp80FKyNM-Tj93FDzq91jsyNmsQhyNv_fNr3TXfzzSPjHt8Go0FMMP66weoKMgW2PbXlhVKwEuXUHyakLLzewm9UMeQaEiRzhiTMU3UkLXcKbYEJJvfNFcLwSl9W8JCO_l0Yj3ud-qt_nQYEZwqW6u5nfdQllN133iikV4fM5QZsMCnm8Rq1mvLR0y9bmJiD7fwM1tmJ791TUWqmKaTnP49U493VanKpUAfzIiOiIbhg" + }, + }, + }, +} + +MOCK_PROJECT_LIST = [ + MstrProject( + acg=5, + id="B7CA92F04B9FAE8D941C3E9B7E0CD754", + name="MicroStrategy Tutorial", + status=0, + alias="", + description="fun", + dateCreated=datetime(2015, 6, 30, 21, 55, 35), + dateModified=datetime(2024, 10, 1, 21, 42, 50), + owner=MstrOwner(name="Administrator", id="54F3D26011D2896560009A8E67019608"), + ) +] + +MOCK_DASHBORD_LIST = [ + MstrDashboard( + name="Library of Demos", + id="925FB4A311EA52FF3EA80080EF059105", + type=55, + description="abc", + subtype=14081, + dateCreated="2020-02-19T10:07:01.000+0000", + dateModified="2024-11-06T14:14:42.000+0000", + version="3E367000E84DD4AA9B501EAD892EB2E1", + acg=199, + owner=MstrOwner(name="Administrator", id="54F3D26011D2896560009A8E67019608"), + extType=0, + viewMedia=1879072805, + certifiedInfo={"certified": False}, + templateInfo={"template": False, "lastModifiedBy": {}}, + projectId="EC70648611E7A2F962E90080EFD58751", + projectName="MicroStrategy Tutorial", + ) +] + + +class MicroStrategyUnitTest(TestCase): + """ + Implements the necessary methods to extract + MicroStrategy Unit Testtest_dbt + """ + + @patch( + "metadata.ingestion.source.dashboard.microstrategy.metadata.MicrostrategySource.test_connection" + ) + @patch( + "metadata.ingestion.source.dashboard.microstrategy.connection.get_connection" + ) + def __init__(self, methodName, get_connection, test_connection) -> None: + super().__init__(methodName) + test_connection.return_value = False + get_connection.return_value = False + self.config = OpenMetadataWorkflowConfig.model_validate(mock_micro_config) + self.microstrategy = MicrostrategySource.create( + mock_micro_config["source"], + OpenMetadata(self.config.workflowConfig.openMetadataServerConfig), + ) + self.microstrategy.client = SimpleNamespace() + + def test_get_dashboards_list(self): + """ + Get the dashboards + """ + self.microstrategy.client.is_project_name = lambda *_: False + self.microstrategy.client.get_projects_list = lambda *_: MOCK_PROJECT_LIST + self.microstrategy.client.get_dashboards_list = lambda *_: MOCK_DASHBORD_LIST + fetched_dashboards_list = self.microstrategy.get_dashboards_list() + self.assertEqual(list(fetched_dashboards_list), MOCK_DASHBORD_LIST) diff --git a/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/index.md b/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/index.md index dd67e19c9da1..dad15758364b 100644 --- a/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/index.md +++ b/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/index.md @@ -24,6 +24,16 @@ Configure and schedule MicroStrategy metadata and profiler workflows from the Op To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or higher. +When a service user is created, it is already provisioned with the necessary permissions. +However, if the user still cannot access the APIs, the following should be checked as part of the troubleshooting process: +- Required DSS Privileges for MicroStrategy REST/JSON API: +- Web Services API: Essential for REST API usage. +- Login to MicroStrategy: User authentication. +- Use Project Sources: Access to project sources. +- View Metadata: Metadata browsing and viewing. +- Access Administration Objects: Global metadata access (connections, DB instances). +- Browse Repository: Object navigation within projects/folders. + ## Metadata Ingestion {% partial @@ -41,16 +51,18 @@ To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or h #### Connection Details -- **Username**: Username to connect to Mstr, e.g., user@organization.com. This user should have access to relevant dashboards and charts in Mstr to fetch the metadata. +- **Username**: Username to connect to MicroStrategy, e.g., user@organization.com. This user should have access to relevant dashboards and charts in MicroStrategy to fetch the metadata. -- **Password**: Password of the user account to connect with Mstr. +- **Password**: Password of the user account to connect with MicroStrategy. -- **Host Port**: This parameter specifies the host and port of the Mstr instance. This should be specified as a URI string in the format http://hostname:port or https://hostname:port. +- **Host Port**: This parameter specifies the host of the MicroStrategy instance. This should be specified as a URI string in the format http://hostname or https://hostname. -For example, you might set it to https://org.mstr.com:3000. +For example, you might set it to https://demo.microstrategy.com. -- **Project Name**: The name of the project within Mstr that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. +- **Project Name**: The name of the project within MicroStrategy that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. +- **Login Mode**: Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. +If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`. {% /extraContent %} {% partial file="/v1.5/connectors/test-connection.md" /%} diff --git a/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/yaml.md b/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/yaml.md index 539122b62247..bbbf138c0197 100644 --- a/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/yaml.md +++ b/openmetadata-docs/content/v1.5.x/connectors/dashboard/microstrategy/yaml.md @@ -31,7 +31,7 @@ To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or h To run the MicroStrategy ingestion, you will need to install: ```bash -pip3 install "openmetadata-ingestion[mstr]" +pip3 install "openmetadata-ingestion[microstrategy]" ``` ## Metadata Ingestion @@ -59,27 +59,34 @@ This is a sample config for MicroStrategy: {% codeInfo srNumber=1 %} -- **Username**: Username to connect to Mstr, e.g., user@organization.com. This user should have access to relevant dashboards and charts in Mstr to fetch the metadata. +- **Username**: Username to connect to MicroStrategy, e.g., user@organization.com. This user should have access to relevant dashboards and charts in MicroStrategy to fetch the metadata. {% /codeInfo %} {% codeInfo srNumber=2 %} -- **Password**: Password of the user account to connect with Mstr. +- **Password**: Password of the user account to connect with MicroStrategy. {% /codeInfo %} {% codeInfo srNumber=3 %} -- **Host Port**: This parameter specifies the host and port of the Mstr instance. This should be specified as a URI string in the format http://hostname:port or https://hostname:port. +- **Host Port**: This parameter specifies the host of the MicroStrategy instance. This should be specified as a URI string in the format http://hostname or https://hostname. -For example, you might set it to https://org.mstr.com:3000. +For example, you might set it to https://demo.microstrategy.com. {% /codeInfo %} {% codeInfo srNumber=4 %} -- **Project Name**: The name of the project within Mstr that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. +- **Project Name**: The name of the project within MicroStrategy that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. + +{% /codeInfo %} + +{% codeInfo srNumber=5 %} + +- **Login Mode**: Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. +If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`. {% /codeInfo %} @@ -95,11 +102,11 @@ For example, you might set it to https://org.mstr.com:3000. ```yaml {% isCodeBlock=true %} source: - type: mstr + type: microstrategy serviceName: local_Mstr serviceConnection: config: - type: Mstr + type: MicroStrategy ``` ```yaml {% srNumber=1 %} username: username @@ -113,6 +120,9 @@ source: ```yaml {% srNumber=4 %} projectName: project ``` +```yaml {% srNumber=5 %} + loginMode: "1" +``` {% partial file="/v1.5/connectors/yaml/dashboard/source-config.md" /%} diff --git a/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/index.md b/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/index.md index 0700370930c7..197dbcabb870 100644 --- a/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/index.md +++ b/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/index.md @@ -24,6 +24,16 @@ Configure and schedule MicroStrategy metadata and profiler workflows from the Op To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or higher. +When a service user is created, it is already provisioned with the necessary permissions. +However, if the user still cannot access the APIs, the following should be checked as part of the troubleshooting process: +- Required DSS Privileges for MicroStrategy REST/JSON API: +- Web Services API: Essential for REST API usage. +- Login to MicroStrategy: User authentication. +- Use Project Sources: Access to project sources. +- View Metadata: Metadata browsing and viewing. +- Access Administration Objects: Global metadata access (connections, DB instances). +- Browse Repository: Object navigation within projects/folders. + ## Metadata Ingestion {% partial @@ -41,15 +51,18 @@ To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or h #### Connection Details -- **Username**: Username to connect to Mstr, e.g., user@organization.com. This user should have access to relevant dashboards and charts in Mstr to fetch the metadata. +- **Username**: Username to connect to MicroStrategy, e.g., user@organization.com. This user should have access to relevant dashboards and charts in MicroStrategy to fetch the metadata. + +- **Password**: Password of the user account to connect with MicroStrategy. -- **Password**: Password of the user account to connect with Mstr. +- **Host Port**: This parameter specifies the host of the MicroStrategy instance. This should be specified as a URI string in the format http://hostname or https://hostname. -- **Host Port**: This parameter specifies the host and port of the Mstr instance. This should be specified as a URI string in the format http://hostname:port or https://hostname:port. +For example, you might set it to https://demo.microstrategy.com. -For example, you might set it to https://org.mstr.com:3000. +- **Project Name**: The name of the project within MicroStrategy that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. -- **Project Name**: The name of the project within Mstr that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. +- **Login Mode**: Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. +If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`. {% /extraContent %} diff --git a/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/yaml.md b/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/yaml.md index bd159630e6ea..d01482d50299 100644 --- a/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/yaml.md +++ b/openmetadata-docs/content/v1.6.x-SNAPSHOT/connectors/dashboard/microstrategy/yaml.md @@ -31,7 +31,7 @@ To integrate MicroStrategy, ensure you are using OpenMetadata version 1.2.x or h To run the MicroStrategy ingestion, you will need to install: ```bash -pip3 install "openmetadata-ingestion[mstr]" +pip3 install "openmetadata-ingestion[microstrategy]" ``` ## Metadata Ingestion @@ -59,27 +59,34 @@ This is a sample config for MicroStrategy: {% codeInfo srNumber=1 %} -- **Username**: Username to connect to Mstr, e.g., user@organization.com. This user should have access to relevant dashboards and charts in Mstr to fetch the metadata. +- **Username**: Username to connect to MicroStrategy, e.g., user@organization.com. This user should have access to relevant dashboards and charts in MicroStrategy to fetch the metadata. {% /codeInfo %} {% codeInfo srNumber=2 %} -- **Password**: Password of the user account to connect with Mstr. +- **Password**: Password of the user account to connect with MicroStrategy. {% /codeInfo %} {% codeInfo srNumber=3 %} -- **Host Port**: This parameter specifies the host and port of the Mstr instance. This should be specified as a URI string in the format http://hostname:port or https://hostname:port. +- **Host Port**: This parameter specifies the host of the MicroStrategy instance. This should be specified as a URI string in the format http://hostname or https://hostname. -For example, you might set it to https://org.mstr.com:3000. +For example, you might set it to https://demo.microstrategy.com. {% /codeInfo %} {% codeInfo srNumber=4 %} -- **Project Name**: The name of the project within Mstr that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. +- **Project Name**: The name of the project within MicroStrategy that OpenMetadata will connect to, linking to the relevant dashboards and reports for metadata retrieval. + +{% /codeInfo %} + +{% codeInfo srNumber=5 %} + +- **Login Mode**: Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. +If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`. {% /codeInfo %} @@ -95,11 +102,11 @@ For example, you might set it to https://org.mstr.com:3000. ```yaml {% isCodeBlock=true %} source: - type: mstr + type: microstrategy serviceName: local_Mstr serviceConnection: config: - type: Mstr + type: MicroStrategy ``` ```yaml {% srNumber=1 %} username: username @@ -113,6 +120,9 @@ source: ```yaml {% srNumber=4 %} projectName: project ``` +```yaml {% srNumber=5 %} + loginMode: "1" +``` {% partial file="/v1.6/connectors/yaml/dashboard/source-config.md" /%} diff --git a/openmetadata-service/src/main/resources/json/data/testConnections/dashboard/mstr.json b/openmetadata-service/src/main/resources/json/data/testConnections/dashboard/microstrategy.json similarity index 85% rename from openmetadata-service/src/main/resources/json/data/testConnections/dashboard/mstr.json rename to openmetadata-service/src/main/resources/json/data/testConnections/dashboard/microstrategy.json index b6e5a2a25e58..203fa19caceb 100644 --- a/openmetadata-service/src/main/resources/json/data/testConnections/dashboard/mstr.json +++ b/openmetadata-service/src/main/resources/json/data/testConnections/dashboard/microstrategy.json @@ -1,6 +1,6 @@ { - "name": "Mstr", - "displayName": "Mstr Test Connection", + "name": "MicroStrategy", + "displayName": "MicroStrategy Test Connection", "description": "This Test Connection validates the access against the server and basic metadata extraction of dashboards and charts.", "steps": [ { diff --git a/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json b/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json new file mode 100644 index 000000000000..dd423785f4af --- /dev/null +++ b/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/microStrategyConnection.json @@ -0,0 +1,59 @@ +{ + "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/microStrategyConnection.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MicroStrategyConnection", + "description": "MicroStrategy Connection Config", + "type": "object", + "javaType": "org.openmetadata.schema.services.connections.dashboard.MicroStrategyConnection", + "definitions": { + "microStrategyType": { + "description": "MicroStrategy service type", + "type": "string", + "enum": ["MicroStrategy"], + "default": "MicroStrategy" + } + }, + "properties": { + "type": { + "title": "Service Type", + "description": "Service Type", + "$ref": "#/definitions/microStrategyType", + "default": "MicroStrategy" + }, + "username": { + "title": "Username", + "description": "Username to connect to MicroStrategy. This user should have privileges to read all the metadata in MicroStrategy.", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Password to connect to MicroStrategy.", + "type": "string", + "format": "password" + }, + "hostPort": { + "expose": true, + "title": "Host and Port", + "description": "Host and Port of the MicroStrategy instance.", + "type": "string", + "format": "uri" + }, + "projectName": { + "title": "Project Name", + "description": "MicroStrategy Project Name", + "type": "string" + }, + "loginMode": { + "title": "Login Mode", + "description": "Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Standard (1)`. If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`.", + "type": "string", + "default": "1" + }, + "supportsMetadataExtraction": { + "title": "Supports Metadata Extraction", + "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction" + } + }, + "additionalProperties": false, + "required": ["hostPort", "username", "password"] +} diff --git a/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/mstrConnection.json b/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/mstrConnection.json deleted file mode 100644 index 66355ee7fa0f..000000000000 --- a/openmetadata-spec/src/main/resources/json/schema/entity/services/connections/dashboard/mstrConnection.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$id": "https://open-metadata.org/schema/entity/services/connections/dashboard/mstrConnection.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MstrConnection", - "description": "Mstr Connection Config", - "type": "object", - "javaType": "org.openmetadata.schema.services.connections.dashboard.MstrConnection", - "definitions": { - "mstrType": { - "description": "Mstr service type", - "type": "string", - "enum": ["Mstr"], - "default": "Mstr" - } - }, - "properties": { - "type": { - "title": "Service Type", - "description": "Service Type", - "$ref": "#/definitions/mstrType", - "default": "Mstr" - }, - "username": { - "title": "Username", - "description": "Username to connect to MSTR. This user should have privileges to read all the metadata in MSTR.", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Password to connect to MSTR.", - "type": "string", - "format": "password" - }, - "hostPort": { - "expose": true, - "title": "Host and Port", - "description": "Host and Port of the Metabase instance.", - "type": "string", - "format": "uri" - }, - "projectName": { - "title": "Project Name", - "description": "MSTR Project Name", - "type": "string" - }, - "supportsMetadataExtraction": { - "title": "Supports Metadata Extraction", - "$ref": "../connectionBasicType.json#/definitions/supportsMetadataExtraction" - } - }, - "additionalProperties": false, - "required": ["hostPort", "username"] -} diff --git a/openmetadata-spec/src/main/resources/json/schema/entity/services/dashboardService.json b/openmetadata-spec/src/main/resources/json/schema/entity/services/dashboardService.json index 04986503a090..8bb69c03ffde 100644 --- a/openmetadata-spec/src/main/resources/json/schema/entity/services/dashboardService.json +++ b/openmetadata-spec/src/main/resources/json/schema/entity/services/dashboardService.json @@ -28,7 +28,7 @@ "QuickSight", "QlikSense", "Lightdash", - "Mstr", + "MicroStrategy", "QlikCloud", "Sigma" ], @@ -73,7 +73,7 @@ "name": "Lightdash" }, { - "name": "Mstr" + "name": "MicroStrategy" }, { "name": "QlikCloud" @@ -134,7 +134,7 @@ "$ref": "./connections/dashboard/lightdashConnection.json" }, { - "$ref": "./connections/dashboard/mstrConnection.json" + "$ref": "./connections/dashboard/microStrategyConnection.json" }, { "$ref": "./connections/dashboard/qlikCloudConnection.json" diff --git a/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/MicroStrategy.md b/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/MicroStrategy.md new file mode 100644 index 000000000000..f8136e57d864 --- /dev/null +++ b/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/MicroStrategy.md @@ -0,0 +1,32 @@ +# MicroStrategy + +In this section, we provide guides and references to use the MicroStrategy connector. + +## Connection Details + +$$section +### Username $(id="username") + +Username to connect to MicroStrategy, e.g., `user@organization.com`. This user should have access to relevant dashboards and charts in MicroStrategy to fetch the metadata. +$$ + +$$section +### Password $(id="password") + +Password of the user account to connect with MicroStrategy. +$$ + +$$section +### Host Port $(id="hostPort") + +This parameter specifies the host of the MicroStrategy instance. This should be specified as a URI string in the format http://hostname or https://hostname. + +For example, you might set it to https://demo.microstrategy.com. +$$ + +$$section +### Login Mode $(id="loginMode") + +Login Mode for Microstrategy's REST API connection. You can authenticate with one of the following authentication modes: `Standard (1)`, `Anonymous (8)`. Default will be `Anonymous (8)`. +If you're using demo account for Microstrategy, it will be needed to authenticate through loginMode `8`. +$$ diff --git a/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Mstr.md b/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Mstr.md deleted file mode 100644 index 2b04f02f0e77..000000000000 --- a/openmetadata-ui/src/main/resources/ui/public/locales/en-US/Dashboard/Mstr.md +++ /dev/null @@ -1,25 +0,0 @@ -# Mstr - -In this section, we provide guides and references to use the Mstr connector. - -## Connection Details - -$$section -### Username $(id="username") - -Username to connect to Mstr, e.g., `user@organization.com`. This user should have access to relevant dashboards and charts in Mstr to fetch the metadata. -$$ - -$$section -### Password $(id="password") - -Password of the user account to connect with Mstr. -$$ - -$$section -### Host Port $(id="hostPort") - -This parameter specifies the host and port of the Mstr instance. This should be specified as a URI string in the format `http://hostname:port` or `https://hostname:port`. - -For example, you might set it to `https://org.mstr.com:3000`. -$$ diff --git a/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-microstrategy.svg b/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-microstrategy.svg new file mode 100644 index 000000000000..df5d5555e3ea --- /dev/null +++ b/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-microstrategy.svg @@ -0,0 +1,11 @@ + + microstrategy-m-icon-circle-svg + + + + + + \ No newline at end of file diff --git a/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mstr.png b/openmetadata-ui/src/main/resources/ui/src/assets/img/service-icon-mstr.png deleted file mode 100644 index d453270cf371e03c8399f30aadfad07a38bb52dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23441 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 diff --git a/openmetadata-ui/src/main/resources/ui/src/constants/Services.constant.ts b/openmetadata-ui/src/main/resources/ui/src/constants/Services.constant.ts index 7b415b948dcd..c3ca33b88743 100644 --- a/openmetadata-ui/src/main/resources/ui/src/constants/Services.constant.ts +++ b/openmetadata-ui/src/main/resources/ui/src/constants/Services.constant.ts @@ -52,11 +52,11 @@ import lightDash from '../assets/img/service-icon-lightdash.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 microstrategy from '../assets/img/service-icon-microstrategy.svg'; import mode from '../assets/img/service-icon-mode.png'; import mongodb from '../assets/img/service-icon-mongodb.png'; import msAzure from '../assets/img/service-icon-ms-azure.png'; import mssql from '../assets/img/service-icon-mssql.png'; -import mstr from '../assets/img/service-icon-mstr.png'; import nifi from '../assets/img/service-icon-nifi.png'; import openlineage from '../assets/img/service-icon-openlineage.svg'; import oracle from '../assets/img/service-icon-oracle.png'; @@ -153,7 +153,7 @@ export const REDPANDA = redpanda; export const SUPERSET = superset; export const SYNAPSE = synapse; export const LOOKER = looker; -export const MSTR = mstr; +export const MICROSTRATEGY = microstrategy; export const TABLEAU = tableau; export const REDASH = redash; export const METABASE = metabase; diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json index a35924c5c410..5748e124c160 100644 --- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json +++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json @@ -56,7 +56,6 @@ "aggregate": "एकूण", "airflow-config-plural": "एअरफ्लो संरचना", "alert": "सूचना", - "alert-details": "Alert Details", "alert-lowercase": "सूचना", "alert-lowercase-plural": "सूचना", "alert-plural": "सूचना", diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DashboardServiceUtils.ts b/openmetadata-ui/src/main/resources/ui/src/utils/DashboardServiceUtils.ts index ab71882577b4..d0ffe2488928 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/DashboardServiceUtils.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/DashboardServiceUtils.ts @@ -22,8 +22,8 @@ import domoDashboardConnection from '../jsons/connectionSchemas/connections/dash import lightdashConnection from '../jsons/connectionSchemas/connections/dashboard/lightdashConnection.json'; import lookerConnection from '../jsons/connectionSchemas/connections/dashboard/lookerConnection.json'; import metabaseConnection from '../jsons/connectionSchemas/connections/dashboard/metabaseConnection.json'; +import microStrategyConnection from '../jsons/connectionSchemas/connections/dashboard/microStrategyConnection.json'; import modeConnection from '../jsons/connectionSchemas/connections/dashboard/modeConnection.json'; -import mstrConnection from '../jsons/connectionSchemas/connections/dashboard/mstrConnection.json'; import powerBIConnection from '../jsons/connectionSchemas/connections/dashboard/powerBIConnection.json'; import qlikcloudConnection from '../jsons/connectionSchemas/connections/dashboard/qlikCloudConnection.json'; import qliksenseConnection from '../jsons/connectionSchemas/connections/dashboard/qlikSenseConnection.json'; @@ -118,8 +118,8 @@ export const getDashboardConfig = (type: DashboardServiceType) => { break; } - case DashboardServiceType.Mstr: { - schema = mstrConnection; + case DashboardServiceType.MicroStrategy: { + schema = microStrategyConnection; break; } diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtilClassBase.ts b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtilClassBase.ts index 6bc96a9852a8..e8e8317af669 100644 --- a/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtilClassBase.ts +++ b/openmetadata-ui/src/main/resources/ui/src/utils/ServiceUtilClassBase.ts @@ -58,6 +58,7 @@ import { LOOKER, MARIADB, METABASE, + MICROSTRATEGY, MLFLOW, ML_MODEL_DEFAULT, MODE, @@ -376,6 +377,7 @@ class ServiceUtilClassBase { case this.DashboardServiceTypeSmallCase.CustomDashboard: return DASHBOARD_DEFAULT; + case this.DashboardServiceTypeSmallCase.Superset: return SUPERSET; @@ -468,6 +470,7 @@ class ServiceUtilClassBase { case this.MlModelServiceTypeSmallCase.Sklearn: return SCIKIT; + case this.MlModelServiceTypeSmallCase.SageMaker: return SAGEMAKER; @@ -504,6 +507,9 @@ class ServiceUtilClassBase { case this.ApiServiceTypeSmallCase.REST: return REST_SERVICE; + case this.DashboardServiceTypeSmallCase.MicroStrategy: + return MICROSTRATEGY; + default: { let logo; if (serviceTypes.messagingServices.includes(type)) {