mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-18 09:18:12 +00:00
Add local to client transfer and Blender texture packing
This commit is contained in:
@@ -294,7 +294,7 @@ class RenderServer:
|
||||
return success
|
||||
|
||||
try:
|
||||
response = requests.get(f"http://{hostname}:8080/status", timeout=1)
|
||||
response = requests.get(f"http://{hostname}:8080/status", timeout=3)
|
||||
if response.ok:
|
||||
cls.render_clients.append(hostname)
|
||||
logger.info(f"Client '{hostname}' successfully registered")
|
||||
@@ -313,6 +313,16 @@ class RenderServer:
|
||||
success = True
|
||||
return success
|
||||
|
||||
@staticmethod
|
||||
def is_client_available(client_hostname, timeout=3):
|
||||
try:
|
||||
response = requests.get(f"http://{client_hostname}:8080/status", timeout=timeout)
|
||||
if response.ok:
|
||||
return True
|
||||
except requests.ConnectionError as e:
|
||||
pass
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def start(cls, background_thread=False):
|
||||
|
||||
@@ -439,21 +449,66 @@ def add_job():
|
||||
output_path = request.json.get("output", None)
|
||||
priority = request.json.get('priority', 2)
|
||||
args = request.json.get('args', None)
|
||||
client = request.json.get('client', RenderServer.host_name)
|
||||
force_start = request.json.get('force_start', False)
|
||||
|
||||
if None in [renderer, input_path, output_path]:
|
||||
return {'error': 'missing required parameters'}, 400
|
||||
|
||||
try:
|
||||
render_job = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
||||
except ValueError as e:
|
||||
logger.exception(e)
|
||||
return {'error': str(e)}, 400
|
||||
if client == RenderServer.host_name:
|
||||
# Local Renders
|
||||
try:
|
||||
render_job = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
||||
except ValueError as e:
|
||||
logger.exception(e)
|
||||
return {'error': str(e)}, 400
|
||||
|
||||
new_job = RenderJob(render_job, priority=priority)
|
||||
RenderServer.add_to_render_queue(new_job, force_start=force_start)
|
||||
new_job = RenderJob(render_job, priority=priority)
|
||||
RenderServer.add_to_render_queue(new_job, force_start=force_start)
|
||||
|
||||
return new_job.json()
|
||||
return new_job.json()
|
||||
|
||||
elif client in RenderServer.render_clients:
|
||||
|
||||
# see if host is available
|
||||
if RenderServer.is_client_available(client):
|
||||
|
||||
if args and renderer == 'blender' and args.get('pack_files', False):
|
||||
from utilities.blender_worker import pack_blender_files
|
||||
new_path = pack_blender_files(path=input_path)
|
||||
if new_path:
|
||||
logger.info(f'Packed Blender file successfully: {new_path}')
|
||||
input_path = new_path
|
||||
else:
|
||||
err_msg = f'Failed to pack Blender file: {input_path}'
|
||||
logger.error(err_msg)
|
||||
return {'error': err_msg}, 400
|
||||
|
||||
# call uploader on remote client
|
||||
try:
|
||||
job_files = {'file': open(input_path, 'rb')}
|
||||
job_data = request.json
|
||||
job_data['input'] = input_path
|
||||
response = requests.post(f"http://{client}:8080/uploader", files=job_files, data=job_data)
|
||||
if response.ok:
|
||||
logger.info("Job submitted successfully!")
|
||||
return response.json() if response.json() else "Job ok"
|
||||
else:
|
||||
return {'error', 'Job rejected by client'}, 400
|
||||
except requests.ConnectionError as e:
|
||||
err_msg = f"Error submitting job to client: {client}"
|
||||
logger.error(err_msg)
|
||||
return {'error', err_msg}, 400
|
||||
else:
|
||||
# client is not available
|
||||
err_msg = f"Render client '{client}' is unreachable"
|
||||
logger.error(err_msg)
|
||||
return {'error', err_msg}, 400
|
||||
|
||||
else:
|
||||
err_msg = f"Unknown render client: '{client}'"
|
||||
logger.error(err_msg)
|
||||
return {'error', err_msg}, 400
|
||||
|
||||
|
||||
@app.get('/cancel_job')
|
||||
@@ -496,7 +551,7 @@ def upload_file_page():
|
||||
return render_template('upload.html')
|
||||
|
||||
|
||||
@app.route('/uploader', methods=['GET', 'POST'])
|
||||
@app.route('/uploader', methods=['POST'])
|
||||
def upload_file():
|
||||
|
||||
if request.method == 'POST':
|
||||
@@ -517,16 +572,12 @@ def upload_file():
|
||||
uploaded_file.save(local_path)
|
||||
renderer = request.values['renderer']
|
||||
|
||||
# todo: finish output_path and args - currently placeholder data
|
||||
# todo: finish output_path - currently placeholder data
|
||||
output_path = os.path.join(job_dir, uploaded_file.filename + "-output.mp4")
|
||||
|
||||
if renderer == 'blender':
|
||||
args = {'engine': request.values['blender_engine']}
|
||||
else:
|
||||
args = None
|
||||
|
||||
try:
|
||||
render_job = RenderWorkerFactory.create_worker(renderer, local_path, output_path, args=args)
|
||||
render_job = RenderWorkerFactory.create_worker(renderer, local_path, output_path,
|
||||
args=request.values.get('args', None))
|
||||
new_job = RenderJob(render_job, custom_id=new_id)
|
||||
RenderServer.add_to_render_queue(new_job)
|
||||
return new_job.json()
|
||||
|
||||
Reference in New Issue
Block a user