Skip to main content

The missing observability dashboard for Django.

Project description

Django Insider

PyPI version License Python Django

The missing observability dashboard for Django.

Django Insider is a comprehensive observability suite that lives entirely inside your application. It provides a zero-config React dashboard to track performance, debug crashes with interactive stack traces, and detect inefficient database queries—all without sending your data to external third-party services.


✨ Features

📊 The Dashboard

A built-in React SPA (Single Page Application) that gives you a real-time pulse of your application.

  • Velocity Charts: Visualize traffic spikes and error rates over the last 24 hours.
  • Health Cards: Instant metrics on Server Errors (500s), Client Errors (400s), and Average Latency.
  • Auto-Refresh: Data updates automatically every 30 seconds.

🕵️ The Investigation Room

A deep-dive debugging interface for crashes.

  • Interactive Stack Trace: See exactly which file, line, and function caused an error.
  • Context: View the user, URL, and timestamp associated with the crash.
  • Forensics: Analyze system logs and database query counts for that specific request.

🐢 N+1 Query Detector

Automatically identify performance bottlenecks.

  • Performance Risks: Flags endpoints executing excessive database queries.
  • Metrics: Displays Path, Method, and Average Duration for slow views.

🔄 Request Replay

  • Footprints: Detailed logs of every HTTP request (Headers, Body, Response).
  • cURL Generator: One-click button to generate a curl command to instantly reproduce any failed request on your local machine.

📦 Installation

1. Install the package via pip:

pip install django-insider

2. Add to INSTALLED_APPS in settings.py:

INSTALLED_APPS = [
    # ... other apps
    "rest_framework", # Required dependency
    "insider",        # <--- Add this
]

3. Register the Middleware:

Add the interceptor to your MIDDLEWARE list. It is recommended to place it near the top but after SecurityMiddleware.

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "insider.middleware.InsiderMiddleware",  # <--- Add this
    # ... other middleware
]

4. Configure URLs:

Add the Insider dashboard route to your project's urls.py:

from django.urls import path, include

urlpatterns = [
    # ...
    path("insider/", include("insider.urls")), # One-line setup
]

5. Run Migrations:

Create the necessary tables for logging errors and settings.

python manage.py migrate

6. Access the Dashboard:

Start your server and visit: http://localhost:8000/insider/


⚙️ Configuration

You can override the default behavior by adding an INSIDER_CONFIG dictionary to your settings.py.

INSIDER_CONFIG = {
    "CAPTURE_REQUEST_BODY": True,
    "SLOW_REQUEST_THRESHOLD": 500,
    "IGNORE_PATHS": ["/static/", "/health/"],
}

Traffic Filtering & Scope

Option Default Description
IGNORE_PATHS ['/static/', ...] List of URL prefixes to exclude from monitoring.
IGNORE_ADMIN True If True, ignores all traffic to the Django Admin panel.
CAPTURE_METHODS ['GET', ...] Whitelist of HTTP methods to record.

Data Capture & Privacy

Option Default Description
CAPTURE_REQUEST_BODY False Saves the raw JSON/Form body. Warning: Increases DB usage.
CAPTURE_RESPONSE False Saves the response body sent to the client. Keep False in production.
MASK_FIELDS ['password', ...] Keys in headers/body to redact (replace with ********).
CAPTURE_USER True Records the ID/Username of the logged-in user.

Performance & Notifications

Option Default Description
SLOW_REQUEST_THRESHOLD None Latency (in ms) to flag a request as "Slow".
COOLDOWN_HOURS 24 Hours to wait before sending a repeat notification for the same error.
DB_ALIAS 'default' The database connection name to use for logs.

🏗 Architecture

Insider operates on a Host-Guest architecture:

  • The Host: Your Django Project.
  • The Guest: The insider package.

It uses Celery to offload heavy logging tasks, ensuring your application's response time is not impacted by monitoring.

  1. Middleware: Intercepts the request/response lifecycle.
  2. Exception Hooks: Catches unhandled errors and generates "Incidences".
  3. Async Tasks: Ships data to the database asynchronously via Celery.
  4. Embedded Frontend: A compiled React app served directly by Django views.

🤝 Contributing

Contributions are welcome!

  1. Fork the repository.
  2. Create a feature branch (git checkout -b feature/AmazingFeature).
  3. Commit your changes (git commit -m 'Add some AmazingFeature').
  4. Push to the branch (git push origin feature/AmazingFeature).
  5. Open a Pull Request.

📄 License

Distributed under the MIT License. See LICENSE for more information.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_insider-0.1.8.tar.gz (141.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_insider-0.1.8-py3-none-any.whl (148.8 kB view details)

Uploaded Python 3

File details

Details for the file django_insider-0.1.8.tar.gz.

File metadata

  • Download URL: django_insider-0.1.8.tar.gz
  • Upload date:
  • Size: 141.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for django_insider-0.1.8.tar.gz
Algorithm Hash digest
SHA256 fcd05c48bd2cd7ebbb09ab5a23081178420d19c72b8a253de0291edf32b9f71c
MD5 29b2da8f4d31003e72e56144d341dd30
BLAKE2b-256 a137c87ffee8a7b29563234a2ca8b99898f3ce78ae99e07e0e237271b9b9547c

See more details on using hashes here.

File details

Details for the file django_insider-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: django_insider-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 148.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for django_insider-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 0df15e2ee3eb27996b2e3a51f24c4941ff4625a8f19628838ce2cd71cb28c3ff
MD5 ffe2beaeebae7afd154bf1d154970ff0
BLAKE2b-256 7da996a5474c65df5f53a333361bfa6e42a764258b2b9cfd98d075abaf1ca330

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page