redash-test-connection-completed (#4672)

* redash-test-connection-completed

* code-smell-removed

* docstring-added-for-non-sqlalchemy-service-client
This commit is contained in:
codingwithabhi 2022-05-04 19:55:46 +05:30 committed by GitHub
parent 6cff9620b2
commit 6bd587be8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 5 deletions

View File

@ -24,6 +24,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,
) )
@ -33,6 +36,7 @@ from metadata.ingestion.api.source import InvalidSourceException, Source, Source
from metadata.ingestion.models.table_metadata import Chart as ModelChart from metadata.ingestion.models.table_metadata import Chart as ModelChart
from metadata.ingestion.models.table_metadata import Dashboard from metadata.ingestion.models.table_metadata import Dashboard
from metadata.ingestion.ometa.ometa_api import OpenMetadata from metadata.ingestion.ometa.ometa_api import OpenMetadata
from metadata.utils.connections import get_connection, test_connection
@dataclass @dataclass
@ -63,12 +67,14 @@ class RedashSource(Source[Entity]):
self.config = config self.config = config
self.metadata_config = metadata_config self.metadata_config = metadata_config
self.metadata = OpenMetadata(metadata_config) self.metadata = OpenMetadata(metadata_config)
self.source_config: DashboardServiceMetadataPipeline = (
self.config.sourceConfig.config
)
self.connection_config = self.config.serviceConnection.__root__.config self.connection_config = self.config.serviceConnection.__root__.config
self.status = RedashSourceStatus() self.status = RedashSourceStatus()
self.client = Redash( self.connection = get_connection(self.connection_config)
self.connection_config.hostPort, self.connection_config.apiKey self.client = self.connection.client
)
self.service = self.metadata.get_service_or_create( self.service = self.metadata.get_service_or_create(
entity=DashboardService, config=config entity=DashboardService, config=config
) )

View File

@ -11,6 +11,12 @@
from dataclasses import dataclass from dataclasses import dataclass
"""
Creating client for non-sqlalchemy package is neccessary,
Importing a Class directly in connection.py will break the ingestion,
if non-sqlalchemy package is not installed
"""
@dataclass @dataclass
class GlueClient: class GlueClient:
@ -46,3 +52,9 @@ class KafkaClient:
class MetabaseClient: class MetabaseClient:
def __init__(self, client) -> None: def __init__(self, client) -> None:
self.client = client self.client = client
@dataclass
class RedashClient:
def __init__(self, client) -> None:
self.client = client

View File

@ -31,6 +31,9 @@ from metadata.generated.schema.entity.services.connections.connectionBasicType i
from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import ( from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import (
MetabaseConnection, MetabaseConnection,
) )
from metadata.generated.schema.entity.services.connections.dashboard.redashConnection import (
RedashConnection,
)
from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import ( from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import (
BigQueryConnection, BigQueryConnection,
) )
@ -58,6 +61,7 @@ from metadata.utils.connection_clients import (
GlueClient, GlueClient,
KafkaClient, KafkaClient,
MetabaseClient, MetabaseClient,
RedashClient,
SalesforceClient, SalesforceClient,
) )
from metadata.utils.credentials import set_google_credentials from metadata.utils.credentials import set_google_credentials
@ -364,7 +368,31 @@ def _(connection: MetabaseClient) -> None:
connection.client["connection"].hostPort + "/api/dashboard", connection.client["connection"].hostPort + "/api/dashboard",
headers=connection.client["metabase_session"], headers=connection.client["metabase_session"],
) )
except Exception as err:
raise SourceConnectionException(
f"Unknown error connecting with {connection} - {err}."
)
@get_connection.register
def _(connection: RedashConnection, verbose: bool = False):
from redash_toolbelt import Redash
try:
redash = Redash(connection.hostPort, connection.apiKey)
redash_client = RedashClient(redash)
return redash_client
except Exception as err:
logger.error(f"Failed to connect with error : {err}")
logger.error(err)
@test_connection.register
def _(connection: RedashClient) -> None:
try:
connection.client.dashboards()
except Exception as err: except Exception as err:
raise SourceConnectionException( raise SourceConnectionException(
f"Unknown error connecting with {connection} - {err}." f"Unknown error connecting with {connection} - {err}."