mirror of
https://github.com/tubearchivist/tubearchivist
synced 2024-11-02 09:41:07 +00:00
refactor StartupCheck into class, lock if already run for multithreading
This commit is contained in:
parent
1f1dfcb54f
commit
fd4f15ab66
@ -8,46 +8,69 @@ from home.src.ta.config import AppConfig as ArchivistConfig
|
|||||||
from home.src.ta.ta_redis import RedisArchivist
|
from home.src.ta.ta_redis import RedisArchivist
|
||||||
|
|
||||||
|
|
||||||
def sync_redis_state():
|
class StartupCheck:
|
||||||
"""make sure redis gets new config.json values"""
|
"""checks to run at application startup"""
|
||||||
print("sync redis")
|
|
||||||
config_handler = ArchivistConfig()
|
|
||||||
config_handler.load_new_defaults()
|
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.config_handler = ArchivistConfig()
|
||||||
|
self.redis_con = RedisArchivist()
|
||||||
|
self.has_run = self.get_has_run()
|
||||||
|
|
||||||
def make_folders():
|
def run(self):
|
||||||
"""make needed cache folders here so docker doesn't mess it up"""
|
"""run all startup checks"""
|
||||||
folders = [
|
print("run startup checks")
|
||||||
"download",
|
self.release_lock()
|
||||||
"channels",
|
index_check()
|
||||||
"videos",
|
self.sync_redis_state()
|
||||||
"playlists",
|
self.make_folders()
|
||||||
"import",
|
self.set_has_run()
|
||||||
"backup",
|
|
||||||
]
|
|
||||||
config = ArchivistConfig().config
|
|
||||||
cache_dir = config["application"]["cache_dir"]
|
|
||||||
for folder in folders:
|
|
||||||
folder_path = os.path.join(cache_dir, folder)
|
|
||||||
try:
|
|
||||||
os.makedirs(folder_path)
|
|
||||||
except FileExistsError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
def get_has_run(self):
|
||||||
|
"""validate if check has already executed"""
|
||||||
|
return self.redis_con.get_message("startup_check")
|
||||||
|
|
||||||
def release_lock():
|
def set_has_run(self):
|
||||||
"""make sure there are no leftover locks set in redis on container start"""
|
"""startup checks run"""
|
||||||
all_locks = [
|
message = {"status": True}
|
||||||
"manual_import",
|
self.redis_con.set_message("startup_check", message, expire=120)
|
||||||
"downloading",
|
|
||||||
"dl_queue",
|
def sync_redis_state(self):
|
||||||
"dl_queue_id",
|
"""make sure redis gets new config.json values"""
|
||||||
"rescan",
|
print("sync redis")
|
||||||
]
|
self.config_handler.load_new_defaults()
|
||||||
for lock in all_locks:
|
|
||||||
response = RedisArchivist().del_message(lock)
|
def make_folders(self):
|
||||||
if response:
|
"""make needed cache folders here so docker doesn't mess it up"""
|
||||||
print("deleted leftover key from redis: " + lock)
|
folders = [
|
||||||
|
"download",
|
||||||
|
"channels",
|
||||||
|
"videos",
|
||||||
|
"playlists",
|
||||||
|
"import",
|
||||||
|
"backup",
|
||||||
|
]
|
||||||
|
cache_dir = self.config_handler.config["application"]["cache_dir"]
|
||||||
|
for folder in folders:
|
||||||
|
folder_path = os.path.join(cache_dir, folder)
|
||||||
|
try:
|
||||||
|
os.makedirs(folder_path)
|
||||||
|
except FileExistsError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
def release_lock(self):
|
||||||
|
"""make sure there are no leftover locks set in redis"""
|
||||||
|
all_locks = [
|
||||||
|
"startup_check",
|
||||||
|
"manual_import",
|
||||||
|
"downloading",
|
||||||
|
"dl_queue",
|
||||||
|
"dl_queue_id",
|
||||||
|
"rescan",
|
||||||
|
]
|
||||||
|
for lock in all_locks:
|
||||||
|
response = self.redis_con.del_message(lock)
|
||||||
|
if response:
|
||||||
|
print("deleted leftover key from redis: " + lock)
|
||||||
|
|
||||||
|
|
||||||
class HomeConfig(AppConfig):
|
class HomeConfig(AppConfig):
|
||||||
@ -57,7 +80,9 @@ class HomeConfig(AppConfig):
|
|||||||
name = "home"
|
name = "home"
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
release_lock()
|
startup = StartupCheck()
|
||||||
index_check()
|
if startup.has_run["status"]:
|
||||||
sync_redis_state()
|
print("startup checks run in other thread")
|
||||||
make_folders()
|
return
|
||||||
|
|
||||||
|
startup.run()
|
||||||
|
Loading…
Reference in New Issue
Block a user