class SqlQueryCountMonitor: def __init__( self, context, max_queries=DEFAULT_MAX_QUERIES, max_dupes=DEFAULT_MAX_DUPES, logger=None, **kwargs, ): self.context = context self.max_queries = max_queries self.max_dupes = max_dupes self.logger = logger or logging.getLogger(__name__) self.state = State() self._cursor = get_cursor_wrapper(self.state) self._patcher = PatchContext("django.db.backends.BaseDatabaseWrapper.cursor", self._cursor) def __enter__(self): self.start() return self def __exit__(self, *args, **kwargs): self.stop() def start(self): self._patcher.patch() def stop(self): self._patcher.unpatch() num_dupes = self.state.count_dupes() if self.state.count > self.max_queries: self.log_max_queries(num_dupes) if num_dupes > self.max_dupes: self.log_max_dupes(num_dupes) def log_max_dupes(self, num_dupes): state = self.state context = {"stack": True, "data": {"query_count": state.count, "num_dupes": num_dupes}} self.logger.warning( "%d duplicate queries executed in %s", num_dupes, self.context, extra=context ) def log_max_queries(self, num_dupes): state = self.state context = {"stack": True, "data": {"query_count": state.count, "num_dupes": num_dupes}} self.logger.warning("%d queries executed in %s", state.count, self.context, extra=context)
def __init__(self, context, max_queries=DEFAULT_MAX_QUERIES, max_dupes=DEFAULT_MAX_DUPES, logger=None, **kwargs): self.context = context self.max_queries = max_queries self.max_dupes = max_dupes self.logger = logger or logging.getLogger(__name__) self.state = State() self._cursor = get_cursor_wrapper(self.state) self._patcher = PatchContext('django.db.backends.BaseDatabaseWrapper.cursor', self._cursor)
class SqlQueryCountMonitor(object): def __init__(self, context, max_queries=DEFAULT_MAX_QUERIES, max_dupes=DEFAULT_MAX_DUPES, logger=None, **kwargs): self.context = context self.max_queries = max_queries self.max_dupes = max_dupes self.logger = logger or logging.getLogger(__name__) self.state = State() self._cursor = get_cursor_wrapper(self.state) self._patcher = PatchContext("django.db.backends.BaseDatabaseWrapper.cursor", self._cursor) def __enter__(self): self.start() return self def __exit__(self, *args, **kwargs): self.stop() def start(self): self._patcher.patch() def stop(self): self._patcher.unpatch() num_dupes = self.state.count_dupes() if self.state.count > self.max_queries: self.log_max_queries(num_dupes) if num_dupes > self.max_dupes: self.log_max_dupes(num_dupes) def log_max_dupes(self, num_dupes): state = self.state context = {"stack": True, "data": {"query_count": state.count, "num_dupes": num_dupes}} self.logger.warning("%d duplicate queries executed in %s", num_dupes, self.context, extra=context) def log_max_queries(self, num_dupes): state = self.state context = {"stack": True, "data": {"query_count": state.count, "num_dupes": num_dupes}} self.logger.warning("%d queries executed in %s", state.count, self.context, extra=context)
def __init__(self, context, max_queries=DEFAULT_MAX_QUERIES, max_dupes=DEFAULT_MAX_DUPES, logger=None, **kwargs): self.context = context self.max_queries = max_queries self.max_dupes = max_dupes self.logger = logger or logging.getLogger(__name__) self.state = State() self._cursor = get_cursor_wrapper(self.state) self._patcher = PatchContext("django.db.backends.BaseDatabaseWrapper.cursor", self._cursor)