Releases: astro-stack/django-orbit
v0.6.3: Plug-and-Play module system & Health Dashboard
[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 watchersorbit.get_installed_watchers()- List of active watcher namesorbit.get_failed_watchers()- Dict of failed watchers with error messages
-
Configuration:
- Added
WATCHER_FAIL_SILENTLYsetting (default: True)- When True, module failures are logged but app continues
- When False, failures are re-raised for debugging
- Added
-
Dashboard Updates:
- New "Health" button in top navigation bar
- Fixed missing icons for Transaction and Storage types in feed
- Transactions now use
git-branchicon (teal color) - Storage now uses
archiveicon (sky color)
v0.6.2 - Fix Critical Crash with ATOMIC_REQUESTS
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
- Fixed OrbitAtomicWrapper compatibility with decorator usage (e.g.
v0.6.1 - Bug Fixes for Migrations & Command Watcher
[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,storagetypes
- Added migration 0004 with
- 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
[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
- Intercepts
- Storage Watcher: Monitor file storage operations
- Tracks
save,open,delete,existsoperations - Works with
FileSystemStorage(default) - Supports
S3Boto3Storage(django-storages) - Records file path, backend name, and operation duration
- Tracks
- 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_TRANSACTIONSsetting (default: True) - Added
RECORD_STORAGEsetting (default: True)
Technical
OrbitAtomicWrapperclass for safe atomic block interception- Storage patching via
create_patched_base()factory to avoid closure issues - Added
tests/test_transactions.pyandtests/test_storage.py
v0.5.0 - Jobs, Redis, Gates & Stats Dashboard
🚀 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 📧⚡
🚀 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_datautility - Improved signal name detection for better developer context
Full Changelog: v0.3.0...v0.4.0
v0.3.0 - Reliability, Security & Data Management
🚀 Overview
This release makes Django Orbit production-ready by introducing critical features for Security, Data Management, and Usability.
✨ What's New
🔒 Dashboard Security
AUTH_CHECKSetting: 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.
OrbitProtectedViewMixin: 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_pruneCommand: 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
StreamingHttpResponsefor memory efficiency with large datasets. - Single Entry Export: "Export JSON" button in the detail panel header.
📝 Documentation Updates
- Rewrote
docs/dashboard.mdto cover all 9 entry types. - Added
docs/scheduling.mdfor scheduled cleanup. - Updated
docs/configuration.mdwithAUTH_CHECKusage examples. - Updated
docs/security.mdwith correct lambda examples. - Updated
README.mdroadmap and security sections.
✅ Full Changelog
Added
AUTH_CHECKconfiguration setting for dashboard access control.orbit/locked.htmltemplate for the "Access Denied" screen.OrbitProtectedViewmixin applied to all views.orbit_prunemanagement command with--hoursand--keep-importantflags.- 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.mdfor 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_requireddecorator 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
🚀 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
requestsorhttpx.
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_DUMPSand 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.0Full Changelog: v0.1.2...v0.2.0
v0.1.1 - Initial Public Release
🛰️ 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-orbitQuick Start
- Add 'orbit' to INSTALLED_APPS
- Add 'orbit.middleware.OrbitMiddleware' to MIDDLEWARE
- Add path('orbit/', include('orbit.urls')) to urls.py
- Visit /orbit/ 🚀