mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-08 15:04:29 +00:00
metabase-test-connection-completed (#4671)
* metabase-test-connection-completed * debug-traceback-added
This commit is contained in:
parent
1e8682e1f1
commit
6cff9620b2
@ -10,7 +10,6 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
"""Metabase source module"""
|
"""Metabase source module"""
|
||||||
|
|
||||||
import json
|
|
||||||
import traceback
|
import traceback
|
||||||
import uuid
|
import uuid
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
@ -28,6 +27,9 @@ from metadata.generated.schema.entity.services.connections.metadata.openMetadata
|
|||||||
OpenMetadataConnection,
|
OpenMetadataConnection,
|
||||||
)
|
)
|
||||||
from metadata.generated.schema.entity.services.dashboardService import DashboardService
|
from metadata.generated.schema.entity.services.dashboardService import DashboardService
|
||||||
|
from metadata.generated.schema.metadataIngestion.dashboardServiceMetadataPipeline import (
|
||||||
|
DashboardServiceMetadataPipeline,
|
||||||
|
)
|
||||||
from metadata.generated.schema.metadataIngestion.workflow import (
|
from metadata.generated.schema.metadataIngestion.workflow import (
|
||||||
Source as WorkflowSource,
|
Source as WorkflowSource,
|
||||||
)
|
)
|
||||||
@ -38,6 +40,7 @@ from metadata.ingestion.api.source import InvalidSourceException, Source, Source
|
|||||||
from metadata.ingestion.models.table_metadata import Chart, Dashboard
|
from metadata.ingestion.models.table_metadata import Chart, Dashboard
|
||||||
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
from metadata.ingestion.ometa.ometa_api import OpenMetadata
|
||||||
from metadata.ingestion.source.sql_source import SQLSourceStatus
|
from metadata.ingestion.source.sql_source import SQLSourceStatus
|
||||||
|
from metadata.utils.connections import get_connection, test_connection
|
||||||
from metadata.utils.filters import filter_by_chart, filter_by_dashboard
|
from metadata.utils.filters import filter_by_chart, filter_by_dashboard
|
||||||
from metadata.utils.logger import ingestion_logger
|
from metadata.utils.logger import ingestion_logger
|
||||||
|
|
||||||
@ -74,7 +77,9 @@ class MetabaseSource(Source[Entity]):
|
|||||||
super().__init__()
|
super().__init__()
|
||||||
self.config = config
|
self.config = config
|
||||||
self.service_connection = self.config.serviceConnection.__root__.config
|
self.service_connection = self.config.serviceConnection.__root__.config
|
||||||
self.source_config = self.config.sourceConfig.config
|
self.source_config: DashboardServiceMetadataPipeline = (
|
||||||
|
self.config.sourceConfig.config
|
||||||
|
)
|
||||||
self.metadata_config = metadata_config
|
self.metadata_config = metadata_config
|
||||||
self.metadata = OpenMetadata(metadata_config)
|
self.metadata = OpenMetadata(metadata_config)
|
||||||
|
|
||||||
@ -82,16 +87,9 @@ class MetabaseSource(Source[Entity]):
|
|||||||
params = dict()
|
params = dict()
|
||||||
params["username"] = self.service_connection.username
|
params["username"] = self.service_connection.username
|
||||||
params["password"] = self.service_connection.password.get_secret_value()
|
params["password"] = self.service_connection.password.get_secret_value()
|
||||||
try:
|
|
||||||
resp = requests.post(
|
self.connection = get_connection(self.service_connection)
|
||||||
self.service_connection.hostPort + "/api/session/",
|
self.metabase_session = self.connection.client["metabase_session"]
|
||||||
data=json.dumps(params),
|
|
||||||
headers=HEADERS,
|
|
||||||
)
|
|
||||||
except Exception as err:
|
|
||||||
raise ConnectionError() from err
|
|
||||||
session_id = resp.json()["id"]
|
|
||||||
self.metabase_session = {"X-Metabase-Session": session_id}
|
|
||||||
|
|
||||||
self.dashboard_service = self.metadata.get_service_or_create(
|
self.dashboard_service = self.metadata.get_service_or_create(
|
||||||
entity=DashboardService, config=config
|
entity=DashboardService, config=config
|
||||||
|
|||||||
@ -40,3 +40,9 @@ class DeltaLakeClient:
|
|||||||
class KafkaClient:
|
class KafkaClient:
|
||||||
def __init__(self, client) -> None:
|
def __init__(self, client) -> None:
|
||||||
self.client = client
|
self.client = client
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MetabaseClient:
|
||||||
|
def __init__(self, client) -> None:
|
||||||
|
self.client = client
|
||||||
|
|||||||
@ -12,10 +12,13 @@
|
|||||||
"""
|
"""
|
||||||
Build and document all supported Engines
|
Build and document all supported Engines
|
||||||
"""
|
"""
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import traceback
|
||||||
from functools import singledispatch
|
from functools import singledispatch
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
import requests
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.engine.base import Engine
|
from sqlalchemy.engine.base import Engine
|
||||||
from sqlalchemy.exc import OperationalError
|
from sqlalchemy.exc import OperationalError
|
||||||
@ -25,6 +28,9 @@ from sqlalchemy.orm.session import Session
|
|||||||
from metadata.generated.schema.entity.services.connections.connectionBasicType import (
|
from metadata.generated.schema.entity.services.connections.connectionBasicType import (
|
||||||
ConnectionOptions,
|
ConnectionOptions,
|
||||||
)
|
)
|
||||||
|
from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import (
|
||||||
|
MetabaseConnection,
|
||||||
|
)
|
||||||
from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
|
from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
|
||||||
BigQueryConnection,
|
BigQueryConnection,
|
||||||
)
|
)
|
||||||
@ -51,6 +57,7 @@ from metadata.utils.connection_clients import (
|
|||||||
DynamoClient,
|
DynamoClient,
|
||||||
GlueClient,
|
GlueClient,
|
||||||
KafkaClient,
|
KafkaClient,
|
||||||
|
MetabaseClient,
|
||||||
SalesforceClient,
|
SalesforceClient,
|
||||||
)
|
)
|
||||||
from metadata.utils.credentials import set_google_credentials
|
from metadata.utils.credentials import set_google_credentials
|
||||||
@ -323,3 +330,42 @@ def _(connection: DeltaLakeClient) -> None:
|
|||||||
raise SourceConnectionException(
|
raise SourceConnectionException(
|
||||||
f"Unknown error connecting with {connection} - {err}."
|
f"Unknown error connecting with {connection} - {err}."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@get_connection.register
|
||||||
|
def _(connection: MetabaseConnection, verbose: bool = False):
|
||||||
|
try:
|
||||||
|
params = dict()
|
||||||
|
params["username"] = connection.username
|
||||||
|
params["password"] = connection.password.get_secret_value()
|
||||||
|
|
||||||
|
HEADERS = {"Content-Type": "application/json", "Accept": "*/*"}
|
||||||
|
|
||||||
|
resp = requests.post(
|
||||||
|
connection.hostPort + "/api/session/",
|
||||||
|
data=json.dumps(params),
|
||||||
|
headers=HEADERS,
|
||||||
|
)
|
||||||
|
|
||||||
|
session_id = resp.json()["id"]
|
||||||
|
metabase_session = {"X-Metabase-Session": session_id}
|
||||||
|
conn = {"connection": connection, "metabase_session": metabase_session}
|
||||||
|
return MetabaseClient(conn)
|
||||||
|
|
||||||
|
except Exception as err:
|
||||||
|
logger.error(f"Failed to connect with error : {err}")
|
||||||
|
logger.debug(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
|
@test_connection.register
|
||||||
|
def _(connection: MetabaseClient) -> None:
|
||||||
|
try:
|
||||||
|
requests.get(
|
||||||
|
connection.client["connection"].hostPort + "/api/dashboard",
|
||||||
|
headers=connection.client["metabase_session"],
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as err:
|
||||||
|
raise SourceConnectionException(
|
||||||
|
f"Unknown error connecting with {connection} - {err}."
|
||||||
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user