mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-02 19:48:17 +00:00
Connector: rename microstrategy connector (#18604)
This commit is contained in:
parent
f99ed517bc
commit
cb33f274fc
@ -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';
|
||||
@ -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';
|
||||
@ -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
|
||||
@ -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 @@ from metadata.utils.logger import ingestion_logger
|
||||
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 @@ class MSTRClient:
|
||||
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(
|
||||
@ -17,31 +17,29 @@ from typing import Optional
|
||||
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,
|
||||
)
|
||||
@ -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.createChart import CreateChartRequest
|
||||
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.models import Either
|
||||
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 @@ from metadata.utils.logger import ingestion_logger
|
||||
logger = ingestion_logger()
|
||||
|
||||
|
||||
class MstrSource(DashboardServiceSource):
|
||||
class MicrostrategySource(DashboardServiceSource):
|
||||
"""
|
||||
MSTR Source Class
|
||||
Microstrategy Source Class
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
@ -60,10 +60,10 @@ class MstrSource(DashboardServiceSource):
|
||||
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 @@ class MstrSource(DashboardServiceSource):
|
||||
|
||||
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 @@ class MstrSource(DashboardServiceSource):
|
||||
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(
|
||||
@ -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
|
||||
@ -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)
|
||||
@ -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)
|
||||
127
ingestion/tests/unit/topology/dashboard/test_microstrategy.py
Normal file
127
ingestion/tests/unit/topology/dashboard/test_microstrategy.py
Normal file
@ -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)
|
||||
@ -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" /%}
|
||||
|
||||
@ -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" /%}
|
||||
|
||||
|
||||
@ -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 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 %}
|
||||
|
||||
|
||||
@ -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" /%}
|
||||
|
||||
|
||||
@ -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": [
|
||||
{
|
||||
@ -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"]
|
||||
}
|
||||
@ -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"]
|
||||
}
|
||||
@ -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"
|
||||
|
||||
@ -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`.
|
||||
$$
|
||||
@ -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`.
|
||||
$$
|
||||
@ -0,0 +1,11 @@
|
||||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1556 1556" width="1556" height="1556">
|
||||
<title>microstrategy-m-icon-circle-svg</title>
|
||||
<style>
|
||||
.s0 { fill: #d9232e }
|
||||
.s1 { fill: #ffffff }
|
||||
</style>
|
||||
<path id="Layer" class="s0" d="m777.6 1555.9c-430 0-777.5-347.5-777.5-777.5 0-429.9 347.5-777.5 777.5-777.5 429.9 0 777.5 347.6 777.5 777.5 0 430-347.6 777.5-777.5 777.5z"/>
|
||||
<path id="Layer" fill-rule="evenodd" class="s1" d="m971.2 473.7l195.3 193.9v415.5h-195.3z"/>
|
||||
<path id="Layer" fill-rule="evenodd" class="s1" d="m679.9 473.7h195.3v609.4h-195.3z"/>
|
||||
<path id="Layer" fill-rule="evenodd" class="s1" d="m388.7 473.7h195.3v609.4h-195.3z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 674 B |
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB |
@ -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;
|
||||
|
||||
@ -56,7 +56,6 @@
|
||||
"aggregate": "एकूण",
|
||||
"airflow-config-plural": "एअरफ्लो संरचना",
|
||||
"alert": "सूचना",
|
||||
"alert-details": "Alert Details",
|
||||
"alert-lowercase": "सूचना",
|
||||
"alert-lowercase-plural": "सूचना",
|
||||
"alert-plural": "सूचना",
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user