mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Worker class cleanup
This commit is contained in:
21
dashboard.py
21
dashboard.py
@@ -206,7 +206,7 @@ class RenderDashboard:
|
|||||||
return sorted_jobs
|
return sorted_jobs
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
all_data = self.request_data('full_status')
|
all_data = self.request_data('full_status', timeout=5)
|
||||||
return all_data
|
return all_data
|
||||||
|
|
||||||
|
|
||||||
@@ -275,17 +275,30 @@ if __name__ == '__main__':
|
|||||||
else:
|
else:
|
||||||
header_text.append("(Remote)", style="magenta")
|
header_text.append("(Remote)", style="magenta")
|
||||||
|
|
||||||
layout["header"].update(Panel(Text("Zordon Render Client - Version 0.0.1 alpha", justify="center")))
|
|
||||||
|
|
||||||
with Live(console=console, screen=False, refresh_per_second=1, transient=True) as live:
|
with Live(console=console, screen=False, refresh_per_second=1, transient=True) as live:
|
||||||
while True:
|
|
||||||
|
|
||||||
|
cached_server_data = None
|
||||||
|
|
||||||
|
while True:
|
||||||
server_data = client.get_data()
|
server_data = client.get_data()
|
||||||
|
if server_data:
|
||||||
|
cached_server_data = server_data
|
||||||
|
server_data['online'] = True
|
||||||
|
else:
|
||||||
|
server_data = cached_server_data
|
||||||
|
if server_data:
|
||||||
|
server_data['online'] = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if server_data:
|
if server_data:
|
||||||
layout["body"].update(create_jobs_table(server_data))
|
layout["body"].update(create_jobs_table(server_data))
|
||||||
layout["side_top"].update(Panel(create_node_tree(server_data)))
|
layout["side_top"].update(Panel(create_node_tree(server_data)))
|
||||||
layout["side_bottom"].update(Panel(create_status_panel(server_data)))
|
layout["side_bottom"].update(Panel(create_status_panel(server_data)))
|
||||||
|
|
||||||
|
online_text = "Online" if server_data['online'] else "Offline"
|
||||||
|
online_color = "green" if server_data['online'] else "red"
|
||||||
|
layout["header"].update(Panel(Text(f"Zordon Render Client - Version 0.0.1 alpha - {online_text}",
|
||||||
|
justify="center", style=online_color)))
|
||||||
live.update(layout, refresh=False)
|
live.update(layout, refresh=False)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Exception updating table: {e}")
|
print(f"Exception updating table: {e}")
|
||||||
|
|||||||
BIN
subway.png
Normal file
BIN
subway.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.5 MiB |
@@ -1,10 +1,11 @@
|
|||||||
#! /usr/bin/python
|
#! /usr/bin/python
|
||||||
from utilities.render_worker import *
|
|
||||||
import glob
|
import glob
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from utilities.render_worker import *
|
||||||
|
|
||||||
|
|
||||||
def aerender_path():
|
def aerender_path():
|
||||||
paths = glob.glob('/Applications/*After Effects*/aerender')
|
paths = glob.glob('/Applications/*After Effects*/aerender')
|
||||||
@@ -16,7 +17,7 @@ def aerender_path():
|
|||||||
return paths[0]
|
return paths[0]
|
||||||
|
|
||||||
|
|
||||||
class AERenderWorker(RenderWorker):
|
class AERenderWorker(BaseRenderWorker):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def version():
|
def version():
|
||||||
@@ -34,12 +35,12 @@ class AERenderWorker(RenderWorker):
|
|||||||
render_engine = 'aerender'
|
render_engine = 'aerender'
|
||||||
supported_extensions = ['.aep']
|
supported_extensions = ['.aep']
|
||||||
|
|
||||||
def __init__(self, input_path, output_path, args=None):
|
def __init__(self, project, comp, render_settings, omsettings, output):
|
||||||
super(AERenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args)
|
super(AERenderWorker, self).__init__(input=project, output=output)
|
||||||
|
|
||||||
self.comp = self.args.get('comp')
|
self.comp = comp
|
||||||
self.render_settings = self.args.get('render_settings')
|
self.render_settings = render_settings
|
||||||
self.omsettings = self.args.get('omsettings')
|
self.omsettings = omsettings
|
||||||
|
|
||||||
self.progress = 0
|
self.progress = 0
|
||||||
self.progress_history = []
|
self.progress_history = []
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ SUPPORTED_FORMATS = ['TGA', 'RAWTGA', 'JPEG', 'IRIS', 'IRIZ', 'AVIRAW', 'AVIJPEG
|
|||||||
'OPEN_EXR', 'OPEN_EXR_MULTILAYER', 'MPEG', 'CINEON', 'DPX', 'DDS', 'JP2']
|
'OPEN_EXR', 'OPEN_EXR_MULTILAYER', 'MPEG', 'CINEON', 'DPX', 'DDS', 'JP2']
|
||||||
|
|
||||||
|
|
||||||
class BlenderRenderWorker(RenderWorker):
|
class BlenderRenderWorker(BaseRenderWorker):
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
version = None
|
version = None
|
||||||
@@ -22,14 +22,14 @@ class BlenderRenderWorker(RenderWorker):
|
|||||||
supported_extensions = ['.blend']
|
supported_extensions = ['.blend']
|
||||||
install_paths = ['/Applications/Blender.app/Contents/MacOS/Blender']
|
install_paths = ['/Applications/Blender.app/Contents/MacOS/Blender']
|
||||||
|
|
||||||
def __init__(self, input_path, output_path, args=None):
|
def __init__(self, input_path, output_path, args=None, render_all_frames=False, engine='BLENDER_EEVEE'):
|
||||||
super(BlenderRenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args)
|
super(BlenderRenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args)
|
||||||
|
|
||||||
self.engine = self.args.get('engine', 'BLENDER_EEVEE')
|
self.engine = engine # or 'CYCLES'
|
||||||
self.format = 'JPEG'
|
self.format = 'JPEG'
|
||||||
self.frame = 0
|
self.frame = 0
|
||||||
|
|
||||||
self.render_all_frames = self.args.get('render_all_frames', False)
|
self.render_all_frames = render_all_frames
|
||||||
|
|
||||||
# Stats
|
# Stats
|
||||||
self.current_frame = -1
|
self.current_frame = -1
|
||||||
@@ -67,7 +67,7 @@ class BlenderRenderWorker(RenderWorker):
|
|||||||
|
|
||||||
sample_string = line.split('|')[-1].strip()
|
sample_string = line.split('|')[-1].strip()
|
||||||
if "sample" in sample_string.lower():
|
if "sample" in sample_string.lower():
|
||||||
samples = re.sub(r'[^\d/]', '', sample_string)
|
samples = re.sub(r'[^/d/]', '', sample_string)
|
||||||
self.frame_percent_complete = int(samples.split('/')[0]) / int(samples.split('/')[-1])
|
self.frame_percent_complete = int(samples.split('/')[0]) / int(samples.split('/')[-1])
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
#! /usr/bin/python
|
import logging
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import ffmpeg
|
import ffmpeg
|
||||||
|
|
||||||
from utilities.render_worker import *
|
from utilities.render_worker import *
|
||||||
|
|
||||||
|
|
||||||
class FFMPEGRenderWorker(RenderWorker):
|
class FFMPEGRenderWorker(BaseRenderWorker):
|
||||||
|
|
||||||
def version(self):
|
def version(self):
|
||||||
version = None
|
version = None
|
||||||
@@ -62,7 +60,7 @@ class FFMPEGRenderWorker(RenderWorker):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=logging.INFO)
|
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=logging.DEBUG)
|
||||||
|
|
||||||
test_movie = '/Users/brettwilliams/Desktop/dark_knight_rises.mp4'
|
test_movie = '/Users/brettwilliams/Desktop/dark_knight_rises.mp4'
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
from datetime import datetime
|
|
||||||
import io
|
import io
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@@ -28,9 +27,9 @@ def string_to_status(string):
|
|||||||
return RenderStatus.ERROR
|
return RenderStatus.ERROR
|
||||||
|
|
||||||
|
|
||||||
class RenderWorker(object):
|
class BaseRenderWorker(object):
|
||||||
|
|
||||||
renderer = 'GenericRenderer'
|
renderer = 'BaseRenderWorker'
|
||||||
render_engine = None
|
render_engine = None
|
||||||
supported_extensions = []
|
supported_extensions = []
|
||||||
install_paths = []
|
install_paths = []
|
||||||
@@ -57,7 +56,7 @@ class RenderWorker(object):
|
|||||||
|
|
||||||
# Ranges
|
# Ranges
|
||||||
self.total_frames = 0
|
self.total_frames = 0
|
||||||
self.last_frame = 0
|
self.current_frame = 0
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
self.log_path = None
|
self.log_path = None
|
||||||
@@ -118,6 +117,7 @@ class RenderWorker(object):
|
|||||||
|
|
||||||
# Setup logging
|
# Setup logging
|
||||||
try:
|
try:
|
||||||
|
if not self.log_path:
|
||||||
log_dir = os.path.join(os.path.dirname(self.input), 'logs')
|
log_dir = os.path.join(os.path.dirname(self.input), 'logs')
|
||||||
if not os.path.exists(log_dir):
|
if not os.path.exists(log_dir):
|
||||||
os.makedirs(log_dir)
|
os.makedirs(log_dir)
|
||||||
@@ -134,13 +134,17 @@ class RenderWorker(object):
|
|||||||
# Start process and get updates
|
# Start process and get updates
|
||||||
subprocess_cmds = self._generate_subprocess()
|
subprocess_cmds = self._generate_subprocess()
|
||||||
logger.debug("Renderer commands generated - {}".format(" ".join(subprocess_cmds)))
|
logger.debug("Renderer commands generated - {}".format(" ".join(subprocess_cmds)))
|
||||||
self.process = subprocess.Popen(subprocess_cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=False)
|
self.process = subprocess.Popen(subprocess_cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||||
|
universal_newlines=False)
|
||||||
self.start_time = datetime.now()
|
self.start_time = datetime.now()
|
||||||
f = open(self.log_path, "a")
|
|
||||||
f.write("{3} - Starting {0} {1} Render for {2}\n".format(self.renderer, self.version(), self.input, self.start_time.isoformat()))
|
with open(self.log_path, "a") as f:
|
||||||
|
|
||||||
|
f.write("{3} - Starting {0} {1} Render for {2}\n".format(self.renderer, self.version(), self.input,
|
||||||
|
self.start_time.isoformat()))
|
||||||
for c in io.TextIOWrapper(self.process.stdout, encoding="utf-8"): # or another encoding
|
for c in io.TextIOWrapper(self.process.stdout, encoding="utf-8"): # or another encoding
|
||||||
f.write(c)
|
f.write(c)
|
||||||
logger.debug("RENDERER: {}".format(c.strip()))
|
logger.debug(f"{self.renderer}Worker: {c.strip()}")
|
||||||
self.last_output = c.strip()
|
self.last_output = c.strip()
|
||||||
self._parse_stdout(c.strip())
|
self._parse_stdout(c.strip())
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
@@ -165,7 +169,6 @@ class RenderWorker(object):
|
|||||||
self.status = RenderStatus.COMPLETED
|
self.status = RenderStatus.COMPLETED
|
||||||
|
|
||||||
f.write(message)
|
f.write(message)
|
||||||
f.close()
|
|
||||||
|
|
||||||
if self.failed_attempts >= self.maximum_attempts and self.status is not RenderStatus.CANCELLED:
|
if self.failed_attempts >= self.maximum_attempts and self.status is not RenderStatus.CANCELLED:
|
||||||
logger.error('{} Render of {} failed after {} attempts'.format(self.renderer, self.input, self.failed_attempts))
|
logger.error('{} Render of {} failed after {} attempts'.format(self.renderer, self.input, self.failed_attempts))
|
||||||
|
|||||||
Reference in New Issue
Block a user