mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Save registered clients to server_state.json
This commit is contained in:
@@ -23,7 +23,7 @@ app = Flask(__name__)
|
|||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
local_hostname = socket.gethostname()
|
local_hostname = socket.gethostname()
|
||||||
|
|
||||||
JSON_FILE = 'job_history.json'
|
JSON_FILE = 'server_state.json'
|
||||||
#todo: move history to sqlite db
|
#todo: move history to sqlite db
|
||||||
|
|
||||||
|
|
||||||
@@ -142,16 +142,21 @@ class RenderServer:
|
|||||||
RenderStatus.COMPLETED, RenderStatus.ERROR]]
|
RenderStatus.COMPLETED, RenderStatus.ERROR]]
|
||||||
for x in to_remove:
|
for x in to_remove:
|
||||||
x.archived = True
|
x.archived = True
|
||||||
|
cls.save_state()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_history(cls, json_path=None):
|
def load_state(cls, json_path=None):
|
||||||
|
"""Load state history from JSON file"""
|
||||||
|
|
||||||
input_path = json_path or JSON_FILE
|
input_path = json_path or JSON_FILE
|
||||||
|
|
||||||
if os.path.exists(input_path):
|
if os.path.exists(input_path):
|
||||||
f = open(input_path)
|
with open(input_path) as f:
|
||||||
job_list = json.load(f)
|
|
||||||
for job in job_list:
|
# load saved data
|
||||||
|
saved_state = json.load(f)
|
||||||
|
cls.render_clients = saved_state.get('clients', {})
|
||||||
|
|
||||||
|
for job in saved_state.get('jobs', []):
|
||||||
|
|
||||||
# Identify renderer type and recreate Renderer object
|
# Identify renderer type and recreate Renderer object
|
||||||
job_render_object = RenderWorkerFactory.create_worker(job['renderer'], input_path=job['render']['input'], output_path=job['render']['output'])
|
job_render_object = RenderWorkerFactory.create_worker(job['renderer'], input_path=job['render']['input'], output_path=job['render']['output'])
|
||||||
@@ -181,24 +186,23 @@ class RenderServer:
|
|||||||
|
|
||||||
# finally add back to render queue
|
# finally add back to render queue
|
||||||
cls.render_queue.append(new_job)
|
cls.render_queue.append(new_job)
|
||||||
f.close()
|
|
||||||
|
|
||||||
cls.last_saved_counts = cls.job_counts()
|
cls.last_saved_counts = cls.job_counts()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def save_history(cls, json_path=None):
|
def save_state(cls, json_path=None):
|
||||||
"""Save job history to JSON file"""
|
"""Save state history to JSON file"""
|
||||||
try:
|
try:
|
||||||
logger.debug("Saving Render History")
|
logger.debug("Saving Render History")
|
||||||
new_list = []
|
output = {'timestamp': datetime.now().isoformat(),
|
||||||
for job in cls.render_queue:
|
'jobs': [json.loads(j.json()) for j in cls.render_queue],
|
||||||
new_list.append(json.loads(job.json()))
|
'clients': cls.render_clients}
|
||||||
output_path = json_path or JSON_FILE
|
output_path = json_path or JSON_FILE
|
||||||
with open(output_path, 'w') as f:
|
with open(output_path, 'w') as f:
|
||||||
json.dump(new_list, f, indent=4)
|
json.dump(output, f, indent=4)
|
||||||
cls.last_saved_counts = cls.job_counts()
|
cls.last_saved_counts = cls.job_counts()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Error saving jobs JSON: {}".format(e))
|
logger.error("Error saving state JSON: {}".format(e))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def evaluate_queue(cls):
|
def evaluate_queue(cls):
|
||||||
@@ -222,7 +226,7 @@ class RenderServer:
|
|||||||
cls.start_job(job)
|
cls.start_job(job)
|
||||||
|
|
||||||
if cls.last_saved_counts != cls.job_counts():
|
if cls.last_saved_counts != cls.job_counts():
|
||||||
cls.save_history()
|
cls.save_state()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def start_job(cls, job):
|
def start_job(cls, job):
|
||||||
@@ -289,6 +293,7 @@ class RenderServer:
|
|||||||
cls.render_clients.append(hostname)
|
cls.render_clients.append(hostname)
|
||||||
logger.info(f"Client '{hostname}' successfully registered")
|
logger.info(f"Client '{hostname}' successfully registered")
|
||||||
success = True
|
success = True
|
||||||
|
cls.save_state()
|
||||||
except requests.ConnectionError as e:
|
except requests.ConnectionError as e:
|
||||||
logger.error(f"Cannot connect to client at hostname: {hostname}")
|
logger.error(f"Cannot connect to client at hostname: {hostname}")
|
||||||
return success
|
return success
|
||||||
@@ -329,7 +334,7 @@ class RenderServer:
|
|||||||
flask_log.setLevel(config.get('flask_log_level', 'ERROR').upper())
|
flask_log.setLevel(config.get('flask_log_level', 'ERROR').upper())
|
||||||
|
|
||||||
# Setup the RenderServer object
|
# Setup the RenderServer object
|
||||||
cls.load_history()
|
cls.load_state()
|
||||||
|
|
||||||
thread = threading.Thread(target=eval_loop, kwargs={'delay_sec': config.get('queue_eval_seconds', 1)}, daemon=True)
|
thread = threading.Thread(target=eval_loop, kwargs={'delay_sec': config.get('queue_eval_seconds', 1)}, daemon=True)
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|||||||
Reference in New Issue
Block a user