This is an automated email from the ASF dual-hosted git repository.
arivero pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 985c3d12a17 fix(screenshots): downgrade screenshot timeout logs from
ERROR to WARNING (#38130)
985c3d12a17 is described below
commit 985c3d12a175c3eac5c7a9c7462647122d36745b
Author: Amin Ghadersohi <[email protected]>
AuthorDate: Mon Mar 2 04:03:07 2026 -0500
fix(screenshots): downgrade screenshot timeout logs from ERROR to WARNING
(#38130)
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
superset/dashboards/api.py | 34 +++++++++++++++++++---------------
superset/utils/webdriver.py | 32 ++++++++++++++++++++------------
2 files changed, 39 insertions(+), 27 deletions(-)
diff --git a/superset/dashboards/api.py b/superset/dashboards/api.py
index bcb92231e56..58ecb69428a 100644
--- a/superset/dashboards/api.py
+++ b/superset/dashboards/api.py
@@ -912,9 +912,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@safe
@statsd_metrics
@event_logger.log_this_with_context(
- action=lambda self,
- *args,
- **kwargs: f"{self.__class__.__name__}.put_chart_customizations",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.put_chart_customizations"
+ ),
log_to_statsd=False,
)
@requires_json
@@ -1261,8 +1261,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@permission_name("export")
@statsd_metrics
@event_logger.log_this_with_context(
- action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
- f".export_as_example",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.export_as_example"
+ ),
log_to_statsd=False,
)
def export_as_example(self, pk: int) -> Response:
@@ -1352,8 +1353,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@safe
@statsd_metrics
@event_logger.log_this_with_context(
- action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
- f".cache_dashboard_screenshot",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.cache_dashboard_screenshot"
+ ),
log_to_statsd=False,
)
def cache_dashboard_screenshot(self, pk: int, **kwargs: Any) ->
WerkzeugResponse:
@@ -1670,7 +1672,7 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
except ScreenshotImageNotAvailableException:
return self.response_404()
except Exception as ex: # pylint: disable=broad-except
- logger.error(
+ logger.warning(
"Error retrieving thumbnail for dashboard %s: %s",
str(dashboard.id),
str(ex),
@@ -1689,8 +1691,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@statsd_metrics
@rison(get_fav_star_ids_schema)
@event_logger.log_this_with_context(
- action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
- f".favorite_status",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.favorite_status"
+ ),
log_to_statsd=False,
)
def favorite_status(self, **kwargs: Any) -> Response:
@@ -1783,8 +1786,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@safe
@statsd_metrics
@event_logger.log_this_with_context(
- action=lambda self, *args, **kwargs: f"{self.__class__.__name__}"
- f".remove_favorite",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.remove_favorite"
+ ),
log_to_statsd=False,
)
def remove_favorite(self, pk: int) -> Response:
@@ -2081,9 +2085,9 @@ class DashboardRestApi(CustomTagsOptimizationMixin,
BaseSupersetModelRestApi):
@permission_name("set_embedded")
@statsd_metrics
@event_logger.log_this_with_context(
- action=lambda self,
- *args,
- **kwargs: f"{self.__class__.__name__}.delete_embedded",
+ action=lambda self, *args, **kwargs: (
+ f"{self.__class__.__name__}.delete_embedded"
+ ),
log_to_statsd=False,
)
@with_dashboard
diff --git a/superset/utils/webdriver.py b/superset/utils/webdriver.py
index 3ffc07ddf68..98604548592 100644
--- a/superset/utils/webdriver.py
+++ b/superset/utils/webdriver.py
@@ -611,7 +611,9 @@ class WebDriverSelenium(WebDriverProxy):
EC.presence_of_element_located((By.CLASS_NAME,
element_name))
)
except TimeoutException:
- logger.exception("Selenium timed out requesting url %s", url)
+ logger.warning(
+ "Selenium timed out requesting url %s", url, exc_info=True
+ )
raise
try:
@@ -631,10 +633,11 @@ class WebDriverSelenium(WebDriverProxy):
(By.CLASS_NAME, "grid-container")
)
)
- except:
- logger.exception(
+ except Exception:
+ logger.warning(
"Selenium timed out waiting for dashboard to draw at
url %s",
url,
+ exc_info=True,
)
raise
@@ -647,8 +650,10 @@ class WebDriverSelenium(WebDriverProxy):
EC.presence_of_all_elements_located((By.CLASS_NAME,
"loading"))
)
except TimeoutException:
- logger.exception(
- "Selenium timed out waiting for charts to load at url %s",
url
+ logger.warning(
+ "Selenium timed out waiting for charts to load at url %s",
+ url,
+ exc_info=True,
)
raise
@@ -672,23 +677,26 @@ class WebDriverSelenium(WebDriverProxy):
)
img = element.screenshot_as_png
- except Exception as ex:
- logger.warning("exception in webdriver", exc_info=ex)
- raise
except TimeoutException:
- # raise again for the finally block, but handled above
+ # Already logged at WARNING in the inner handlers above
raise
except StaleElementReferenceException:
- logger.exception(
+ logger.warning(
"Selenium got a stale element while requesting url %s",
url,
+ exc_info=True,
)
raise
except WebDriverException:
- logger.exception(
- "Encountered an unexpected error when requesting url %s", url
+ logger.warning(
+ "Encountered an unexpected error when requesting url %s",
+ url,
+ exc_info=True,
)
raise
+ except Exception as ex:
+ logger.warning("exception in webdriver", exc_info=ex)
+ raise
finally:
self.destroy(driver, app.config["SCREENSHOT_SELENIUM_RETRIES"])
return img