trucking campaigns: daily builder + MX verifier concurrency + tracking column

- build_trucking_campaigns.py: nightly script that creates 8 Listmonk campaigns
  per day (4 TZ x 2 types: MCS-150 overdue 2k/TZ, inactive USDOT 1k/TZ)
  at 4AM ET / 5AM ET (CT) / 6AM ET (MT) / 7AM ET (PT). Deduplicates via
  listmonk_sent_at column.
- migration 083: add listmonk_sent_at + listmonk_campaign_type to fmcsa_carriers
- email_verifier.py: bump max_workers from 5 to 20 for 4x faster throughput
- cron: daily pw-trucking-campaigns at 08:00 UTC (3 AM EST)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
justin 2026-05-31 10:07:44 -05:00
parent 54a46062a5
commit 0b7a35a58e
4 changed files with 294 additions and 1 deletions

View file

@ -205,7 +205,7 @@ def verify_table(table: str, limit: int | None = None, dry_run: bool = False, wh
is_valid, reason = verify_email(email)
return dot, email, is_valid, reason
with ThreadPoolExecutor(max_workers=5) as executor:
with ThreadPoolExecutor(max_workers=20) as executor:
futures = {executor.submit(check_one, row): row for row in rows}
done = 0
for future in as_completed(futures):