Django ProfileBoard
A production-ready Django performance profiler with live dashboard capabilities.
Features
- Live Dashboard: Real-time performance monitoring with WebSocket updates
- Production Safe: Works with DEBUG=False and includes security controls
- Comprehensive Profiling: Request timing, database queries, memory usage, and external API calls
- Query Analysis: N+1 detection, duplicate query identification, and performance insights
- Export Capabilities: CSV and JSON export for CI/CD integration
- Memory Profiling: Optional memray integration for deep memory analysis
Installation
Follow these steps to install and configure Django ProfileBoard.
1. Install the package
Install the package from PyPI:
pip install django-profileboard
2. Add to INSTALLED_APPS
Add 'django_profileboard' to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
# ... other apps
'django_profileboard',
]
3. Add Middleware
Add the RequestProfilerMiddleware to your MIDDLEWARE setting in settings.py. It should be placed at the top of the list.
MIDDLEWARE = [
'django_profileboard.middleware.RequestProfilerMiddleware',
# ... your other middleware
]
4. Enable the Profiler
Enable the profiler by setting PROFILEBOARD_ENABLED in settings.py. It's recommended to only enable it when needed, for example, by using an environment variable:
import os
PROFILEBOARD_ENABLED = os.environ.get('PROFILEBOARD_ENABLED', 'False') == 'True'
5. Configure ASGI for Live Dashboard
For live dashboard functionality, you need to configure your asgi.py to handle WebSocket connections. Wrap your existing application with the ProfileboardMiddleware:
# asgi.py
import os
from django.core.asgi import get_asgi_application
from django_profileboard.middleware import ProfileboardMiddleware
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
application = get_asgi_application()
application = ProfileboardMiddleware(application)
6. Include ProfileBoard URLs
Include the ProfileBoard URLs in your project's urls.py:
from django.urls import path, include
urlpatterns = [
# ... your other urls
path('__monitor__/', include('django_profileboard.urls')),
]
7. Run Migrations
Run migrations to create the necessary database tables:
python manage.py migrate
Usage
Once installed and configured, you can access the dashboard at the URL you configured (e.g., /__monitor__/).
Security
The dashboard provides detailed information about your application's performance. It is strongly recommended to restrict access to the dashboard in a production environment. You can do this by using a custom middleware to check for superuser status or a specific permission.
Here is an example of a simple middleware to restrict access to superusers:
# your_app/middleware.py
from django.http import HttpResponseForbidden
class SuperuserRequiredMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.path.startswith('/__monitor__/') and not request.user.is_superuser:
return HttpResponseForbidden()
return self.get_response(request)
Then, add this middleware to your MIDDLEWARE setting in settings.py:
MIDDLEWARE = [
# ... other middleware
'your_app.middleware.SuperuserRequiredMiddleware',
# ... other middleware
]