mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Add json and time_elapsed methods to render_worker.py
This commit is contained in:
@@ -4,6 +4,7 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
@@ -208,14 +209,54 @@ class BaseRenderWorker(object):
|
|||||||
def _parse_stdout(self, line):
|
def _parse_stdout(self, line):
|
||||||
raise NotImplementedError("_parse_stdout not implemented")
|
raise NotImplementedError("_parse_stdout not implemented")
|
||||||
|
|
||||||
def elapsed_time(self):
|
def time_elapsed(self):
|
||||||
elapsed = ""
|
|
||||||
if self.start_time:
|
from string import Template
|
||||||
if self.end_time:
|
|
||||||
elapsed = self.end_time - self.start_time
|
class DeltaTemplate(Template):
|
||||||
elif self.is_running():
|
delimiter = "%"
|
||||||
elapsed = datetime.now() - self.start_time
|
|
||||||
return elapsed
|
def strfdelta(tdelta, fmt='%H:%M:%S'):
|
||||||
|
d = {"D": tdelta.days}
|
||||||
|
hours, rem = divmod(tdelta.seconds, 3600)
|
||||||
|
minutes, seconds = divmod(rem, 60)
|
||||||
|
d["H"] = '{:02d}'.format(hours)
|
||||||
|
d["M"] = '{:02d}'.format(minutes)
|
||||||
|
d["S"] = '{:02d}'.format(seconds)
|
||||||
|
t = DeltaTemplate(fmt)
|
||||||
|
return t.substitute(**d)
|
||||||
|
|
||||||
|
# calculate elapsed time
|
||||||
|
elapsed_time = None
|
||||||
|
start_time = self.start_time
|
||||||
|
end_time = self.end_time
|
||||||
|
|
||||||
|
if start_time:
|
||||||
|
if end_time:
|
||||||
|
elapsed_time = end_time - start_time
|
||||||
|
elif self.status == RenderStatus.RUNNING:
|
||||||
|
elapsed_time = datetime.now() - start_time
|
||||||
|
|
||||||
|
elapsed_time_string = strfdelta(elapsed_time) if elapsed_time else "Unknown"
|
||||||
|
return elapsed_time_string
|
||||||
|
|
||||||
|
def json(self):
|
||||||
|
worker_data = self.__dict__.copy()
|
||||||
|
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)
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
worker_json = json.loads(json_convert)
|
||||||
|
return worker_json
|
||||||
|
|
||||||
|
|
||||||
class BaseRenderEngine(object):
|
class BaseRenderEngine(object):
|
||||||
|
|||||||
Reference in New Issue
Block a user