def decorator(*args, **kwargs): try: return func(*args, **kwargs) except StructuredException, e: message = force_unicode(str(e)) if 'timed out' in message: raise OperationTimeout(e) else: raise QueryError(message)
def _sync_execute(self, sql, database): editor = make_notebook(name='Execute and watch', editor_type=self.engine, statement=sql, database=database, status='ready-execute', skip_historify=True # async=False ) request = MockRequest(self.user, self.cluster) mock_notebook = {} snippet = {'type': self.engine} response = editor.execute(request) if 'handle' in response: snippet['result'] = response if response['handle'].get('sync'): result = response['result'] else: timeout_sec = 20 # To move to Notebook API sleep_interval = 0.5 curr = time.time() end = curr + timeout_sec api = get_api(request, snippet) while curr <= end: status = api.check_status(mock_notebook, snippet) if status['status'] == 'available': result = api.fetch_result(mock_notebook, snippet, rows=10, start_over=True) api.close_statement(mock_notebook, snippet) break time.sleep(sleep_interval) curr = time.time() if curr > end: try: api.cancel_operation(snippet) except Exception as e: LOG.warning("Failed to cancel query: %s" % e) api.close_statement(mock_notebook, snippet) raise OperationTimeout(e) return result
def decorator(*args, **kwargs): try: return func(*args, **kwargs) except StructuredException as e: message = force_unicode(str(e)) if 'timed out' in message: raise OperationTimeout(e) else: raise QueryError(message) except QueryServerException as e: message = force_unicode(str(e)) if 'Invalid query handle' in message or 'Invalid OperationHandle' in message: raise QueryExpired(e) else: raise QueryError(message)
def decorator(*args, **kwargs): try: return func(*args, **kwargs) except StructuredException as e: message = force_unicode(str(e)) if 'timed out' in message: raise OperationTimeout(e) elif 'Connection refused' in message or 'Name or service not known' in message or 'Could not connect to any' in message: reset_ha() else: raise QueryError(message) except QueryServerException as e: message = force_unicode(str(e)) if 'Invalid query handle' in message or 'Invalid OperationHandle' in message: raise QueryExpired(e) else: raise QueryError(message)
def stats(self, dashboard, fields): database, table = self._get_database_table_names(dashboard) # TODO: check column stats to go faster sql = "SELECT MIN(`%(field)s`), MAX(`%(field)s`) FROM `%(database)s`.`%(table)s`" % { 'field': fields[0], 'database': database, 'table': table } editor = make_notebook(name='Execute and watch', editor_type=self.engine, statement=sql, database=database, status='ready-execute', skip_historify=True # async=False ) request = MockRequest(self.user) snippet = {'type': self.engine} response = editor.execute(request) if 'handle' in response: snippet['result'] = response if response['handle'].get('sync'): result = response['result'] else: timeout_sec = 20 # To move to Notebook API sleep_interval = 0.5 curr = time.time() end = curr + timeout_sec api = get_api(request, snippet) while curr <= end: status = api.check_status(dashboard, snippet) if status['status'] == 'available': result = api.fetch_result(dashboard, snippet, rows=10, start_over=True) api.close_statement(snippet) break time.sleep(sleep_interval) curr = time.time() if curr > end: try: api.cancel_operation(snippet) except Exception, e: LOG.warning("Failed to cancel query: %s" % e) api.close_statement(snippet) raise OperationTimeout(e) stats = list(result['data']) min_value, max_value = stats[0] if not isinstance(min_value, numbers.Number): min_value = min_value.replace(' ', 'T') + 'Z' max_value = max_value.replace(' ', 'T') + 'Z' return { 'stats': { 'stats_fields': { fields[0]: { 'min': min_value, 'max': max_value } } } }