Skip to content

Releases: astro-stack/django-orbit

v0.6.3: Plug-and-Play module system & Health Dashboard

25 Jan 21:14

Choose a tag to compare

[0.6.3] - 2026-01-25

Added

  • Plug-and-Play Module System: Each watcher/module now operates independently

    • If one module fails to initialize, others continue working normally
    • Failed modules are logged but don't crash the application
    • Module status is tracked and available for diagnostics
  • Health Dashboard (/orbit/health/): New diagnostics page showing module status

    • Visual indicators: Green (healthy), Red (failed), Yellow (disabled)
    • Expandable error details with full traceback
    • Summary cards for total/healthy/failed/disabled counts
    • Instructions for fixing failed modules
  • New API Functions:

    • orbit.get_watcher_status() - Get status of all watchers
    • orbit.get_installed_watchers() - List of active watcher names
    • orbit.get_failed_watchers() - Dict of failed watchers with error messages
  • Configuration:

    • Added WATCHER_FAIL_SILENTLY setting (default: True)
      • When True, module failures are logged but app continues
      • When False, failures are re-raised for debugging
  • Dashboard Updates:

    • New "Health" button in top navigation bar
    • Fixed missing icons for Transaction and Storage types in feed
    • Transactions now use git-branch icon (teal color)
    • Storage now uses archive icon (sky color)

v0.6.2 - Fix Critical Crash with ATOMIC_REQUESTS

23 Jan 15:03

Choose a tag to compare

