django-doctor

Find and fix Django mishaps.


Licenses
OCLC-2.0/CC-BY-NC-2.5
Install
pip install django-doctor==2.3.0

Documentation

Django Doctor

django-doctor is a Django pluggable application for checking the operational status of a Django installation. It includes checking that caching and storage is correctly set up, that email is working, etc.

This is an early draft, so use it at your own risk.

Installation

Install django-doctor (available on PyPi):

pip install django-doctor

Add it to INSTALLED_APPS in your settings.py (so Django can locate templates):

INSTALLED_APPS += ['doctor']

And add it to your root URLconf:

urlpatterns = patterns('',
   url(r'^doctor/', include('doctor.urls')),
   ...
)

Settings

These are the available configurable settings, along with their default values:

Name Default Description
DOCTOR_BASE_TEMPLATE 'base.html' The template all the doctor templates should inherit from
DOCTOR_SERVICES 'doctor.services.cache.CacheServiceCheck',
'doctor.services.celery_check.CeleryServiceCheck',
'doctor.services.email.EmailServiceCheck',
'doctor.services.storage.StorageServiceCheck',
Paths to service check classes.
DOCTOR_STORAGE_CLASSES settings.DEFAULT_FILE_STORAGE,
settings.STATICFILES_STORAGE,
Paths to storage classes to check.

Services

We are working on making a pluggable structure for the service check, work in progress. Checks for cache, Celery, email and storages are currently included by default.

Tests

Run unit tests by running python setup.py test

Write and run health checks just as tests

How to run health checks with nose

Use nose's attrib plugin to select only tests with "is_healthcheck" attribute:

nosetests --all-modules --attr="is_healthcheck"

The "--all-modules" option is required because, by default, nose's will ignore tests in the "healthchecks" directory, because of the match pattern. See also "--match" option.

TODO

  • Set up the project tests so they can run standalone
  • Refine the service class approach
  • Include sending of test email in a view?
  • Implement more health checks:
    • Databases
    • Haystack?
    • Sentry?
    • request.is_secure() is properly set up