Testing & Monitoring Commands
Comprehensive commands for testing services, monitoring endpoints, and validating integrations.
Endpoint Health Monitoring
check_endpoints
Production-ready endpoint health checker with automatic parameter resolution, JWT authentication, and multi-database awareness.
python manage.py check_endpoints [OPTIONS]Options:
--include-unnamed- Include unnamed URL patterns--timeout INTEGER- Request timeout in seconds (default: 5)--json- Output as JSON for automation--url TEXT- Check specific endpoint by URL name--no-auth- Disable automatic JWT authentication retry
Examples:
# Check all endpoints (auto-resolves parametrized URLs)
python manage.py check_endpoints
# JSON output for CI/CD
python manage.py check_endpoints --json
# Custom timeout
python manage.py check_endpoints --timeout 10
# Disable auto-auth
python manage.py check_endpoints --no-auth
# Check specific endpoint
python manage.py check_endpoints --url api_users_listFeatures:
- ✅ Automatic URL parameter resolution - resolves
<int:pk>,<uuid:id>,(?P<slug>[^/]+)with test values - ✅ JWT auto-authentication - creates test user and retries 401/403 endpoints automatically
- ✅ Rate limiting bypass - internal checks don’t count towards rate limits
- ✅ Multi-database aware - treats cross-database errors as warnings (expected for SQLite multi-db)
- ✅ Context-aware warnings - 404 for detail views = warning (no data), not error
- ✅ Response time tracking in milliseconds
- ✅ Status code visibility
- ✅ Error type classification (database, general)
- ✅ Color-coded console output
Console Output:
✅ Overall Status: HEALTHY
📊 Summary:
Total endpoints: 244
✅ Healthy: 154
⚠️ Warnings: 90
❌ Unhealthy: 0
❌ Errors: 0
⏭️ Skipped: 0
🔗 Endpoints:
✅ product-detail
Pattern: /api/shop/products/(?P<slug>[/.]+)/
Resolved: /api/shop/products/test-slug/
Status: healthy (200)
Response time: 12.35ms
🔐 Required JWT authentication
❌ ticket-list
URL: /api/support/tickets/
Status: warning (404)
Response time: 0.24ms
⚠️ Not Found - endpoint works but no data existsJSON Response:
{
"status": "healthy|degraded|unhealthy",
"timestamp": "2025-10-06T05:18:09.956705+00:00",
"total_endpoints": 244,
"healthy": 154,
"unhealthy": 0,
"warnings": 90,
"errors": 0,
"skipped": 0,
"endpoints": [
{
"url": "/api/products/test-slug/",
"url_pattern": "/api/products/(?P<slug>[^/]+)/",
"url_name": "product-detail",
"status": "healthy",
"status_code": 200,
"response_time_ms": 12.35,
"has_parameters": true,
"required_auth": true,
"error": null,
"error_type": null,
"reason": null
}
]
}REST API Endpoints:
The checker is also available as REST API for monitoring systems:
# JSON API
curl http://localhost:8000/cfg/endpoints/
# DRF Browsable API
curl http://localhost:8000/cfg/endpoints/drf/
# With query parameters
curl "http://localhost:8000/cfg/endpoints/?timeout=10&auto_auth=true"Query Parameters:
include_unnamed(default: false) - Include endpoints without URL namestimeout(default: 5) - Request timeout in secondsauto_auth(default: true) - Auto-retry with JWT on 401/403
Use Cases:
1. CI/CD Integration:
# GitHub Actions / GitLab CI
python manage.py check_endpoints --json | jq '.errors'
# Exit if errors > 0
test $(python manage.py check_endpoints --json | jq '.errors') -eq 02. Monitoring & Alerting:
import requests
def check_api_health():
resp = requests.get('http://localhost/cfg/endpoints/')
data = resp.json()
if data['errors'] > 0 or data['unhealthy'] > 0:
alert_team(f"API unhealthy: {data['errors']} errors, {data['unhealthy']} unhealthy")
return data3. Load Balancer Health Check:
# Nginx upstream health check
upstream django_api {
server backend1:8000;
check interval=30s fall=3 rise=2 timeout=5s type=http;
check_http_send "GET /cfg/endpoints/ HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx;
}4. Performance Tracking:
# Find slow endpoints
python manage.py check_endpoints --json | \
jq '.endpoints[] | select(.response_time_ms > 1000) | {url, response_time_ms}'
# Track over time
while true; do
python manage.py check_endpoints --json >> health-$(date +%Y%m%d).jsonl
sleep 300
done5. Prometheus Metrics:
# Export to Prometheus format
from prometheus_client import Gauge, generate_latest
healthy_gauge = Gauge('api_endpoints_healthy', 'Number of healthy endpoints')
unhealthy_gauge = Gauge('api_endpoints_unhealthy', 'Number of unhealthy endpoints')
def update_metrics():
data = requests.get('http://localhost/cfg/endpoints/').json()
healthy_gauge.set(data['healthy'])
unhealthy_gauge.set(data['unhealthy'])Email Testing
test_email
Test email configuration and delivery.
cli test-email --to [email protected] [OPTIONS]Options:
--to TEXT- Recipient email (required)--subject TEXT- Email subject (default: “Django-CFG Test Email”)--backend TEXT- Specific backend to test
Examples:
# Basic test
cli test-email --to [email protected]
# Custom subject
cli test-email --to [email protected] --subject "Configuration Test"
# Test specific backend
cli test-email --to [email protected] --backend sendgridTelegram Testing
test_telegram
Test Telegram bot configuration.
cli test-telegram --message "Hello!" [OPTIONS]Options:
--message TEXT- Test message to send (required)--chat-id TEXT- Target chat ID (optional)
Examples:
# Send test message
cli test-telegram --message "Hello from Django-CFG!"
# Send to specific chat
cli test-telegram --message "Deploy successful" --chat-id "-1001234567890"SMS & WhatsApp Testing
test_twilio
Test Twilio SMS and WhatsApp messaging.
python manage.py test_twilio --to "+1234567890" [OPTIONS]Options:
--to TEXT- Phone number (required, E.164 format)--message TEXT- Message to send--whatsapp- Send WhatsApp instead of SMS--content-sid TEXT- WhatsApp template SID
Examples:
# Test SMS
python manage.py test_twilio --to "+1234567890" --message "Test SMS"
# Test WhatsApp
python manage.py test_twilio --to "+1234567890" --message "Test" --whatsapp
# WhatsApp template
python manage.py test_twilio --to "+1234567890" --whatsapp --content-sid "HXxxxxx"Payment Provider Testing
test_providers
Test payment provider integrations.
python manage.py test_providers [OPTIONS]Options:
--provider TEXT- Specific provider to test
Examples:
# Test all providers
python manage.py test_providers
# Test specific provider
python manage.py test_providers --provider nowpaymentsNewsletter Testing
test_newsletter
Test newsletter sending functionality.
python manage.py test_newsletter --email [email protected] [OPTIONS]Options:
--email TEXT- Recipient email (required)--template TEXT- Template name to test
Examples:
# Send test newsletter
python manage.py test_newsletter --email [email protected]
# Test specific template
python manage.py test_newsletter --template welcome --email [email protected]OTP Authentication Testing
test_otp
Test OTP authentication system.
python manage.py test_otp [OPTIONS]Options:
--email TEXT- Email for OTP test--phone TEXT- Phone number for SMS OTP test
Examples:
# Test email OTP
python manage.py test_otp --email [email protected]
# Test SMS OTP
python manage.py test_otp --phone "+1234567890"Best Practices
1. Continuous Health Monitoring
# Add to cron - check every 5 minutes
*/5 * * * * cd /path/to/project && \
python manage.py check_endpoints --json > /var/log/health-check.json2. Pre-Deployment Validation
#!/bin/bash
# deploy-check.sh
echo "🔍 Checking endpoint health..."
python manage.py check_endpoints || exit 1
echo "📧 Testing email..."
cli test-email --to [email protected] || exit 1
echo "✅ All checks passed"3. Load Testing Integration
# Before load test - ensure all endpoints healthy
python manage.py check_endpoints
if [ $? -ne 0 ]; then
echo "❌ Fix unhealthy endpoints before load testing"
exit 1
fi
# Run load test
locust -f locustfile.py4. Monitoring Dashboard
Create a simple monitoring dashboard:
# monitor.py
import requests
import time
while True:
data = requests.get('http://localhost/cfg/endpoints/').json()
print(f"Status: {data['status']}")
print(f"Healthy: {data['healthy']}/{data['total_endpoints']}")
print(f"Warnings: {data['warnings']}")
print(f"Errors: {data['errors']}")
time.sleep(30)Related Commands
- Development - Development server commands
- Core Commands - Configuration validation
- Payments - Payment provider management
Keep your API healthy! 🚀