Files
Synculous-2/scheduler/daemon.py
2026-02-12 22:11:52 -06:00

58 lines
1.5 KiB
Python

"""
daemon.py - Background polling loop for scheduled tasks
Override poll_callback() with your domain-specific logic.
"""
import os
import time
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
POLL_INTERVAL = int(os.environ.get("POLL_INTERVAL", 60))
def check_medication_reminders():
"""Check for medications due now and send notifications."""
# TODO: query medications table for doses due within the poll window
# TODO: cross-ref med_logs to skip already-taken doses
# TODO: send via core.notifications._sendToEnabledChannels()
pass
def check_routine_reminders():
"""Check for scheduled routines due now and send notifications."""
# TODO: query routine_schedules for routines due within the poll window
# TODO: send via core.notifications._sendToEnabledChannels()
pass
def check_refills():
"""Check for medications running low on refills."""
# TODO: query medications where quantity_remaining is low
# TODO: send refill reminder via notifications
pass
def poll_callback():
"""Called every POLL_INTERVAL seconds."""
check_medication_reminders()
check_routine_reminders()
check_refills()
def daemon_loop():
logger.info("Scheduler daemon starting")
while True:
try:
poll_callback()
except Exception as e:
logger.error(f"Poll callback error: {e}")
time.sleep(POLL_INTERVAL)
if __name__ == "__main__":
daemon_loop()