From 88f4d4d84a3473e0b906f095ac970a35b1b31e42 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 27 Jun 2022 17:48:13 +0700 Subject: [PATCH] rebuild jobs after config change --- tilefy/src/scheduler.py | 35 +++++++++++++++++++++++++-------- tilefy/src/scheduler_rebuild.py | 10 ++++++++++ tilefy/src/watcher.py | 2 ++ 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 tilefy/src/scheduler_rebuild.py diff --git a/tilefy/src/scheduler.py b/tilefy/src/scheduler.py index 3885cef..8a809fb 100644 --- a/tilefy/src/scheduler.py +++ b/tilefy/src/scheduler.py @@ -15,24 +15,31 @@ class TilefyScheduler: CRON_DEFAULT = "0 0 * * *" def __init__(self): - self.scheduler = False - self.tiles = False + self.scheduler = BackgroundScheduler(timezone=environ.get("TZ", "UTC")) + self.add_job_store() + self.tiles = self.get_tiles() - def setup_schedule(self): - """startup""" + def get_tiles(self): + """get all tiles set in config""" config = TilefyRedis().get_message("config") if not config: + print("no tiles defined in tiles.yml") + return False + + return config["tiles"] + + def setup_schedule(self): + """startup""" + if not self.tiles: print("no tiles defined in tiles.yml") return - self.tiles = config["tiles"] - self.scheduler = BackgroundScheduler(timezone=environ.get("TZ", "UTC")) - self.add_job_store() jobs = self.build_jobs() self.add_jobs(jobs) self.add_watcher() - self.scheduler.start() + if not self.scheduler.running: + self.scheduler.start() def add_job_store(self): """add jobstore to scheudler""" @@ -44,6 +51,18 @@ class TilefyScheduler: port=environ.get("REDIS_PORT"), ) + def clear_old(self): + """remove old jobs before recreating""" + if not self.scheduler.running: + self.scheduler.start() + + all_jobs = self.scheduler.get_jobs() + for job in all_jobs: + print(job) + if job.id == "watcher": + continue + self.scheduler.remove_job(job.id) + def build_jobs(self): """build list of expected jobs""" jobs = [] diff --git a/tilefy/src/scheduler_rebuild.py b/tilefy/src/scheduler_rebuild.py new file mode 100644 index 0000000..ef922e3 --- /dev/null +++ b/tilefy/src/scheduler_rebuild.py @@ -0,0 +1,10 @@ +"""rebuild jobs in scheduler""" + +from src import scheduler + + +def rebuild(): + """rebuild""" + handler = scheduler.TilefyScheduler() + handler.clear_old() + handler.setup_schedule() diff --git a/tilefy/src/watcher.py b/tilefy/src/watcher.py index c055156..4853b67 100644 --- a/tilefy/src/watcher.py +++ b/tilefy/src/watcher.py @@ -3,6 +3,7 @@ import hashlib import os +from src.scheduler_rebuild import rebuild from src.template import create_all_tiles from src.tilefy_redis import TilefyRedis, load_yml @@ -24,6 +25,7 @@ class Watcher: load_yml() create_all_tiles() self._store_last() + rebuild() def is_changed(self): """check if file has changed"""