Author: eallen
Date: 2008-09-11 17:48:45 -0400 (Thu, 11 Sep 2008)
New Revision: 2456
Modified:
mgmt/trunk/cumin/python/cumin/job.py
mgmt/trunk/cumin/python/cumin/job.strings
Log:
Added All/Running/Held/Deleted phase to jobsets.
Modified: mgmt/trunk/cumin/python/cumin/job.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.py 2008-09-11 21:48:06 UTC (rev 2455)
+++ mgmt/trunk/cumin/python/cumin/job.py 2008-09-11 21:48:45 UTC (rev 2456)
@@ -67,11 +67,14 @@
col.alignment = "right"
self.add_hidden_column(col)
+ self.phase = JobStatusSwitch(app, "phase")
+ self.add_child(self.phase)
+
def get_args(self, session):
return self.frame.get_args(session)
- def render_title(self, session, job):
- return "Jobs %s" % fmt_count(self.get_item_count(session, job))
+ def get_phase_sql(self, session):
+ return self.phase.get_sql_constraint(session)
class ArgsColumn(SqlTableColumn):
def render_title(self, session, data):
@@ -213,19 +216,82 @@
self.__tabs.add_tab(SystemSet(app, "systems"))
self.__tabs.add_tab(CuminDetails(app, "details"))
+class JobRemoveButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_remove(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Remove"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return phase == "d" and "disabled=\"disabled\"" or
None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return phase == "d" and "disabled" or "enabled"
+
+class JobHoldButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_hold(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Hold"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "h" or phase == "d") and
"disabled=\"disabled\"" or None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "h" or phase == "d") and
"disabled" or "enabled"
+
+class JobReleaseButton(FormButton):
+ def process_submit(self, session):
+ ids = self.parent.ids.get(session)
+ self.parent.ids.clear(session)
+
+ branch = session.branch()
+ frame = self.frame.show_jobs_release(branch)
+ frame.ids.set(branch, ids)
+ self.page.set_redirect_url(session, branch.marshal())
+
+ def render_content(self, session):
+ return "Release"
+
+ def render_disabled_attr(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "r" or phase == "d") and
"disabled=\"disabled\"" or None
+
+ def render_class(self, session, *args):
+ phase = self.parent.phase.get(session)
+ return (phase == "r" or phase == "d") and
"disabled" or "enabled"
+
class JobGroupJobSet(JobSet, Form):
def __init__(self, app, name):
super(JobGroupJobSet, self).__init__(app, name)
self.set_default_column_name("global_job_id")
- self.__remove = self.Remove(app, "remove", self)
+ self.__remove = JobRemoveButton(app, "remove", self)
self.add_child(self.__remove)
- self.__hold = self.Hold(app, "hold", self)
+ self.__hold = JobHoldButton(app, "hold", self)
self.add_child(self.__hold)
- self.__release = self.Release(app, "release", self)
+ self.__release = JobReleaseButton(app, "release", self)
self.add_child(self.__release)
def pre_render(self, session, args):
@@ -235,50 +301,15 @@
self.show_column(session, "job_status")
self.show_column(session, "scheduler")
+ def render_title(self, session, group):
+ where_group = "custom_group = '%s'" % group.get_id()
+ return "Jobs %s" % fmt_count(Job.select(where_group).count())
+
def render_sql_where(self, session, group):
- where = "where j.custom_group = '%s'" % group.get_id()
- return where
+ phase_sql = self.get_phase_sql(session)
+ group_sql = "j.custom_group = '%s'" % group.get_id()
+ return "where %s" % " and ".join([phase_sql, group_sql])
- class Remove(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_remove(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Remove"
-
- class Hold(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_hold(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Hold"
-
- class Release(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_release(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Release"
-
-
class JobGroupStatus(CuminStatus):
def render_color(self, session, job_group):
#return JobStatusInfo.get_status_color(job.JobStatus)
@@ -699,14 +730,23 @@
return self.frame.get_args(session)
def render_title(self, session, job):
- return "Jobs %s" % fmt_count(self.job_tab.get_item_count(session,
job))
+ return "Jobs %s" %
fmt_count(Job.select().count())#self.job_tab.get_item_count(session, job))
+ def show_status_switch(self, session):
+ is_group = self.is_group.get(session)
+ return is_group == "j"
+
def set_switch(self, session, switch):
if switch == "group":
self.is_group.set(session, "g")
else:
self.is_group.set(session, "j")
+ def render_phase(self, session, *args):
+ is_group = self.is_group.get(session)
+ if is_group == "j":
+ return self.job_tab.phase.render(session)
+
def render_jobs(self, session, args):
is_group = self.is_group.get(session)
if is_group == "j":
@@ -723,13 +763,13 @@
self.set_default_column_name("global_job_id")
- self.__remove = self.Remove(app, "remove", self)
+ self.__remove = JobRemoveButton(app, "remove", self)
self.add_child(self.__remove)
- self.__hold = self.Hold(app, "hold", self)
+ self.__hold = JobHoldButton(app, "hold", self)
self.add_child(self.__hold)
- self.__release = self.Release(app, "release", self)
+ self.__release = JobReleaseButton(app, "release", self)
self.add_child(self.__release)
def pre_render(self, session, args):
@@ -741,45 +781,10 @@
self.show_column(session, "scheduler")
self.show_column(session, "job_status")
- class Remove(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
+ def render_sql_where(self, session, *args):
+ phase_sql = self.get_phase_sql(session)
+ return "where %s" % phase_sql
- branch = session.branch()
- frame = self.frame.show_jobs_remove(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Remove"
-
- class Hold(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_hold(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Hold"
-
- class Release(FormButton):
- def process_submit(self, session):
- ids = self.parent.ids.get(session)
- self.parent.ids.clear(session)
-
- branch = session.branch()
- frame = self.frame.show_jobs_release(branch)
- frame.ids.set(branch, ids)
- self.page.set_redirect_url(session, branch.marshal())
-
- def render_content(self, session):
- return "Release"
-
class JobGroupTab(JobGroupSet, Form):
def __init__(self, app, name):
super(JobGroupTab, self).__init__(app, name)
@@ -995,6 +1000,31 @@
def render_reason_text(self, session, *args):
return "Remove Reason"
+class JobStatusSwitch(StateSwitch):
+ def __init__(self, app, name):
+ super(JobStatusSwitch, self).__init__(app, name)
+
+ self.add_state("a", "All")
+ self.add_state("r", "Running")
+ self.add_state("h", "Held")
+ self.add_state("d", "Deleted")
+
+ def get_sql_constraint(self, session):
+ phase = self.get(session)
+
+ if phase == "a":
+ sql = "j.deletion_time is null"
+ elif phase == "r":
+ sql = "(j.job_status = %i" %
JobStatusInfo.get_status_int("Running") + \
+ " and j.deletion_time is null)"
+ elif phase == "h":
+ sql = "(j.job_status = %i" %
JobStatusInfo.get_status_int("Held") + \
+ " and j.deletion_time is null)"
+ else:
+ sql = "j.deletion_time is not null"
+
+ return sql
+
class JobStatusInfo(object):
stat_strings = ["Unexpanded", "Idle", "Running",
"Removed", "Completed", "Held", "Submission
Error"]
stat_colors = ["red", "green", "green",
"green", "green", "yellow", "red"]
@@ -1004,6 +1034,7 @@
return cls.stat_strings[stat]
except:
return ""
+
@classmethod
def get_status_color(cls, stat):
try:
@@ -1011,3 +1042,10 @@
except:
return "red"
+ @classmethod
+ def get_status_int(cls, stat):
+ try:
+ return cls.stat_strings.index(stat)
+ except:
+ return -1
+
Modified: mgmt/trunk/cumin/python/cumin/job.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/job.strings 2008-09-11 21:48:06 UTC (rev 2455)
+++ mgmt/trunk/cumin/python/cumin/job.strings 2008-09-11 21:48:45 UTC (rev 2456)
@@ -84,6 +84,7 @@
[JobsAndGroupsTab.html]
+ <div class="rfloat">{phase}</div>
{group}
{jobs}{job_groups}
@@ -113,10 +114,11 @@
</form>
[JobGroupJobSet.html]
-<form id="{id}" method="post" action="?">
+ <div class="rfloat">{phase}</div>
+<form id="{id}" style="clear:right;" method="post"
action="?">
<div class="sactions">
- <h2>Act on Selected Groups:</h2>
+ <h2>Act on Selected Jobs:</h2>
{hold} {release} {remove}
</div>