mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Scheduled_job work
This commit is contained in:
@@ -27,12 +27,6 @@ class Blender(BaseRenderEngine):
|
|||||||
formats = re.findall(r"'([A-Z_0-9]+)'", format_string)
|
formats = re.findall(r"'([A-Z_0-9]+)'", format_string)
|
||||||
return formats
|
return formats
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def full_report(cls):
|
|
||||||
return {'version': cls.version(),
|
|
||||||
'help_text': cls.get_help(),
|
|
||||||
'formats': cls.get_formats()}
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def run_python_expression(cls, project_path, python_expression):
|
def run_python_expression(cls, project_path, python_expression):
|
||||||
if os.path.exists(project_path):
|
if os.path.exists(project_path):
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class ScheduledJob(Base):
|
|||||||
self.name = name or os.path.basename(input_path) + '_' + self.date_created.strftime("%Y.%m.%d_%H.%M.%S")
|
self.name = name or os.path.basename(input_path) + '_' + self.date_created.strftime("%Y.%m.%d_%H.%M.%S")
|
||||||
|
|
||||||
self.worker_object = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
self.worker_object = RenderWorkerFactory.create_worker(renderer, input_path, output_path, args)
|
||||||
self.worker_object.log_path = os.path.join(os.path.dirname(input_path), self.name + '.log')
|
self.worker_object.log_path = self.log_path()
|
||||||
self.worker_object.validate()
|
self.worker_object.validate()
|
||||||
|
|
||||||
self.file_hash = None
|
self.file_hash = None
|
||||||
@@ -62,22 +62,25 @@ class ScheduledJob(Base):
|
|||||||
"""Converts RenderJob into JSON-friendly dict"""
|
"""Converts RenderJob into JSON-friendly dict"""
|
||||||
job_dict = None
|
job_dict = None
|
||||||
try:
|
try:
|
||||||
job_dict = self.__dict__.copy()
|
job_dict = {
|
||||||
job_dict['status'] = self.render_status().value
|
'id': self.id,
|
||||||
job_dict['time_elapsed'] = self.time_elapsed() if type(self.time_elapsed) != str else self.time_elapsed
|
'name': self.name,
|
||||||
job_dict['file_hash'] = self.file_hash
|
'input_path': self.input_path,
|
||||||
job_dict['percent_complete'] = self.percent_complete()
|
'output_path': self.output_path,
|
||||||
job_dict['file_list'] = self.file_list()
|
'priority': self.priority,
|
||||||
job_dict['worker'] = self.worker.__dict__.copy()
|
'owner': self.owner,
|
||||||
job_dict['worker']['status'] = job_dict['status']
|
'client': self.client,
|
||||||
|
'notify': self.notify,
|
||||||
# remove unwanted keys from dict
|
'date_created': self.date_created,
|
||||||
keys_to_remove = ['thread', 'process']
|
'scheduled_start': self.scheduled_start,
|
||||||
for key in job_dict['worker'].keys():
|
'status': self.render_status().value,
|
||||||
if key.startswith('_'):
|
'time_elapsed': self.worker().time_elapsed() if hasattr(self.worker(), 'time_elapsed') else None,
|
||||||
keys_to_remove.append(key)
|
'file_hash': self.file_hash,
|
||||||
for key in keys_to_remove:
|
'percent_complete': self.percent_complete(),
|
||||||
job_dict['worker'].pop(key, None)
|
'file_list': self.file_list(),
|
||||||
|
'renderer': self.renderer,
|
||||||
|
'worker': self.worker().json() if hasattr(self.worker(), 'json') else {},
|
||||||
|
}
|
||||||
|
|
||||||
# convert to json and back to auto-convert dates to iso format
|
# convert to json and back to auto-convert dates to iso format
|
||||||
def date_serializer(o):
|
def date_serializer(o):
|
||||||
@@ -138,7 +141,7 @@ class ScheduledJob(Base):
|
|||||||
return glob.glob(os.path.join(job_dir, '*'))
|
return glob.glob(os.path.join(job_dir, '*'))
|
||||||
|
|
||||||
def log_path(self):
|
def log_path(self):
|
||||||
return self.worker.log_path
|
return os.path.join(os.path.dirname(self.input_path), self.name + '.log')
|
||||||
|
|
||||||
def percent_complete(self):
|
def percent_complete(self):
|
||||||
return self.worker.percent_complete()
|
return self.worker.percent_complete()
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ columns: [
|
|||||||
data: (row) => row.name,
|
data: (row) => row.name,
|
||||||
formatter: (name, row) => gridjs.html(`<a href="/ui/job/${row.cells[0].data}/full_details">${name}</a>`)
|
formatter: (name, row) => gridjs.html(`<a href="/ui/job/${row.cells[0].data}/full_details">${name}</a>`)
|
||||||
},
|
},
|
||||||
{ id: 'renderer', data: (row) => `${row.renderer}-${row.worker.renderer_version}`, name: 'Renderer' },
|
{ id: 'renderer', data: (row) => `${row.renderer}-${row.worker?.renderer_version}`, name: 'Renderer' },
|
||||||
{ id: 'priority', name: 'Priority' },
|
{ id: 'priority', name: 'Priority' },
|
||||||
{ id: 'status',
|
{ id: 'status',
|
||||||
name: 'Status',
|
name: 'Status',
|
||||||
@@ -21,9 +21,9 @@ columns: [
|
|||||||
value="${(parseFloat(cell.percent_complete) * 100.0)}" max="100">${cell.status}</progress>
|
value="${(parseFloat(cell.percent_complete) * 100.0)}" max="100">${cell.status}</progress>
|
||||||
`)},
|
`)},
|
||||||
{ id: 'time_elapsed', name: 'Time Elapsed' },
|
{ id: 'time_elapsed', name: 'Time Elapsed' },
|
||||||
{ data: (row) => row.worker.total_frames, name: 'Frame Count' },
|
{ data: (row) => row.worker?.total_frames ?? 'N/A', name: 'Frame Count' },
|
||||||
{ id: 'client', name: 'Client'},
|
{ id: 'client', name: 'Client'},
|
||||||
{ data: (row) => row.worker.last_output,
|
{ data: (row) => row.worker?.last_output ?? 'N/A',
|
||||||
name: 'Last Output',
|
name: 'Last Output',
|
||||||
formatter: (output, row) => gridjs.html(`<a href="/api/job/${row.cells[0].data}/logs">${output}</a>`)
|
formatter: (output, row) => gridjs.html(`<a href="/api/job/${row.cells[0].data}/logs">${output}</a>`)
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user