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, )
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, )
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, )
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, )
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()
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, )