Exemplo n.º 1
0
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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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)