mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-29 17:49:14 +00:00
Added exception handling in dashboard sources (#10573)
* added exception handling in dashboard * updated process owner logic * Added redash source for fixes
This commit is contained in:
parent
47585e035a
commit
682626ffe8
@ -274,10 +274,36 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
||||
entity=DashboardService, config=config
|
||||
)
|
||||
|
||||
def process_owner(self, dashboard_details: dict): # pylint: disable=unused-argument
|
||||
def process_owner(self, dashboard_details):
|
||||
try:
|
||||
owner = self.get_owner_details( # pylint: disable=assignment-from-none
|
||||
dashboard_details=dashboard_details
|
||||
)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
entity=Dashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
owner=owner,
|
||||
force=True,
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.debug(traceback.format_exc())
|
||||
logger.warning(f"Error processing owner for {dashboard_details}: {exc}")
|
||||
|
||||
def get_owner_details( # pylint: disable=useless-return
|
||||
self, dashboard_details # pylint: disable=unused-argument
|
||||
) -> Optional[EntityReference]:
|
||||
"""Get dashboard owner
|
||||
|
||||
Args:
|
||||
dashboard_details:
|
||||
Returns:
|
||||
Optional[EntityReference]
|
||||
"""
|
||||
logger.debug(
|
||||
f"Processing ownership is not supported for {self.service_connection.type.name}"
|
||||
)
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def _get_add_lineage_request(
|
||||
|
||||
@ -27,7 +27,6 @@ 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.data.dashboard import Dashboard
|
||||
from metadata.generated.schema.entity.services.connections.dashboard.domoDashboardConnection import (
|
||||
DomoDashboardConnection,
|
||||
)
|
||||
@ -95,8 +94,10 @@ class DomodashboardSource(DashboardServiceSource):
|
||||
def get_dashboard_details(self, dashboard: DomoDashboardDetails) -> dict:
|
||||
return dashboard
|
||||
|
||||
def get_owner_details(self, owners: List[DomoOwner]) -> Optional[EntityReference]:
|
||||
for owner in owners:
|
||||
def get_owner_details(
|
||||
self, dashboard_details: DomoDashboardDetails
|
||||
) -> Optional[EntityReference]:
|
||||
for owner in dashboard_details.owners:
|
||||
try:
|
||||
owner_details = self.client.users_get(owner.id)
|
||||
if owner_details.get("email"):
|
||||
@ -112,18 +113,6 @@ class DomodashboardSource(DashboardServiceSource):
|
||||
)
|
||||
return None
|
||||
|
||||
def process_owner(
|
||||
self, dashboard_details: DomoDashboardDetails
|
||||
) -> Optional[Dashboard]:
|
||||
owner = self.get_owner_details(owners=dashboard_details.owners)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
entity=Dashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
owner=owner,
|
||||
force=True,
|
||||
)
|
||||
|
||||
def yield_dashboard(
|
||||
self, dashboard_details: DomoDashboardDetails
|
||||
) -> Iterable[CreateDashboardRequest]:
|
||||
|
||||
@ -182,18 +182,6 @@ class LookerSource(DashboardServiceSource):
|
||||
|
||||
return self._owners_ref.get(dashboard_details.user_id)
|
||||
|
||||
def process_owner(
|
||||
self, dashboard_details: LookerDashboard
|
||||
) -> Optional[MetadataDashboard]:
|
||||
owner = self.get_owner_details(dashboard_details=dashboard_details)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
entity=MetadataDashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
owner=owner,
|
||||
force=True,
|
||||
)
|
||||
|
||||
def yield_dashboard(
|
||||
self, dashboard_details: LookerDashboard
|
||||
) -> CreateDashboardRequest:
|
||||
|
||||
@ -91,7 +91,13 @@ class PowerbiSource(DashboardServiceSource):
|
||||
response = self.client.fetch_workspace_scan_result(
|
||||
scan_id=workspace_scan_id
|
||||
)
|
||||
self.workspace_data.extend(response.get("workspaces"))
|
||||
self.workspace_data.extend(
|
||||
[
|
||||
active_workspace
|
||||
for active_workspace in response.get("workspaces")
|
||||
if active_workspace.get("state") == "Active"
|
||||
]
|
||||
)
|
||||
else:
|
||||
logger.error("Error in fetching dashboards and charts")
|
||||
count += 1
|
||||
|
||||
@ -173,20 +173,6 @@ class RedashSource(DashboardServiceSource):
|
||||
return EntityReference(id=user.id.__root__, type="user")
|
||||
return None
|
||||
|
||||
def process_owner(self, dashboard_details) -> Optional[LineageDashboard]:
|
||||
try:
|
||||
owner = self.get_owner_details(dashboard_details=dashboard_details)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
entity=LineageDashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
owner=owner,
|
||||
force=True,
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.debug(traceback.format_exc())
|
||||
logger.warning(f"Error processing owner for {dashboard_details}: {exc}")
|
||||
|
||||
def get_dashboard_url(self, dashboard_details: dict) -> str:
|
||||
if version.parse(self.service_connection.redashVersion) > version.parse(
|
||||
INCOMPATIBLE_REDASH_VERSION
|
||||
|
||||
@ -88,16 +88,6 @@ class SupersetSourceMixin(DashboardServiceSource):
|
||||
|
||||
return None
|
||||
|
||||
def process_owner(self, dashboard_details: dict) -> Optional[Lineage_Dashboard]:
|
||||
owner = self.get_owner_details(dashboard_details=dashboard_details)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
self.metadata,
|
||||
entity=Lineage_Dashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
force=True,
|
||||
)
|
||||
|
||||
def get_owner_details(self, dashboard_details: dict) -> EntityReference:
|
||||
for owner in dashboard_details.get("owners", []):
|
||||
user = self._get_user_by_email(owner["email"])
|
||||
|
||||
@ -251,18 +251,6 @@ class TableauSource(DashboardServiceSource):
|
||||
return EntityReference(id=user.id.__root__, type="user")
|
||||
return None
|
||||
|
||||
def process_owner(
|
||||
self, dashboard_details: TableauDashboard
|
||||
) -> Optional[LineageDashboard]:
|
||||
owner = self.get_owner_details(dashboard_details=dashboard_details)
|
||||
if owner and self.source_config.overrideOwner:
|
||||
self.metadata.patch_owner(
|
||||
entity=LineageDashboard,
|
||||
entity_id=self.context.dashboard.id,
|
||||
owner=owner,
|
||||
force=True,
|
||||
)
|
||||
|
||||
def yield_tag(self, *_, **__) -> OMetaTagAndClassification:
|
||||
"""
|
||||
Fetch Dashboard Tags
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user