def deliver_slack_alert(alert_content: AlertContent, slack_channel: str) -> None: """Delivers a slack alert to the given slack channel""" subject = __("[Alert] %(label)s", label=alert_content.label) image = None if alert_content.image_data: slack_message = render_template( "slack/alert.txt", label=alert_content.label, sql=alert_content.sql, observation_value=alert_content.observation_value, validation_error_message=alert_content.validation_error_message, url=alert_content.image_data.url, alert_url=alert_content.alert_url, ) image = alert_content.image_data.image else: slack_message = render_template( "slack/alert_no_screenshot.txt", label=alert_content.label, sql=alert_content.sql, observation_value=alert_content.observation_value, validation_error_message=alert_content.validation_error_message, alert_url=alert_content.alert_url, ) deliver_slack_msg( slack_channel, subject, slack_message, image, )
def deliver_slack_alert(alert_content: AlertContent, slack_channel: str) -> None: subject = __("[Alert] %(label)s", label=alert_content.label) image = None if alert_content.image_data: slack_message = render_template( "slack/alert.txt", label=alert_content.label, sql=alert_content.sql, url=alert_content.image_data.url, alert_url=alert_content.alert_url, ) image = alert_content.image_data.image else: slack_message = render_template( "slack/alert_no_screenshot.txt", label=alert_content.label, sql=alert_content.sql, alert_url=alert_content.alert_url, ) deliver_slack_msg( slack_channel, subject, slack_message, image, )
def deliver_slice( # pylint: disable=too-many-arguments slice_id: int, recipients: Optional[str], slack_channel: Optional[str], delivery_type: EmailDeliveryType, email_format: SliceEmailReportFormat, deliver_as_group: bool, session: Session, ) -> None: """ Given a schedule, delivery the slice as an email report """ slc = session.query(Slice).filter_by(id=slice_id).one() if email_format == SliceEmailReportFormat.data: report_content = _get_slice_data(slc, delivery_type, session) elif email_format == SliceEmailReportFormat.visualization: report_content = _get_slice_visualization(slc, delivery_type, session) else: raise RuntimeError("Unknown email report format") subject = __( "%(prefix)s %(title)s", prefix=config["EMAIL_REPORTS_SUBJECT_PREFIX"], title=slc.slice_name, ) if recipients: _deliver_email( recipients, deliver_as_group, subject, report_content.body, report_content.data, report_content.images, ) if slack_channel: deliver_slack_msg( slack_channel, subject, report_content.slack_message, report_content.slack_attachment, )
def deliver_dashboard( dashboard_id: int, recipients: Optional[str], slack_channel: Optional[str], delivery_type: EmailDeliveryType, deliver_as_group: bool, ) -> None: """ Given a schedule, delivery the dashboard as an email report """ dashboard = db.session.query(Dashboard).filter_by(id=dashboard_id).one() dashboard_url = _get_url_path("Superset.dashboard", dashboard_id_or_slug=dashboard.id) dashboard_url_user_friendly = _get_url_path( "Superset.dashboard", user_friendly=True, dashboard_id_or_slug=dashboard.id) # Create a driver, fetch the page, wait for the page to render driver = create_webdriver() window = config["WEBDRIVER_WINDOW"]["dashboard"] driver.set_window_size(*window) driver.get(dashboard_url) time.sleep(EMAIL_PAGE_RENDER_WAIT) # Set up a function to retry once for the element. # This is buggy in certain selenium versions with firefox driver get_element = getattr(driver, "find_element_by_class_name") element = retry_call(get_element, fargs=["grid-container"], tries=2, delay=EMAIL_PAGE_RENDER_WAIT) try: screenshot = element.screenshot_as_png except WebDriverException: # Some webdrivers do not support screenshots for elements. # In such cases, take a screenshot of the entire page. screenshot = driver.screenshot() # pylint: disable=no-member finally: destroy_webdriver(driver) # Generate the email body and attachments report_content = _generate_report_content( delivery_type, screenshot, dashboard.dashboard_title, dashboard_url_user_friendly, ) subject = __( "%(prefix)s %(title)s", prefix=config["EMAIL_REPORTS_SUBJECT_PREFIX"], title=dashboard.dashboard_title, ) if recipients: _deliver_email( recipients, deliver_as_group, subject, report_content.body, report_content.data, report_content.images, ) if slack_channel: deliver_slack_msg( slack_channel, subject, report_content.slack_message, report_content.slack_attachment, )