Exemplo n.º 1
0
def log_if_incomplete_query_status(final_query_status,
                                   query_execution_id,
                                   error_message,
                                   session=None):
    if final_query_status in (
            QueryExecutionStatus.INITIALIZED,
            QueryExecutionStatus.DELIVERED,
            QueryExecutionStatus.RUNNING,
    ):
        if error_message is None:
            error_message = format_error_message(
                7500,
                f"Query stopped execution with status {final_query_status.name}. "
                +
                "Please rerun your query to see results, the previous run may have completed, or not. ",
            )
        LOG.error(error_message)

        qe_logic.create_query_execution_error(
            query_execution_id,
            error_type=None,
            error_message_extracted=None,
            error_message=error_message,
            session=session,
        )
        qe_logic.update_query_execution(
            query_execution_id,
            status=QueryExecutionStatus.ERROR,
            completed_at=datetime.datetime.utcnow(),
            session=session,
        )
Exemplo n.º 2
0
    def __init__(self, query_execution_id, celery_task, query, statement_ranges):
        self._query_execution_id = query_execution_id

        self._celery_task = celery_task
        self._task_id = celery_task.request.id

        self.statement_execution_ids = []

        self._query = query
        self._statement_ranges = statement_ranges

        # logging variable
        self._has_log = False
        self._log_cache = ""  # [statement_logs]
        self._meta_info = None  # statement_urls
        self._percent_complete = 0  # percent_complete
        self._statement_progress = {}

        # Connect to mysql db
        with DBSession() as session:
            query_execution = qe_logic.update_query_execution(
                self._query_execution_id, task_id=self._task_id, session=session
            ).to_dict()

        # Emit a event from socketio
        socketio.emit(
            "query_received",
            query_execution,
            namespace=QUERY_EXECUTION_NAMESPACE,
            room=self._query_execution_id,
        )
Exemplo n.º 3
0
    def on_cancel(self):
        utcnow = datetime.datetime.utcnow()
        if len(self.statement_execution_ids) > 0:
            statement_execution_id = self.statement_execution_ids[-1]
            upload_path, has_log = self._upload_log(statement_execution_id)
            qe_logic.update_statement_execution(
                statement_execution_id,
                status=StatementExecutionStatus.CANCEL,
                completed_at=utcnow,
                has_log=self._has_log,
                log_path=upload_path if has_log else None,
            )

        with DBSession() as session:
            query_execution = qe_logic.update_query_execution(
                self._query_execution_id,
                status=QueryExecutionStatus.CANCEL,
                completed_at=utcnow,
                session=session,
            ).to_dict()

        socketio.emit(
            "query_cancel",
            query_execution,
            namespace=QUERY_EXECUTION_NAMESPACE,
            room=self._query_execution_id,
        )
Exemplo n.º 4
0
    def on_query_end(self):
        with DBSession() as session:
            query_execution = qe_logic.update_query_execution(
                self._query_execution_id,
                status=QueryExecutionStatus.DONE,
                completed_at=datetime.datetime.utcnow(),
                session=session,
            ).to_dict()

        socketio.emit(
            "query_end",
            query_execution,
            namespace=QUERY_EXECUTION_NAMESPACE,
            room=self._query_execution_id,
        )
Exemplo n.º 5
0
    def on_query_start(self):
        with DBSession() as session:
            query_execution = qe_logic.update_query_execution(
                self._query_execution_id,
                status=QueryExecutionStatus.RUNNING,
                session=session,
            ).to_dict()

        query_execution = spread_dict(query_execution, {
            "total": len(self._statement_ranges),
        })
        socketio.emit(
            "query_start",
            query_execution,
            namespace=QUERY_EXECUTION_NAMESPACE,
            room=self._query_execution_id,
        )
        self.update_progress()
Exemplo n.º 6
0
    def on_exception(self, error_type: int, error_str: str, error_extracted: str):
        utcnow = datetime.datetime.utcnow()
        error_extracted = (
            error_extracted[:5000]
            if error_extracted is not None and len(error_extracted) > 5000
            else error_extracted
        )

        with DBSession() as session:
            if len(self.statement_execution_ids) > 0:
                statement_execution_id = self.statement_execution_ids[-1]
                upload_path, has_log = self._upload_log(statement_execution_id)

                qe_logic.update_statement_execution(
                    statement_execution_id,
                    status=StatementExecutionStatus.ERROR,
                    completed_at=utcnow,
                    has_log=self._has_log,
                    log_path=upload_path if has_log else None,
                    session=session,
                )

            qe_logic.create_query_execution_error(
                self._query_execution_id,
                error_type=error_type,
                error_message_extracted=error_extracted,
                error_message=error_str,
                session=session,
            )

            query_execution = qe_logic.update_query_execution(
                self._query_execution_id,
                status=QueryExecutionStatus.ERROR,
                completed_at=utcnow,
                session=session,
            ).to_dict()

            socketio.emit(
                "query_exception",
                query_execution,
                namespace=QUERY_EXECUTION_NAMESPACE,
                room=self._query_execution_id,
            )