"""Celery worker + beat schedule for TapTrack Hub.""" import os from celery import Celery from celery.schedules import crontab REDIS_URL = os.getenv("REDIS_URL", "redis://redis:6379/0") celery_app = Celery( "taptrack_hub", broker=REDIS_URL, backend=REDIS_URL, include=[ "app.tasks.sms", "app.tasks.billing", "app.tasks.reports", "app.tasks.license", ], ) celery_app.conf.update( task_serializer="json", accept_content=["json"], result_serializer="json", timezone="Asia/Manila", enable_utc=True, beat_schedule={ # Process pending SMS jobs every 30 seconds (push path via Semaphore) "process-sms-queue": { "task": "sms.process_queue", "schedule": 30.0, }, # Reclaim processing jobs where on-prem went offline (every 5 minutes) "reclaim-stale-sms-jobs": { "task": "sms.reclaim_stale_jobs", "schedule": 300.0, }, # Check license expiry every day at 8am "check-license-expiry": { "task": "license.check_expiry", "schedule": crontab(hour=8, minute=0), }, # Generate monthly invoices on the 1st at 6am "generate-monthly-invoices": { "task": "billing.generate_monthly_invoices", "schedule": crontab(day_of_month=1, hour=6, minute=0), }, # Send monthly reports on the 1st at 7am "send-monthly-reports": { "task": "reports.send_monthly_reports", "schedule": crontab(day_of_month=1, hour=7, minute=0), }, # Check for overdue invoices daily at 9am "check-overdue-invoices": { "task": "billing.check_overdue", "schedule": crontab(hour=9, minute=0), }, }, ) app = celery_app