Fixed

  • Critical crash with ATOMIC_REQUESTS=True (Issue #5)
    • Fixed OrbitAtomicWrapper compatibility with decorator usage (e.g. @transaction.atomic).
    • Added thread safety for nested atomic blocks and concurrent requests.
      Full Changelog: v0.6.1...v0.6.2

v0.6.1 - Bug Fixes for Migrations & Command Watcher

22 Jan 23:16

Choose a tag to compare

[0.6.1] - 2026-01-22

Fixed

  • Missing migration for entry types added in v0.4.0-v0.6.0 (Issue #3)
    • Added migration 0004 with mail, signal, redis, gate, transaction, storage types
  • Command watcher breaking interactive commands like collectstatic (Issue #4)
    • Removed stdout/stderr redirection that prevented user input
    • Commands now execute normally while still being recorded

v0.6.0 - Transaction & Storage Monitoring

22 Jan 23:03

Choose a tag to compare

[0.6.0] - 2025-01-22

Added

  • Transaction Watcher: Track database transaction blocks
    • Intercepts transaction.atomic() context managers
    • Records commit/rollback status
    • Captures transaction duration in milliseconds
    • Logs exceptions that trigger rollbacks
  • Storage Watcher: Monitor file storage operations
    • Tracks save, open, delete, exists operations
    • Works with FileSystemStorage (default)
    • Supports S3Boto3Storage (django-storages)
    • Records file path, backend name, and operation duration
  • Dashboard Updates:
    • New "Transactions" filter with teal icon (layers)
    • New "Storage" filter with sky-blue icon (archive)
    • Summary formatting for transaction status (✓/✗ icons)

Configuration

  • Added RECORD_TRANSACTIONS setting (default: True)
  • Added RECORD_STORAGE setting (default: True)

Technical

  • OrbitAtomicWrapper class for safe atomic block interception
  • Storage patching via create_patched_base() factory to avoid closure issues
  • Added tests/test_transactions.py and tests/test_storage.py

v0.5.0 - Jobs, Redis, Gates & Stats Dashboard

19 Dec 12:05

Choose a tag to compare

🚀 What's New in v0.5.0

Background Jobs Watcher

Track background task executions across multiple backends:

  • Celery - Via signals (automatic)
  • Django-Q - Via signals (automatic)
  • RQ (Redis Queue) - Worker patching (automatic)
  • APScheduler - Event listeners
  • django-celery-beat - Periodic task scheduling

Redis Watcher

Monitor Redis operations in real-time:

  • GET, SET, DEL, HGET, HSET, LPUSH, RPUSH, and more
  • Key, duration, and result size tracking

Gates/Permissions Watcher

Audit authorization checks:

  • Track permission checks via Django's ModelBackend
  • See granted vs denied with user context

Stats Dashboard (/orbit/stats/)

New dedicated analytics page with:

  • Apdex Score - User satisfaction index
  • Response Time Percentiles - P50, P75, P95, P99
  • Interactive Charts - ApexCharts for throughput, error rate, response time
  • Database Analytics - Slow queries, N+1 detection
  • Cache Metrics - Hit rate with sparkline trends
  • Jobs & Permissions - Success rates and top denied permissions
  • Time Range Filters - 1h, 6h, 24h, 7d

Dashboard Improvements

  • Scrollable sidebar for many event types
  • Stats panel only visible for "All Events"
  • Loading spinner in detail panel
  • Clickable duplicate queries for N+1 debugging

Full Changelog

See CHANGELOG.md

v0.4.0 - Mail & Signals Watchers 📧⚡

18 Dec 05:10

Choose a tag to compare

🚀 What's New

📧 Mail Watcher

Capture all outgoing emails sent via django.core.mail:

  • Subject, from, to, cc, bcc
  • Body text and HTML alternatives
  • Attachments metadata

⚡ Signals Watcher

Track Django signal dispatches in real-time:

  • Signal name with full module path
  • Sender information
  • Receivers count
  • Signal kwargs

🎨 Dashboard Updates

  • New "Mail" filter with fuchsia icon
  • New "Signals" filter with yellow icon
  • Entry detail panel support for new types

⚙️ Configuration

ORBIT_CONFIG = {
    'RECORD_MAIL': True,
    'RECORD_SIGNALS': True,
    'IGNORE_SIGNALS': [
        'django.db.models.signals.pre_init',
        'django.db.models.signals.post_init',
    ],
}

🐛 Fixes

  • Added missing filter_sensitive_data utility
  • Improved signal name detection for better developer context

Full Changelog: v0.3.0...v0.4.0

v0.3.0 - Reliability, Security & Data Management

17 Dec 17:42

Choose a tag to compare

🚀 Overview

This release makes Django Orbit production-ready by introducing critical features for Security, Data Management, and Usability.


✨ What's New

🔒 Dashboard Security

  • AUTH_CHECK Setting: New configuration option to restrict dashboard access using a callable (e.g., lambda request: request.user.is_staff).
  • Unlock Screen: When access is denied, users see a styled "Access Denied" page with a login link instead of a generic 403 error.
  • OrbitProtectedView Mixin: All Orbit views now inherit from this mixin to enforce security rules automatically.
# settings.py
ORBIT_CONFIG = {
    'AUTH_CHECK': lambda request: request.user.is_staff,
}

🧹 Data Management

  • orbit_prune Command: New management command to clean up old telemetry data.
    • --hours N: Keep only the last N hours of data (default: 24).
    • --keep-important: Preserve Exceptions and Error Logs regardless of age.
python manage.py orbit_prune --hours 168 --keep-important
  • Scheduling Documentation: New guide (docs/scheduling.md) with examples for automating cleanup via Crontab or Celery Beat.

🔍 Search & Filtering

  • Dashboard Search Bar: New full-width search input in the header.
  • UUID Lookup: Paste an Entry ID to jump directly to it.
  • Content Search: Full-text search across JSON payloads.

📤 Export Functionality

  • Export All: New sidebar button to stream all currently filtered entries as a JSON array. Uses StreamingHttpResponse for memory efficiency with large datasets.
  • Single Entry Export: "Export JSON" button in the detail panel header.

📝 Documentation Updates

  • Rewrote docs/dashboard.md to cover all 9 entry types.
  • Added docs/scheduling.md for scheduled cleanup.
  • Updated docs/configuration.md with AUTH_CHECK usage examples.
  • Updated docs/security.md with correct lambda examples.
  • Updated README.md roadmap and security sections.

✅ Full Changelog

Added

  • AUTH_CHECK configuration setting for dashboard access control.
  • orbit/locked.html template for the "Access Denied" screen.
  • OrbitProtectedView mixin applied to all views.
  • orbit_prune management command with --hours and --keep-important flags.
  • Dashboard search bar with UUID and content search.
  • "Export Filtered" button in sidebar (streaming JSON export).
  • "Export JSON" button in detail panel (single entry).
  • docs/scheduling.md for automated cleanup guidance.

Changed

  • All views now inherit from OrbitProtectedView.
  • Search bar is now full-width in the header.
  • Documentation overhauled for v0.3.0 features.

Fixed

  • Removed incorrect staff_member_required decorator examples from documentation.
  • Fixed duplicate lines in README roadmap.
  • Fixed typo in CHANGELOG.

🙏 Contributors

Thanks to everyone who contributed feedback and suggestions for this release!


Full Docs: https://astro-stack.github.io/django-orbit

v0.2.0: Watchers Phase 1 & Core Improvements

17 Dec 03:27

Choose a tag to compare

🚀 Features

New Watchers (Phase 1)

  • Commands Watcher: Track Django management commands (manage.py) execution, output, and exit codes.
  • Cache Watcher: Monitor cache operations (get, set, delete) with hit/miss tracking.
  • Models Watcher: Audit model lifecycle events (save, delete) including field diffs.
  • HTTP Client: Capture outgoing API requests made via requests or httpx.

Core Improvements

  • New orbit.dump() helper: Inspect variables directly in the dashboard (Laravel Telescope style).
  • Pagination: Full support for paginated feeds (25 entries/page) with improved UI.
  • Dashboard UI: Added dedicated icons and colors for all new entry types.
  • Configuration: Added RECORD_DUMPS and specific settings for all new watchers.

🐛 Bug Fixes

  • Fixed HTMX processing for dynamically loaded content.
  • Fixed pagination state loss during auto-refresh.
  • Fixed "Load More" button issues by switching to standard pagination.
  • improved cache hit/miss detection logic.

📦 Installation

pip install django-orbit==0.2.0

Full Changelog: v0.1.2...v0.2.0

v0.1.1 - Initial Public Release

16 Dec 04:19
b15a31b

Choose a tag to compare

🛰️ Django Orbit v0.1.1

First public release of Django Orbit - Satellite Observability for Django.

Features

  • 🌐 Request tracking with full headers and body
  • 🗄️ SQL query recording with N+1 detection
  • 📝 Log aggregation from Python logging
  • 🚨 Exception capture with full tracebacks
  • ⏰ Background job monitoring
  • 🎨 Beautiful space-themed dashboard

Installation

pip install django-orbit

Quick Start

  1. Add 'orbit' to INSTALLED_APPS
  2. Add 'orbit.middleware.OrbitMiddleware' to MIDDLEWARE
  3. Add path('orbit/', include('orbit.urls')) to urls.py
  4. Visit /orbit/ 🚀

Links