--- # worker-crons defaults # # Each entry in `worker_crons` deploys a systemd .service + .timer pair. # Times use systemd OnCalendar syntax (see `man systemd.time`). # # The service runs inside the workers container via # docker compose exec -T workers python -m # # Why systemd timers not crond: timers log to journald (queryable with # `journalctl -u .service`), support OnBootSec/Persistent for catch-up # after a downed host, and inherit the docker daemon restart policy # without additional tooling. project_dir: /opt/performancewest worker_crons: # USF quarterly factor — polls USAC daily at 09:00 Chicago local. - name: pw-usf-factor-monitor description: Poll USAC for new USF quarterly contribution factor module: scripts.workers.usf_factor_monitor on_calendar: "*-*-* 14:00:00 UTC" # 09:00 CT persistent: true # De minimis factor presence — 3am daily, alerts if missing. - name: pw-deminimis-factor-check description: Alert if fcc_deminimis_factors missing for current/next year module: scripts.workers.deminimis_factor_check on_calendar: "*-*-* 03:00:00 UTC" persistent: true # Cold wallet sweep — every 30 min. - name: pw-cold-wallet-sweep description: Sweep SHKeeper hot-wallet excess to cold wallet module: scripts.workers.cold_wallet_sweeper on_calendar: "*-*-* *:00,30:00 UTC" persistent: false # Crypto payment worker — every 60s while we have pending jobs. - name: pw-crypto-payment-worker description: Advance crypto_payment_jobs state machine module: scripts.workers.crypto_payment_worker on_calendar: "*-*-* *:*:00 UTC" persistent: false # Relay deposit monitor — every 5 min, polls IMAP for Relay alerts. - name: pw-relay-deposit-monitor description: Parse Relay email alerts into relay_deposits module: scripts.workers.relay_deposit_monitor on_calendar: "*-*-* *:00/5:00 UTC" persistent: false # Commission worker — 02:00 daily (flips 14-day-eligible rows to eligible). - name: pw-commission-worker description: Flip commission_ledger rows to eligible after 14-day holdback module: scripts.workers.commission_worker on_calendar: "*-*-* 02:00:00 UTC" persistent: true # Renewal worker — 04:00 daily. - name: pw-renewal-worker description: Send renewal reminders + auto-renew RA/annual report/CDR module: scripts.workers.renewal_worker on_calendar: "*-*-* 04:00:00 UTC" persistent: true # CDR retention sweeper — 05:00 daily (purges past-retention CDR). - name: pw-cdr-retention description: Purge CDR older than the per-profile retention window module: scripts.workers.cdr_retention_sweeper on_calendar: "*-*-* 05:00:00 UTC" persistent: true # CDR unlock nudge — 10:00 daily (emails customers with locked studies). - name: pw-cdr-unlock-nudge description: Nudge customers whose CDR study is locked behind paywall module: scripts.workers.cdr_unlock_nudge on_calendar: "*-*-* 15:00:00 UTC" # 10:00 CT persistent: true # Payment reminder — 11:00 daily. - name: pw-payment-reminder description: Remind customers with unpaid compliance orders module: scripts.workers.payment_reminder on_calendar: "*-*-* 16:00:00 UTC" # 11:00 CT persistent: true # RMD removed scraper — weekly, Wednesday 08:00 (tracks FCC RMD removals). - name: pw-fcc-rmd-removed description: Scrape FCC public list of RMD-removed carriers module: scripts.workers.fcc_rmd_removed_scraper on_calendar: "Wed *-*-* 13:00:00 UTC" persistent: true # Client email processor — every 15 min, IMAPs regulatory mailboxes for # CRTC pipeline events (incoming agency replies, domain activation, etc.). - name: pw-client-email-processor description: Parse regulatory mailbox replies for CRTC pipeline advancement module: scripts.workers.client_email_processor on_calendar: "*-*-* *:00/15:00 UTC" persistent: false # AMB location scraper — daily 06:00 UTC, pulls current per-mailbox pricing # and sold-out status for the CRTC AMB picker. - name: pw-amb-location-scraper description: Scrape current Anytime Mailbox location + pricing catalog module: scripts.workers.amb_location_scraper on_calendar: "*-*-* 06:00:00 UTC" persistent: true # Compliance alert mailing list — weekly Sunday 06:00 UTC. # Queries local DB for carriers behind on filings and upserts to Listmonk. - name: pw-compliance-alert-list description: Update Listmonk compliance alert mailing list from local FCC data module: scripts.workers.compliance_alert_list on_calendar: "Sun *-*-* 06:00:00 UTC" persistent: true # Entity cache refresh — daily 07:00 UTC (2am CT). # Downloads business entity data from state Socrata APIs (CO, IA, CT, OR, NY) # into entity_cache for corporation status checks. - name: pw-entity-cache-refresh description: Refresh entity_cache from state SOS open data portals module: scripts.formation.bulk_download --all on_calendar: "*-*-* 07:00:00 UTC" persistent: true # Multi-state entity scraper — daily 08:00 UTC (3am CT). # Scrapes state SOS portals via Playwright for states without bulk APIs. # Covers 44 states (excludes CO, IA, CT, OR, NY, FL which use bulk data). - name: pw-entity-scraper description: Scrape business entities from state SOS portals via Playwright module: scripts.workers.entity_scraper --all on_calendar: "*-*-* 08:00:00 UTC" persistent: true # Florida entity downloader — daily 07:30 UTC. # Downloads daily diffs from FL Sunbiz SFTP (free public access). - name: pw-fl-entity-downloader description: Download Florida Sunbiz corporation data via SFTP module: scripts.workers.fl_entity_downloader --daily on_calendar: "*-*-* 07:30:00 UTC" persistent: true # RMD email scraper — daily 09:00 UTC (4am CT). # Scrapes contact emails from FCC ServiceNow SP API for RMD carriers. - name: pw-rmd-email-scraper description: Scrape RMD contact emails from FCC ServiceNow portal module: scripts.workers.fcc_rmd_scraper --phase scrape --limit 500 on_calendar: "*-*-* 09:00:00 UTC" persistent: true # RMD filing auditor — weekly Saturday 10:00 UTC (5am CT). # Audits RMD filings for 2026 compliance deficiencies (PDF analysis). - name: pw-rmd-auditor description: Audit RMD filings for 2026 compliance deficiencies module: scripts.workers.fcc_rmd_auditor --batch --year 2026 --no-ollama on_calendar: "Sat *-*-* 10:00:00 UTC" persistent: true