Ejemplo n.º 1
0
    def validate(self) -> None:
        """
        Validate the query result as a Pandas DataFrame
        """
        sql_template = jinja_context.get_template_processor(
            database=self._report_schedule.database)
        rendered_sql = sql_template.process_template(self._report_schedule.sql)
        try:
            limited_rendered_sql = self._report_schedule.database.apply_limit_to_sql(
                rendered_sql, ALERT_SQL_LIMIT)
            df = self._report_schedule.database.get_df(limited_rendered_sql)
        except Exception as ex:
            raise AlertQueryError(message=str(ex))

        if df.empty and self._is_validator_not_null:
            self._result = None
            return
        if df.empty and self._is_validator_operator:
            self._result = 0.0
            return
        rows = df.to_records()
        if self._is_validator_not_null:
            self._validate_not_null(rows)
            return
        self._validate_operator(rows)
Ejemplo n.º 2
0
    def _execute_query(self) -> pd.DataFrame:
        """
        Executes the actual alert SQL query template

        :return: A pandas dataframe
        :raises AlertQueryError: SQL query is not valid
        :raises AlertQueryTimeout: The SQL query received a celery soft timeout
        """
        sql_template = jinja_context.get_template_processor(
            database=self._report_schedule.database)
        rendered_sql = sql_template.process_template(self._report_schedule.sql)
        try:
            limited_rendered_sql = self._report_schedule.database.apply_limit_to_sql(
                rendered_sql, ALERT_SQL_LIMIT)
            start = default_timer()
            df = self._report_schedule.database.get_df(limited_rendered_sql)
            stop = default_timer()
            logger.info(
                "Query for %s took %.2f ms",
                self._report_schedule.name,
                (stop - start) * 1000.0,
            )
            return df
        except SoftTimeLimitExceeded:
            raise AlertQueryTimeout()
        except Exception as ex:
            raise AlertQueryError(message=str(ex))
Ejemplo n.º 3
0
    def _execute_query(self) -> pd.DataFrame:
        """
        Executes the actual alert SQL query template

        :return: A pandas dataframe
        :raises AlertQueryError: SQL query is not valid
        :raises AlertQueryTimeout: The SQL query received a celery soft timeout
        """
        sql_template = jinja_context.get_template_processor(
            database=self._report_schedule.database)
        rendered_sql = sql_template.process_template(self._report_schedule.sql)
        try:
            limited_rendered_sql = self._report_schedule.database.apply_limit_to_sql(
                rendered_sql, ALERT_SQL_LIMIT)

            with override_user(
                    security_manager.find_user(
                        username=app.config["THUMBNAIL_SELENIUM_USER"])):
                start = default_timer()
                df = self._report_schedule.database.get_df(
                    sql=limited_rendered_sql)
                stop = default_timer()
                logger.info(
                    "Query for %s took %.2f ms",
                    self._report_schedule.name,
                    (stop - start) * 1000.0,
                )
                return df
        except SoftTimeLimitExceeded as ex:
            logger.warning(
                "A timeout occurred while executing the alert query: %s", ex)
            raise AlertQueryTimeout() from ex
        except Exception as ex:
            raise AlertQueryError(message=str(ex)) from ex
    def validate(self) -> None:
        """
        Validate the query result as a Pandas DataFrame
        """
        sql_template = jinja_context.get_template_processor(
            database=self._report_schedule.database)
        rendered_sql = sql_template.process_template(self._report_schedule.sql)
        try:
            df = self._report_schedule.database.get_df(rendered_sql)
        except Exception as ex:
            raise AlertQueryError(message=str(ex))

        if df.empty:
            return
        rows = df.to_records()
        if self._report_schedule.validator_type == ReportScheduleValidatorType.NOT_NULL:
            self._validate_not_null(rows)
            return
        self._validate_operator(rows)
Ejemplo n.º 5
0
    def _execute_query(self) -> pd.DataFrame:
        """
        Executes the actual alert SQL query template

        :return: A pandas dataframe
        :raises AlertQueryError: SQL query is not valid
        :raises AlertQueryTimeout: The SQL query received a celery soft timeout
        """
        sql_template = jinja_context.get_template_processor(
            database=self._report_schedule.database)
        rendered_sql = sql_template.process_template(self._report_schedule.sql)
        try:
            limited_rendered_sql = self._report_schedule.database.apply_limit_to_sql(
                rendered_sql, ALERT_SQL_LIMIT)
            return self._report_schedule.database.get_df(limited_rendered_sql)
        except SoftTimeLimitExceeded:
            raise AlertQueryTimeout()
        except Exception as ex:
            raise AlertQueryError(message=str(ex))