django-showmequeries 0.1.0
Middleware that Prints statics of DB queries to the runserver console.
License: MIT
Keywords: django querycount queries database performance

Django ShowMeQueries
====================

|version| |license|

Maintained by `Platzi Team <https://platzi.com>`_

This project is a fork from `django-querycount <https://github.com/bradmontgomery/django-querycount>`_, this project
gives you a middleware that prints statics of DB query in Django's runserver
console output.

|screenshot_old|

|screenshot|


Installation
------------

    pip install django-showmequeries

Just add ``querycount.middleware.QueryCountMiddleware`` to your
``MIDDLEWARE``.

Notice that django-showmequeries is hard coded to work only in DEBUG mode set to true

Settings
--------

There are two possible settings for this app: The first defines threshold
values used to color output, while the second allows you customize requests
that will be ignored by the middleware.  The default settings are::

    QUERYCOUNT = {
        'THRESHOLDS': {
            'MEDIUM': 50,
            'HIGH': 200,
            'MIN_TIME_TO_LOG':0,
            'MIN_QUERY_COUNT_TO_LOG':0
        },
        'IGNORE_REQUEST_PATTERNS': [],
        'IGNORE_SQL_PATTERNS': [],
        'DISPLAY_DUPLICATES': None,
        'RESPONSE_HEADER': 'X-DjangoQueryCount-Count'
        'MAX_TIME_TO_CHECK_SLOWER': 0.1,
    }


The ``QUERYCOUNT['THRESHOLDS']`` settings will determine how many queries are
interpreted as high or medium (and the color-coded output). In previous versions
of this app, this settings was called ``QUERYCOUNT_THRESHOLDS`` and that setting
is still supported.

The ``QUERYCOUNT['IGNORE_REQUEST_PATTERNS']`` setting allows you to define a list of
regexp patterns that get applied to each request's path. If there is a match,
the middleware will not be applied to that request. For example, the following
setting would bypass the querycount middleware for all requests to the admin::

    QUERYCOUNT = {
        'IGNORE_REQUEST_PATTERNS': [r'^/admin/']
    }

The ``QUERYCOUNT['IGNORE_SQL_PATTERNS']`` setting allows you to define a list of
regexp patterns that ignored to statistic sql query count. For example, the following
setting would bypass the querycount middleware for django-silk sql query::

    QUERYCOUNT = {
        'IGNORE_SQL_PATTERNS': [r'silk_']
    }

The ``QUERYCOUNT['RESPONSE_HEADER']`` setting allows you to define a custom response
header that contains the total number of queries executed. To disable this header, 
the supply ``None`` as the value::

    QUERYCOUNT = {
        'RESPONSE_HEADER': None
    }

The ``QUERYCOUNT['DISPLAY_DUPLICATES']`` setting allows you
to control how the most common duplicate queries are displayed. If the setting
is ``None`` (the default), duplicate queries are not displayed. Otherwise, this
should be an integer. For example, the following setting would always print the
5 most duplicated queries::

    QUERYCOUNT = {
        'DISPLAY_DUPLICATES': 5,
    }


The ``QUERYCOUNT['MAX_TIME_TO_CHECK_SLOWER']`` setting allows you
to control what is a slower query. For example, the following setting would print the slower query,
if the query is slower than 50ms::

    QUERYCOUNT = {
        'MAX_TIME_TO_CHECK_SLOWER': 0.05,
    }


License
-------

This code is distributed under the terms of the MIT license.

Testing
-------

Run `python manage.py test querycount` to run the tests. Note that this will
modify your settings so that your project is in DEBUG mode for the duration
of the `querycount` tests.

(side-note: this project needs better tests; for the moment, there are only
smoke tests that set up the middleware and call two simple test views).


Contributing
------------

Bug fixes and new features are welcome! Fork this project and send a Pull Request
to have your work included. Be sure to add yourself to ``AUTHORS.rst``.


.. |version| image:: http://img.shields.io/pypi/v/django-querycount.svg?style=flat-square
    :alt: Current Release
    :target: https://pypi.python.org/pypi/django-querycount/

.. |license| image:: http://img.shields.io/pypi/l/django-querycount.svg?style=flat-square
    :alt: License
    :target: https://pypi.python.org/pypi/django-querycount/

.. |screenshot| image:: screenshot.png
    :alt: django-showmequeries in action

.. |screenshot_old| image:: screenshot_old.png
    :alt: django-querycount in action