import logging
import redis
from time import sleep
import json
import schedule
logger = logging.getLogger(__name__)
[docs]def trigger_queue(name: str, client: redis.Redis, queue: str):
logger.info(f"pushing {name} to {queue}")
client.lpush(queue, json.dumps({'name': name}))
[docs]def run_daemon(config: dict, host: str, port: int):
"""Run the scheduler daemon, scheduling signals to send to other services"""
# initialize the queue client
client = redis.Redis(host=host, port=port, charset="utf-8", decode_responses=True)
schedules = config["schedules"]
for s in schedules:
number, time_unit = s["schedule"].split(" ")
job = schedule.every(int(number))
job = getattr(job, time_unit).do(
trigger_queue, name=s["name"], client=client, queue=s["queue"]
)
while True:
schedule.run_pending()
sleep(1)