Break get_time_elapsed into misc_helper (#10)

This commit is contained in:
2023-06-09 11:10:42 -05:00
committed by GitHub
parent 05c8ac506c
commit 75de367153
4 changed files with 43 additions and 42 deletions

View File

@@ -19,6 +19,7 @@ from rich.tree import Tree
from lib.render_workers.base_worker import RenderStatus, string_to_status from lib.render_workers.base_worker import RenderStatus, string_to_status
from lib.server.server_proxy import RenderServerProxy from lib.server.server_proxy import RenderServerProxy
from lib.utilities.misc_helper import get_time_elapsed
from start_server import start_server from start_server import start_server
""" """
@@ -133,19 +134,14 @@ def create_jobs_table(all_server_data) -> Table:
if job_status == RenderStatus.ERROR and job['errors']: if job_status == RenderStatus.ERROR and job['errors']:
job_text = job_text + "\n" + "\n".join(job['errors']) job_text = job_text + "\n" + "\n".join(job['errors'])
# calculate elapsed time
elapsed_time = job['time_elapsed']
if job['start_time'] and job_status == RenderStatus.RUNNING:
start_time = datetime.datetime.fromisoformat(job['start_time'])
elapsed_time = str(datetime.datetime.now() - start_time)
# Project name # Project name
project_name = job_color + job['name'] project_name = job_color + (job['name'] or os.path.basename(job['input_path']))
elapsed_time = get_time_elapsed(datetime.datetime.fromisoformat(job['start_time']),
datetime.datetime.fromisoformat(job['end_time']))
if job_status == RenderStatus.RUNNING: if job_status == RenderStatus.RUNNING:
job_text = f"{job_color}[bold]Running - {float(job['percent_complete']) * 100:.1f}%" job_text = f"{job_color}[bold]Running - {float(job['percent_complete']) * 100:.1f}%"
delta = datetime.datetime.now() - datetime.datetime.fromisoformat(job['start_time']) elapsed_time = "[bold]" + elapsed_time
elapsed_time = "[bold]" + str(delta)
project_name = "[bold]" + project_name project_name = "[bold]" + project_name
elif job_status == RenderStatus.CANCELLED or job_status == RenderStatus.ERROR: elif job_status == RenderStatus.CANCELLED or job_status == RenderStatus.ERROR:
project_name = "[strike]" + project_name project_name = "[strike]" + project_name

View File

@@ -1,3 +1,4 @@
import datetime
import logging import logging
import tkinter as tk import tkinter as tk
import threading import threading
@@ -9,7 +10,7 @@ from PIL import Image, ImageTk
from lib.client.new_job_window import NewJobWindow from lib.client.new_job_window import NewJobWindow
from lib.server.server_proxy import RenderServerProxy from lib.server.server_proxy import RenderServerProxy
from lib.server.zeroconf_server import ZeroconfServer from lib.server.zeroconf_server import ZeroconfServer
from lib.utilities.misc_helper import launch_url, file_exists_in_mounts from lib.utilities.misc_helper import launch_url, file_exists_in_mounts, get_time_elapsed
logger = logging.getLogger() logger = logging.getLogger()
@@ -300,7 +301,8 @@ class DashboardWindow:
job['renderer'] + "-" + job['renderer_version'], job['renderer'] + "-" + job['renderer_version'],
job['priority'], job['priority'],
display_status, display_status,
job['time_elapsed'], get_time_elapsed(datetime.datetime.fromisoformat(job['start_time']),
datetime.datetime.fromisoformat(job['end_time'])),
job['total_frames'], job['total_frames'],
job['date_created'], job['date_created'],
job['owner']) job['owner'])

View File

@@ -9,8 +9,9 @@ import glob
from datetime import datetime from datetime import datetime
from enum import Enum from enum import Enum
from sqlalchemy import Column, Integer, String, DateTime, JSON, event from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from lib.utilities.misc_helper import get_time_elapsed
import psutil import psutil
@@ -273,35 +274,7 @@ class BaseRenderWorker(Base):
raise NotImplementedError("_parse_stdout not implemented") raise NotImplementedError("_parse_stdout not implemented")
def time_elapsed(self): def time_elapsed(self):
return get_time_elapsed(self.start_time, self.end_time)
from string import Template
class DeltaTemplate(Template):
delimiter = "%"
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 file_list(self): def file_list(self):
job_dir = os.path.dirname(self.output_path) job_dir = os.path.dirname(self.output_path)
@@ -322,7 +295,6 @@ class BaseRenderWorker(Base):
'start_time': self.start_time, 'start_time': self.start_time,
'end_time': self.end_time, 'end_time': self.end_time,
'status': self.status.value, 'status': self.status.value,
'time_elapsed': self.time_elapsed(),
'file_hash': self.file_hash, 'file_hash': self.file_hash,
'percent_complete': self.percent_complete(), 'percent_complete': self.percent_complete(),
'file_count': len(self.file_list()), 'file_count': len(self.file_list()),

View File

@@ -1,6 +1,7 @@
import logging import logging
import os import os
import subprocess import subprocess
from datetime import datetime
logger = logging.getLogger() logger = logging.getLogger()
@@ -55,3 +56,33 @@ def file_exists_in_mounts(filepath):
possible_mount_path = os.path.join(root, mount, filepath.split(component)[-1].lstrip('/')) possible_mount_path = os.path.join(root, mount, filepath.split(component)[-1].lstrip('/'))
if os.path.exists(possible_mount_path): if os.path.exists(possible_mount_path):
return possible_mount_path return possible_mount_path
def get_time_elapsed(start_time=None, end_time=None):
from string import Template
class DeltaTemplate(Template):
delimiter = "%"
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
if start_time:
if end_time:
elapsed_time = end_time - start_time
else:
elapsed_time = datetime.now() - start_time
elapsed_time_string = strfdelta(elapsed_time) if elapsed_time else None
return elapsed_time_string