Report PDF emailing
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import time
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
from app.config import config
|
||||
from app.db import init_db
|
||||
from app.reporting import due_jobs, send_scheduled_job
|
||||
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def run_once() -> int:
|
||||
tz = ZoneInfo(config.app_timezone)
|
||||
now = datetime.now(tz)
|
||||
jobs = due_jobs(now)
|
||||
sent = 0
|
||||
|
||||
for job in jobs:
|
||||
logger.info(
|
||||
"Sending %s report for %s to %s",
|
||||
job.cadence,
|
||||
f"{job.start_date} to {job.end_date}",
|
||||
job.recipient_email,
|
||||
)
|
||||
try:
|
||||
if send_scheduled_job(job, tz):
|
||||
sent += 1
|
||||
except Exception:
|
||||
logger.exception("Scheduled report failed")
|
||||
|
||||
return sent
|
||||
|
||||
|
||||
def main() -> None:
|
||||
init_db()
|
||||
poll_seconds = max(60, config.report_scheduler_poll_seconds)
|
||||
logger.info("Report scheduler started; polling every %s seconds", poll_seconds)
|
||||
|
||||
while True:
|
||||
run_once()
|
||||
time.sleep(poll_seconds)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user