Connector: rename microstrategy connector (#18604)

This commit is contained in:
harshsoni2024 2024-11-28 18:50:42 +05:30 committed by GitHub
parent f99ed517bc
commit cb33f274fc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 409 additions and 157 deletions

View File

@ -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';

View File

@ -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';

View File

@ -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

View File

@ -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(

View File

@ -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,
)

View File

@ -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(

View File

@ -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

View File

@ -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)

View File

@ -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)

View 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)

View File

@ -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" /%}

View File

@ -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" /%}

View File

@ -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 %}

View File

@ -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" /%}

View File

@ -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": [
{

View File

@ -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"]
}

View File

@ -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"]
}

View File

@ -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"

View File

@ -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`.
$$

View File

@ -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`.
$$

View File

@ -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

View File

@ -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;

View File

@ -56,7 +56,6 @@
"aggregate": "एकूण",
"airflow-config-plural": "एअरफ्लो संरचना",
"alert": "सूचना",
"alert-details": "Alert Details",
"alert-lowercase": "सूचना",
"alert-lowercase-plural": "सूचना",
"alert-plural": "सूचना",

View File

@ -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;
}

View File

@ -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)) {