Scheduler Module Specification
1. Purpose & Overview
The module handles asynchronous background task dispatching, periodic Celery Beat cron jobs, and Token Bucket rate-limiting enforcement.
scheduler2. Responsibilities
- Execute periodic task and
scheduler_heartbeat.cleanup_stale_jobs - Manage bulk broadcast batch execution via .
process_scheduler_job - Enforce 50 msgs/sec rate limits per tenant.
3. Directory Structure
text
services/api/scheduler/
├── admin.py
├── apps.py
├── services/
│ ├── async_whatsapp.py
│ └── rate_limiter.py
├── tasks.py
└── tests/
4. Models & Database Schemas
- Integrates with and
django_celery_beat.models.PeriodicTask.campaigns.Campaign
5. Services & Business Logic
- : Redis-backed token bucket rate limiter.
TokenBucketRateLimiter - : Async HTTP client for Meta Graph API calls.
AsyncWhatsAppClient
6. Serializers & Data Transfer Objects
- Task payload tuples containing recipient phone numbers, template IDs, and parameter bindings.
7. Views & API Endpoints
- None (Scheduler is an internal task execution engine).
8. Permissions & Role Rules
- System-level access (runs via Celery daemon).
9. Signals & Event Listeners
- Listens for campaign transitions to enqueue jobs.
SCHEDULED
10. Background Tasks & Celery Jobs
- : Beat task running every minute.
scheduler.tasks.scheduler_heartbeat - : Worker task processing batch dispatches.
scheduler.tasks.process_scheduler_job
11. Data Flow & External Dependencies
- Uses Redis for task queuing and token bucket state; sends requests to Meta Cloud API ().
v22.0
12. Business Rules & Validations
- Jobs that fail due to temporary network issues are retried according to .
SCHEDULER_RETRY_DELAYS = [60, 300, 900]
13. Sequence Diagram (Mermaid)
Rendering diagram...
14. Known Limitations & Technical Debt
- Single worker concurrency can bottleneck if Redis network latency increases.
15. Future Improvements
- Dynamic rate-limit adjustment based on Meta Quality Rating feedback.