diff options
author | Martin Poirier <theeth@yahoo.com> | 2012-04-23 01:06:02 +0400 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2012-04-23 01:06:02 +0400 |
commit | 395bca8bda4dcd8b57ac64abeb103a456491c0bf (patch) | |
tree | 6362e358dea6d8d2006a93282d45b1ecb53c47c9 | |
parent | 4dd5ac39b82cec6302d4fd699ef13ceb5ccceb53 (diff) |
netrender
job and frame status cleanup (move to the model module)
record transitions between states in job to be able to get (among others) the started and finished time.
-rw-r--r-- | netrender/balancing.py | 6 | ||||
-rw-r--r-- | netrender/master.py | 54 | ||||
-rw-r--r-- | netrender/master_html.py | 44 | ||||
-rw-r--r-- | netrender/model.py | 122 | ||||
-rw-r--r-- | netrender/operators.py | 4 | ||||
-rw-r--r-- | netrender/slave.py | 26 | ||||
-rw-r--r-- | netrender/ui.py | 6 | ||||
-rw-r--r-- | netrender/utils.py | 27 |
8 files changed, 182 insertions, 107 deletions
diff --git a/netrender/balancing.py b/netrender/balancing.py index cd2f12da..ee347452 100644 --- a/netrender/balancing.py +++ b/netrender/balancing.py @@ -167,7 +167,7 @@ class NewJobPriority(PriorityRule): return "Priority to new jobs" def test(self, job): - return job.countFrames(status = FRAME_DONE) < self.limit + return job.countFrames(status = netrender.model.FRAME_DONE) < self.limit def serialize(self): return { "type": "priority", "enabled": self.enabled, @@ -193,7 +193,7 @@ class MinimumTimeBetweenDispatchPriority(PriorityRule): return "Priority to jobs that haven't been dispatched recently" def test(self, job): - return job.countFrames(status = FRAME_DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit + return job.countFrames(status = netrender.model.FRAME_DISPATCHED) == 0 and (time.time() - job.last_dispatched) / 60 > self.limit def serialize(self): return { "type": "priority", @@ -214,7 +214,7 @@ class ExcludeQueuedEmptyJob(ExclusionRule): return "Exclude non queued or empty jobs" def test(self, job): - return job.status != JOB_QUEUED or job.countFrames(status = FRAME_QUEUED) == 0 + return job.status != netrender.model.JOB_QUEUED or job.countFrames(status = netrender.model.FRAME_QUEUED) == 0 def serialize(self): return { "type": "exception", diff --git a/netrender/master.py b/netrender/master.py index 69a185b1..593ee727 100644 --- a/netrender/master.py +++ b/netrender/master.py @@ -91,7 +91,7 @@ class MRenderJob(netrender.model.RenderJob): self.chunks = 1 # Force WAITING status on creation - self.status = JOB_WAITING + self.status = netrender.model.JOB_WAITING # special server properties self.last_update = 0 @@ -135,25 +135,25 @@ class MRenderJob(netrender.model.RenderJob): def testFinished(self): for f in self.frames: - if f.status == FRAME_QUEUED or f.status == FRAME_DISPATCHED: + if f.status == netrender.model.FRAME_QUEUED or f.status == netrender.model.FRAME_DISPATCHED: break else: - self.status = JOB_FINISHED + self.status = netrender.model.JOB_FINISHED self.finish_time=time.time() def pause(self, status = None): - if self.status not in {JOB_PAUSED, JOB_QUEUED}: + if self.status not in {netrender.model.JOB_PAUSED, netrender.model.JOB_QUEUED}: return if status is None: - self.status = JOB_PAUSED if self.status == JOB_QUEUED else JOB_QUEUED + self.status = netrender.model.JOB_PAUSED if self.status == netrender.model.JOB_QUEUED else netrender.model.JOB_QUEUED elif status: - self.status = JOB_QUEUED + self.status = netrender.model.JOB_QUEUED else: - self.status = JOB_PAUSED + self.status = netrender.model.JOB_PAUSED def start(self): - self.status = JOB_QUEUED + self.status = netrender.model.JOB_QUEUED def addLog(self, frames): @@ -176,12 +176,12 @@ class MRenderJob(netrender.model.RenderJob): f.reset(all) if all: - self.status = JOB_QUEUED + self.status = netrender.model.JOB_QUEUED def getFrames(self): frames = [] for f in self.frames: - if f.status == FRAME_QUEUED: + if f.status == netrender.model.FRAME_QUEUED: self.last_dispatched = time.time() frames.append(f) if len(frames) >= self.chunks: @@ -198,7 +198,7 @@ class MRenderFrame(netrender.model.RenderFrame): self.number = frame self.slave = None self.time = 0 - self.status = FRAME_QUEUED + self.status = netrender.model.FRAME_QUEUED self.command = command self.log_path = None @@ -210,11 +210,11 @@ class MRenderFrame(netrender.model.RenderFrame): return "%06d.exr" % self.number def reset(self, all): - if all or self.status == FRAME_ERROR: + if all or self.status == netrender.model.FRAME_ERROR: self.log_path = None self.slave = None self.time = 0 - self.status = FRAME_QUEUED + self.status = netrender.model.FRAME_QUEUED # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= @@ -311,9 +311,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[frame_number] if frame: - if frame.status in (FRAME_QUEUED, FRAME_DISPATCHED): + if frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED): self.send_head(http.client.ACCEPTED) - elif frame.status == FRAME_DONE: + elif frame.status == netrender.model.FRAME_DONE: self.server.stats("", "Sending result to client") filename = job.getResultPath(frame.getRenderFilename()) @@ -322,7 +322,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.send_head(content = "image/x-exr") shutil.copyfileobj(f, self.wfile) f.close() - elif frame.status == FRAME_ERROR: + elif frame.status == netrender.model.FRAME_ERROR: self.send_head(http.client.PARTIAL_CONTENT) else: # no such frame @@ -348,7 +348,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): zip_filepath = job.getResultPath("results.zip") with zipfile.ZipFile(zip_filepath, "w") as zfile: for frame in job.frames: - if frame.status == FRAME_DONE: + if frame.status == netrender.model.FRAME_DONE: for filename in frame.results: filepath = job.getResultPath(filename) @@ -379,9 +379,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[frame_number] if frame: - if frame.status in (FRAME_QUEUED, FRAME_DISPATCHED): + if frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED): self.send_head(http.client.ACCEPTED) - elif frame.status == FRAME_DONE: + elif frame.status == netrender.model.FRAME_DONE: filename = job.getResultPath(frame.getRenderFilename()) thumbname = thumbnail.generate(filename) @@ -394,7 +394,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): else: # thumbnail couldn't be generated self.send_head(http.client.PARTIAL_CONTENT) return - elif frame.status == FRAME_ERROR: + elif frame.status == netrender.model.FRAME_ERROR: self.send_head(http.client.PARTIAL_CONTENT) else: # no such frame @@ -419,7 +419,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): frame = job[frame_number] if frame: - if not frame.log_path or frame.status in (FRAME_QUEUED, FRAME_DISPATCHED): + if not frame.log_path or frame.status in (netrender.model.FRAME_QUEUED, netrender.model.FRAME_DISPATCHED): self.send_head(http.client.PROCESSING) else: self.server.stats("", "Sending log to client") @@ -488,7 +488,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): if job and frames: for f in frames: print("dispatch", f.number) - f.status = FRAME_DISPATCHED + f.status = netrender.model.FRAME_DISPATCHED f.slave = slave slave.job = job @@ -838,11 +838,11 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.send_head(content = None) if job.hasRenderResult(): - if job_result == FRAME_DONE: + if job_result == netrender.model.FRAME_DONE: frame.addDefaultRenderResult() self.write_file(job.getResultPath(frame.getRenderFilename())) - elif job_result == FRAME_ERROR: + elif job_result == netrender.model.FRAME_ERROR: # blacklist slave on this job on error # slaves might already be in blacklist if errors on the whole chunk if not slave.id in job.blacklist: @@ -885,7 +885,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler): self.send_head(content = None) - if job_result == FRAME_DONE: + if job_result == netrender.model.FRAME_DONE: result_filename = self.headers['result-filename'] frame.results.append(result_filename) @@ -1045,7 +1045,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer): if slave.job: for f in slave.job_frames: - slave.job[f].status = FRAME_ERROR + slave.job[f].status = netrender.model.FRAME_ERROR for slave in removed: self.removeSlave(slave) @@ -1075,7 +1075,7 @@ class RenderMasterServer(socketserver.ThreadingMixIn, http.server.HTTPServer): def getJobs(self): return self.jobs - def countJobs(self, status = JOB_QUEUED): + def countJobs(self, status = netrender.model.JOB_QUEUED): total = 0 for j in self.jobs: if j.status == status: diff --git a/netrender/master_html.py b/netrender/master_html.py index 39c7f811..8ee0fe4f 100644 --- a/netrender/master_html.py +++ b/netrender/master_html.py @@ -134,16 +134,16 @@ def get(handler): serializedJob = job.serialize(withFiles=includeFiles, withFrames=includeFrames) serializedJob["p_rule"] = handler.server.balancer.applyPriorities(job) serializedJob["e_rule"] = handler.server.balancer.applyExceptions(job) - serializedJob["wait"] = int(time.time() - job.last_dispatched) if job.status != JOB_FINISHED else "N/A" + serializedJob["wait"] = int(time.time() - job.last_dispatched) if job.status != netrender.model.JOB_FINISHED else "N/A" serializedJob["length"] = len(job); - serializedJob["done"] = results[FRAME_DONE] - serializedJob["dispatched"] = results[FRAME_DISPATCHED] - serializedJob["error"] = results[FRAME_ERROR] + serializedJob["done"] = results[netrender.model.FRAME_DONE] + serializedJob["dispatched"] = results[netrender.model.FRAME_DISPATCHED] + serializedJob["error"] = results[netrender.model.FRAME_ERROR] tot_cache, tot_fluid, tot_other = countFiles(job) serializedJob["totcache"] = tot_cache serializedJob["totfluid"] = tot_fluid serializedJob["totother"] = tot_other - serializedJob["wktime"] = (time.time()-job.start_time ) if job.status != JOB_FINISHED else (job.finish_time-job.start_time) + serializedJob["wktime"] = (time.time()-job.start_time ) if job.status != netrender.model.JOB_FINISHED else (job.finish_time-job.start_time) else: serializedJob={"name":"invalid job"} @@ -327,13 +327,19 @@ def get(handler): "dispatched", "error", "priority", - "exception" + "exception", + "started", + "finished" ) handler.server.balance() for job in handler.server.jobs: results = job.framesStatus() + + time_finished = job.time_finished + time_started = job.time_started + rowTable( """<button title="cancel job" onclick="cancel_job('%s');">X</button>""" % job.id + """<button title="pause job" onclick="request('/pause_%s', null);">P</button>""" % job.id + @@ -350,15 +356,17 @@ def get(handler): """<button title="increase priority" onclick="request('/edit_%s', "{'priority': %i}");">+</button>""" % (job.id, job.priority + 1) + """<button title="decrease priority" onclick="request('/edit_%s', "{'priority': %i}");" %s>-</button>""" % (job.id, job.priority - 1, "disabled=True" if job.priority == 1 else ""), "%0.1f%%" % (job.usage * 100), - "%is" % int(time.time() - job.last_dispatched) if job.status != JOB_FINISHED else "N/A", + "%is" % int(time.time() - job.last_dispatched) if job.status != netrender.model.JOB_FINISHED else "N/A", job.statusText(), len(job), - results[FRAME_DONE], - results[FRAME_DISPATCHED], - str(results[FRAME_ERROR]) + - """<button title="reset error frames" onclick="request('/reset_%s_0', null);" %s>R</button>""" % (job.id, "disabled=True" if not results[FRAME_ERROR] else ""), + results[netrender.model.FRAME_DONE], + results[netrender.model.FRAME_DISPATCHED], + str(results[netrender.model.FRAME_ERROR]) + + """<button title="reset error frames" onclick="request('/reset_%s_0', null);" %s>R</button>""" % (job.id, "disabled=True" if not results[netrender.model.FRAME_ERROR] else ""), "yes" if handler.server.balancer.applyPriorities(job) else "no", - "yes" if handler.server.balancer.applyExceptions(job) else "no" + "yes" if handler.server.balancer.applyExceptions(job) else "no", + time.ctime(time_started) if time_started else "Not Started", + time.ctime(time_finished) if time_finished else "Not Finished" ) endTable() @@ -503,6 +511,16 @@ def get(handler): endTable() + output("<h2>Transitions</h2>") + + startTable() + headerTable("Event", "Time") + + for transition, time_value in job.transitions: + rowTable(transition, time.ctime(time_value)) + + endTable() + output("<h2>Frames</h2>") startTable() @@ -518,7 +536,7 @@ def get(handler): frame.slave.name if frame.slave else " ", link("view log", logURL(job_id, frame.number)) if frame.log_path else " ", link("view result", renderURL(job_id, frame.number)) + " [" + - tag("span", "show", attr="class='thumb' onclick='showThumb(%s, %i)'" % (job.id, frame.number)) + "]" if frame.status == FRAME_DONE else " ", + tag("span", "show", attr="class='thumb' onclick='showThumb(%s, %i)'" % (job.id, frame.number)) + "]" if frame.status == netrender.model.FRAME_DONE else " ", "<img name='thumb%i' title='hide thumbnails' src='' class='thumb' onclick='showThumb(%s, %i)'>" % (frame.number, job.id, frame.number) ) else: diff --git a/netrender/model.py b/netrender/model.py index d4d00bbf..4153f936 100644 --- a/netrender/model.py +++ b/netrender/model.py @@ -19,6 +19,70 @@ import netrender.versioning as versioning from netrender.utils import * +import time + +# Jobs status +JOB_WAITING = 0 # before all data has been entered +JOB_PAUSED = 1 # paused by user +JOB_FINISHED = 2 # finished rendering +JOB_QUEUED = 3 # ready to be dispatched + +JOB_STATUS_TEXT = { + JOB_WAITING: "Waiting", + JOB_PAUSED: "Paused", + JOB_FINISHED: "Finished", + JOB_QUEUED: "Queued" + } + +JOB_TRANSITION_STARTED = "Started" +JOB_TRANSITION_PAUSED = "Paused" +JOB_TRANSITION_RESUMED = "Resumed" +JOB_TRANSITION_FINISHED = "Finished" +JOB_TRANSITION_RESTARTED = "Restarted" + +JOB_TRANSITIONS = { + (JOB_WAITING, JOB_QUEUED) : JOB_TRANSITION_STARTED, + (JOB_QUEUED, JOB_PAUSED) : JOB_TRANSITION_PAUSED, + (JOB_PAUSED, JOB_QUEUED) : JOB_TRANSITION_RESUMED, + (JOB_QUEUED, JOB_FINISHED) : JOB_TRANSITION_FINISHED, + (JOB_FINISHED, JOB_QUEUED) : JOB_TRANSITION_RESTARTED + } + +# Job types (depends on the dependency type) +JOB_BLENDER = 1 +JOB_PROCESS = 2 +JOB_VCS = 3 + +JOB_TYPES = { + JOB_BLENDER: "Blender", + JOB_PROCESS: "Process", + JOB_VCS: "Versioned", + } + +JOB_SUB_RENDER = 1 +JOB_SUB_BAKING = 2 + +# Job subtypes +JOB_SUBTYPES = { + JOB_SUB_RENDER: "Render", + JOB_SUB_BAKING: "Baking", + } + + +# Frames status +FRAME_QUEUED = 0 +FRAME_DISPATCHED = 1 +FRAME_DONE = 2 +FRAME_ERROR = 3 + +FRAME_STATUS_TEXT = { + FRAME_QUEUED: "Queued", + FRAME_DISPATCHED: "Dispatched", + FRAME_DONE: "Done", + FRAME_ERROR: "Error" + } + +# Tags TAG_BAKING = "baking" TAG_RENDER = "render" @@ -106,24 +170,6 @@ class RenderSlave: return slave -JOB_BLENDER = 1 -JOB_PROCESS = 2 -JOB_VCS = 3 - -JOB_TYPES = { - JOB_BLENDER: "Blender", - JOB_PROCESS: "Process", - JOB_VCS: "Versioned", - } - -JOB_SUB_RENDER = 1 -JOB_SUB_BAKING = 2 - -JOB_SUBTYPES = { - JOB_SUB_RENDER: "Render", - JOB_SUB_BAKING: "Baking", - } - class VersioningInfo: def __init__(self, info = None): self._system = None @@ -219,7 +265,10 @@ class RenderJob: self.usage = 0.0 self.last_dispatched = 0.0 self.frames = [] - + self.transitions = [] + + self._status = None + if info: self.type = info.type self.subtype = info.subtype @@ -247,6 +296,39 @@ class RenderJob: self.version_info = None self.render = "BLENDER_RENDER" + @property + def status(self): + """Status of the job (waiting, paused, finished or queued)""" + return self._status + + @status.setter + def status(self, value): + transition = JOB_TRANSITIONS.get((self.status, value), None) + if transition: + self.transitions.append((transition, time.time())) + + self._status = value + + @property + def time_started(self): + started_time = None + for transition, time_value in self.transitions: + if transition == JOB_TRANSITION_STARTED: + started_time = time_value + break + + return started_time + + @property + def time_finished(self): + finished_time = None + if self.status == JOB_FINISHED: + for transition, time_value in self.transitions: + if transition == JOB_TRANSITION_FINISHED: + finished_time = time_value + + return finished_time + def hasRenderResult(self): return self.subtype == JOB_SUB_RENDER @@ -332,6 +414,7 @@ class RenderJob: "category": self.category, "tags": tuple(self.tags), "status": self.status, + "transitions": self.transitions, "chunks": self.chunks, "priority": self.priority, "usage": self.usage, @@ -361,6 +444,7 @@ class RenderJob: job.category = data["category"] job.tags = set(data["tags"]) job.status = data["status"] + job.transitions = data["transitions"] job.files = [RenderFile.materialize(f) for f in data["files"]] job.frames = [RenderFrame.materialize(f) for f in data["frames"]] job.chunks = data["chunks"] diff --git a/netrender/operators.py b/netrender/operators.py index a3a5ef7d..74b2a285 100644 --- a/netrender/operators.py +++ b/netrender/operators.py @@ -410,9 +410,9 @@ class netclientdownload(bpy.types.Operator): nb_missing = 0 for frame in job.frames: - if frame.status == FRAME_DONE: + if frame.status == netrender.model.FRAME_DONE: finished_frames.append(frame.number) - elif frame.status == FRAME_ERROR: + elif frame.status == netrender.model.FRAME_ERROR: nb_error += 1 else: nb_missing += 1 diff --git a/netrender/slave.py b/netrender/slave.py index c3b1f113..bf3819ba 100644 --- a/netrender/slave.py +++ b/netrender/slave.py @@ -65,8 +65,8 @@ def testCancel(conn, job_id, frame_number): else: return False -def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path=None): - job_full_path = createLocalPath(rfile, JOB_PREFIX, main_path, rfile.force) +def testFile(conn, job_id, slave_id, rfile, job_prefix, main_path=None): + job_full_path = createLocalPath(rfile, job_prefix, main_path, rfile.force) found = os.path.exists(job_full_path) @@ -80,9 +80,9 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path=None): if not found: # Force prefix path if not found - job_full_path = createLocalPath(rfile, JOB_PREFIX, main_path, True) + job_full_path = createLocalPath(rfile, job_prefix, main_path, True) print("Downloading", job_full_path) - temp_path = os.path.join(JOB_PREFIX, "slave.temp") + temp_path = os.path.join(job_prefix, "slave.temp") with ConnectionContext(): conn.request("GET", fileURL(job_id, rfile.index), headers={"slave-id":slave_id}) response = conn.getresponse() @@ -166,24 +166,24 @@ def render_slave(engine, netsettings, threads): job = netrender.model.RenderJob.materialize(json.loads(str(response.read(), encoding='utf8'))) engine.update_stats("", "Network render processing job from master") - JOB_PREFIX = os.path.join(NODE_PREFIX, "job_" + job.id) - verifyCreateDir(JOB_PREFIX) + job_prefix = os.path.join(NODE_PREFIX, "job_" + job.id) + verifyCreateDir(job_prefix) # set tempdir for fsaa temp files # have to set environ var because render is done in a subprocess and that's the easiest way to propagate the setting - os.environ["TMP"] = JOB_PREFIX + os.environ["TMP"] = job_prefix if job.type == netrender.model.JOB_BLENDER: job_path = job.files[0].original_path # original path of the first file main_path, main_file = os.path.split(job_path) - job_full_path = testFile(conn, job.id, slave_id, job.files[0], JOB_PREFIX) + job_full_path = testFile(conn, job.id, slave_id, job.files[0], job_prefix) print("Fullpath", job_full_path) print("File:", main_file, "and %i other files" % (len(job.files) - 1,)) for rfile in job.files[1:]: - testFile(conn, job.id, slave_id, rfile, JOB_PREFIX, main_path) + testFile(conn, job.id, slave_id, rfile, job_prefix, main_path) print("\t", rfile.filepath) netrender.repath.update(job) @@ -225,7 +225,7 @@ def render_slave(engine, netsettings, threads): frame_args += ["-f", str(frame.number)] with NoErrorDialogContext(): - process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(JOB_PREFIX, "######"), "-E", job.render, "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + process = subprocess.Popen([BLENDER_PATH, "-b", "-noaudio", job_full_path, "-t", str(threads), "-o", os.path.join(job_prefix, "######"), "-E", job.render, "-F", "MULTILAYER"] + frame_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) elif job.subtype == netrender.model.JOB_SUB_BAKING: tasks = [] @@ -354,13 +354,13 @@ def render_slave(engine, netsettings, threads): if status == 0: # non zero status is error - headers["job-result"] = str(FRAME_DONE) + headers["job-result"] = str(netrender.model.FRAME_DONE) for frame in job.frames: headers["job-frame"] = str(frame.number) if job.hasRenderResult(): # send image back to server - filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number) + filename = os.path.join(job_prefix, "%06d.exr" % frame.number) # thumbnail first if netsettings.use_slave_thumb: @@ -403,7 +403,7 @@ def render_slave(engine, netsettings, threads): if responseStatus(conn) == http.client.NO_CONTENT: continue else: - headers["job-result"] = str(FRAME_ERROR) + headers["job-result"] = str(netrender.model.FRAME_ERROR) for frame in job.frames: headers["job-frame"] = str(frame.number) # send error result back to server diff --git a/netrender/ui.py b/netrender/ui.py index fbf17c8d..4aa085c9 100644 --- a/netrender/ui.py +++ b/netrender/ui.py @@ -26,7 +26,7 @@ from netrender.utils import * from bpy.props import PointerProperty, StringProperty, BoolProperty, EnumProperty, IntProperty, CollectionProperty -VERSION = b"0.3" +VERSION = b"0.5" PATH_PREFIX = "/tmp/" @@ -352,8 +352,8 @@ class RENDER_PT_network_jobs(NeedValidAddress, NetRenderButtonsPanel, bpy.types. layout.label(text="Name: %s" % job.name) layout.label(text="Length: %04i" % len(job)) - layout.label(text="Done: %04i" % job.results[FRAME_DONE]) - layout.label(text="Error: %04i" % job.results[FRAME_ERROR]) + layout.label(text="Done: %04i" % job.results[netrender.model.FRAME_DONE]) + layout.label(text="Error: %04i" % job.results[netrender.model.FRAME_ERROR]) import bl_ui.properties_render as properties_render class RENDER_PT_network_output(NeedValidAddress, NetRenderButtonsPanel, bpy.types.Panel): diff --git a/netrender/utils.py b/netrender/utils.py index 7a2abb6b..ac219210 100644 --- a/netrender/utils.py +++ b/netrender/utils.py @@ -30,33 +30,6 @@ except: VERSION = bytes(".".join((str(n) for n in netrender.bl_info["version"])), encoding='utf8') -# Jobs status -JOB_WAITING = 0 # before all data has been entered -JOB_PAUSED = 1 # paused by user -JOB_FINISHED = 2 # finished rendering -JOB_QUEUED = 3 # ready to be dispatched - -JOB_STATUS_TEXT = { - JOB_WAITING: "Waiting", - JOB_PAUSED: "Paused", - JOB_FINISHED: "Finished", - JOB_QUEUED: "Queued" - } - - -# Frames status -FRAME_QUEUED = 0 -FRAME_DISPATCHED = 1 -FRAME_DONE = 2 -FRAME_ERROR = 3 - -FRAME_STATUS_TEXT = { - FRAME_QUEUED: "Queued", - FRAME_DISPATCHED: "Dispatched", - FRAME_DONE: "Done", - FRAME_ERROR: "Error" - } - try: system = platform.system() except UnicodeDecodeError: |