From cc394932a1fac7ec7c0918bd960e3f434dbc7812 Mon Sep 17 00:00:00 2001 From: Brett Williams Date: Wed, 7 Dec 2022 14:39:50 -0800 Subject: [PATCH] Add rest call to get job logs --- lib/job_server.py | 16 +++++++++++++++- lib/render_job.py | 16 ++++++++++++++++ scheduler_gui.py | 11 ++++++----- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/lib/job_server.py b/lib/job_server.py index ed61ab4..a59cb6b 100755 --- a/lib/job_server.py +++ b/lib/job_server.py @@ -9,7 +9,7 @@ from datetime import datetime from zipfile import ZipFile import requests -from flask import Flask, request, render_template, send_file, after_this_request +from flask import Flask, request, render_template, send_file, after_this_request, Response from werkzeug.utils import secure_filename from lib.render_job import RenderJob @@ -44,6 +44,20 @@ def get_job_status(job_id): return f'Cannot find job with ID {job_id}', 400 +@server.get('/api/job//logs') +def get_job_logs(job_id): + found_job = RenderQueue.job_with_id(job_id) + if found_job: + log_path = found_job.worker.log_path + log_data = None + if log_path and os.path.exists(log_path): + with open(log_path) as file: + log_data = file.read() + return Response(log_data, mimetype='text/plain') + else: + return f'Cannot find job with ID {job_id}', 400 + + @server.get('/api/file_list/') def get_file_list(job_id): found_job = RenderQueue.job_with_id(job_id) diff --git a/lib/render_job.py b/lib/render_job.py index 6a366d7..0270b2e 100644 --- a/lib/render_job.py +++ b/lib/render_job.py @@ -81,6 +81,22 @@ class RenderJob: def stop(self): self.worker.stop() + def time_elapsed(self): + # calculate elapsed time + elapsed_time = 'Unknown' + start_time = self.worker.start_time + end_time = self.worker.end_time + + if start_time: + if end_time: + elapsed_time = str(end_time - start_time) + elif self.render_status() == RenderStatus.RUNNING: + elapsed_time = str(datetime.now() - start_time) + return elapsed_time + + def frame_count(self): + return self.worker.total_frames + @classmethod def generate_id(cls): return str(uuid.uuid4()).split('-')[0] \ No newline at end of file diff --git a/scheduler_gui.py b/scheduler_gui.py index f5c8e99..080f302 100755 --- a/scheduler_gui.py +++ b/scheduler_gui.py @@ -334,11 +334,12 @@ class ScheduleJob(Frame): # multiple camera rendering selected_cameras = self.blender_cameras_list.getCheckedItems() if self.blender_cameras_list else None - for cam in selected_cameras: - job_copy = copy.deepcopy(job_json) - job_copy['args']['camera'] = cam.split('-')[0].strip() - job_copy['name'] = pathlib.Path(input_path).stem.replace(' ', '_') + "-" + cam.replace(' ', '') - job_list.append(job_copy) + if selected_cameras: + for cam in selected_cameras: + job_copy = copy.deepcopy(job_json) + job_copy['args']['camera'] = cam.split('-')[0].strip() + job_copy['name'] = pathlib.Path(input_path).stem.replace(' ', '_') + "-" + cam.replace(' ', '') + job_list.append(job_copy) # Submit to server job_list = job_list or [job_json]