rebuild jobs after config change

This commit is contained in:
simon 2022-06-27 17:48:13 +07:00
parent 6b8a75b265
commit 88f4d4d84a
Signed by: simon
GPG Key ID: 2C15AA5E89985DD4
3 changed files with 39 additions and 8 deletions

View File

@ -15,23 +15,30 @@ 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()
if not self.scheduler.running:
self.scheduler.start()
def add_job_store(self):
@ -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 = []

View File

@ -0,0 +1,10 @@
"""rebuild jobs in scheduler"""
from src import scheduler
def rebuild():
"""rebuild"""
handler = scheduler.TilefyScheduler()
handler.clear_old()
handler.setup_schedule()

View File

@ -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"""