Cleanup dependencies on old attributes. Remove scheduled_job.py.

This commit is contained in:
Brett Williams
2023-05-30 22:53:37 -05:00
parent 6533481391
commit 130bdbb3b1
2 changed files with 44 additions and 188 deletions

View File

@@ -5,6 +5,7 @@ import os
import subprocess
import threading
import json
import glob
from datetime import datetime
from enum import Enum
@@ -37,7 +38,7 @@ def string_to_status(string):
class BaseRenderWorker(Base):
__tablename__ = 'render_workers'
id = Column(Integer, primary_key=True)
id = Column(String, primary_key=True)
input_path = Column(String)
output_path = Column(String)
date_created = Column(DateTime)
@@ -46,6 +47,7 @@ class BaseRenderWorker(Base):
renderer = Column(String)
renderer_version = Column(String)
priority = Column(Integer)
total_frames = Column(Integer)
owner = Column(String)
client = Column(String)
name = Column(String)
@@ -65,7 +67,12 @@ class BaseRenderWorker(Base):
if not self.engine:
raise NotImplementedError("Engine not defined")
def generate_id():
import uuid
return str(uuid.uuid4()).split('-')[0]
# Essential Info
self.id = generate_id()
self.input_path = input_path
self.output_path = output_path
self.args = args or {}
@@ -82,7 +89,6 @@ class BaseRenderWorker(Base):
self.current_frame = 0
# Logging
self.log_path = None
self.start_time = None
self.end_time = None
@@ -139,6 +145,11 @@ class BaseRenderWorker(Base):
def generate_worker_subprocess(self):
raise NotImplementedError("generate_worker_subprocess not implemented")
def log_path(self):
filename = (self.name or os.path.basename(self.input_path)) + '_' + \
self.date_created.strftime("%Y.%m.%d_%H.%M.%S") + '.log'
return os.path.join(os.path.dirname(self.input_path), filename)
def start(self):
if not os.path.exists(self.input_path):
@@ -160,17 +171,9 @@ class BaseRenderWorker(Base):
self.__thread.start()
def run(self):
# Setup logging
try:
if not self.log_path:
log_dir = os.path.join(os.path.dirname(self.input_path), 'logs')
if not os.path.exists(log_dir):
os.makedirs(log_dir)
self.log_path = os.path.join(log_dir, os.path.basename(self.input_path)) + '.log'
logger.info('Logs saved in {}'.format(self.log_path))
except Exception as e:
logger.error("Error setting up logging: {}".format(e))
log_dir = os.path.dirname(self.log_path())
os.makedirs(log_dir, exist_ok=True)
while self.failed_attempts < self.maximum_attempts and self.status is not RenderStatus.COMPLETED:
@@ -184,7 +187,7 @@ class BaseRenderWorker(Base):
universal_newlines=False)
self.start_time = datetime.now()
with open(self.log_path, "a") as f:
with open(self.log_path(), "a") as f:
f.write(f"{self.start_time.isoformat()} - Starting {self.engine.name()} {self.engine.version()} "
f"Render for {self.input_path}")
@@ -295,27 +298,41 @@ class BaseRenderWorker(Base):
elapsed_time_string = strfdelta(elapsed_time) if elapsed_time else "Unknown"
return elapsed_time_string
def file_list(self):
job_dir = os.path.dirname(self.output_path)
file_list = glob.glob(os.path.join(job_dir, '*'))
file_list.sort()
return file_list
def json(self):
worker_data = self.__dict__.copy()
worker_data['percent_complete'] = self.percent_complete()
worker_data['time_elapsed'] = self.time_elapsed()
worker_data['status'] = self.status.value
worker_data['renderer'] = self.renderer
worker_data['name'] = self.name
worker_data['renderer_version'] = self.renderer_version
keys_to_remove = ['thread', 'process'] # remove unwanted keys from dict
for key in worker_data.keys():
if key.startswith('_'):
keys_to_remove.append(key)
for key in keys_to_remove:
worker_data.pop(key, None)
job_dict = {
'id': self.id,
'name': self.name,
'input_path': self.input_path,
'output_path': self.output_path,
'priority': self.priority,
'owner': self.owner,
'client': self.client,
'date_created': self.date_created,
'start_time': self.start_time,
'status': self.status.value,
'time_elapsed': self.time_elapsed(),
'file_hash': self.file_hash,
'percent_complete': self.percent_complete(),
'file_count': len(self.file_list()),
'renderer': self.renderer,
'renderer_version': self.renderer_version,
'errors': getattr(self, 'errors', None),
'total_frames': self.total_frames,
'last_output': getattr(self, 'last_output', None)
}
# convert to json and back to auto-convert dates to iso format
def date_serializer(o):
if isinstance(o, datetime):
return o.isoformat()
json_convert = json.dumps(worker_data, default=date_serializer)
json_convert = json.dumps(job_dict, default=date_serializer)
worker_json = json.loads(json_convert)
return worker_json