Author: croberts
Date: 2011-06-15 12:18:00 +0000 (Wed, 15 Jun 2011)
New Revision: 4830
Modified:
trunk/cumin/bin/cumin-web
trunk/cumin/etc/cumin.conf
trunk/cumin/python/cumin/config.py
trunk/cumin/python/cumin/grid/job.py
trunk/cumin/python/cumin/grid/job.strings
trunk/cumin/python/cumin/main.py
Log:
Addressing BZ
https://bugzilla.redhat.com/show_bug.cgi?id=699890 by adding an
"overview" tab to the view of an individual job. By default, it will contain
the folowing attributes: JobStatus, Cmd, Args, ExitStatus, JobStartDate, LastRemoteHost,
LastJobStatus, Owner. That list of attributes can be overridden in cumin.conf to include
any standard or custom attribute.
Modified: trunk/cumin/bin/cumin-web
===================================================================
--- trunk/cumin/bin/cumin-web 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/bin/cumin-web 2011-06-15 12:18:00 UTC (rev 4830)
@@ -92,6 +92,9 @@
cumin.user = values.user
cumin.update_interval = values.update_interval
cumin.max_qmf_table_sort = values.max_qmf_table_sort
+
+ cumin.fast_view_attributes = [x.strip() for x in
values.fast_view_attributes.split(',')]
+
# set default values for form inputs
cumin.set_form_defaults(values.request_memory,
Modified: trunk/cumin/etc/cumin.conf
===================================================================
--- trunk/cumin/etc/cumin.conf 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/etc/cumin.conf 2011-06-15 12:18:00 UTC (rev 4830)
@@ -58,6 +58,7 @@
# update-interval: 10
# max-qmf-table-sort: 1000
# persona: default
+# fast-view-attributes:
JobStatus,Cmd,Args,ExitStatus,JobStartDate,LastRemoteHost,LastJobStatus,Owner
[data]
# log-file: $CUMIN_HOME/log/data.log
Modified: trunk/cumin/python/cumin/config.py
===================================================================
--- trunk/cumin/python/cumin/config.py 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/python/cumin/config.py 2011-06-15 12:18:00 UTC (rev 4830)
@@ -51,6 +51,9 @@
param = ConfigParameter(web, "persona", str)
param.default = "default"
+
+ param = ConfigParameter(web, "fast-view-attributes", str)
+ param.default =
"JobStatus,Cmd,Args,ExitStatus,JobStartDate,LastRemoteHost,LastJobStatus,Owner"
def create_data_section(self, name, strict_section):
data = CuminConfigSection(self, name, strict_section)
Modified: trunk/cumin/python/cumin/grid/job.py
===================================================================
--- trunk/cumin/python/cumin/grid/job.py 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/python/cumin/grid/job.py 2011-06-15 12:18:00 UTC (rev 4830)
@@ -28,11 +28,14 @@
cls = app.model.com_redhat_grid.Submission
super(JobFrame, self).__init__(app, name, cls)
-
+
self.view = JobView(app, "view", self.object)
self.replace_child(self.view)
# view or edit
+ self.fast_view = JobAdFastView(app, "fastads")
+ self.view.add_tab(self.fast_view)
+
self.ads = JobAdModes(app, "ads")
self.view.add_tab(self.ads)
@@ -94,7 +97,17 @@
def render_title(self, session):
return "Attributes"
+
+class JobAdFastView(ModeSet):
+ def __init__(self, app, name):
+ super(JobAdFastView, self).__init__(app, name)
+ self.viewer = FastViewJobAdsViewer(app, "fastviewer")
+ self.add_mode(self.viewer)
+
+ def render_title(self, session):
+ return "Overview"
+
class JobView(ObjectView):
def add_details_tab(self):
pass
@@ -480,7 +493,35 @@
idict["path"] = path
return idict
+
+class FastViewJobAdsSet(JobAdsSet):
+ def __init__(self, app, name):
+ super(FastViewJobAdsSet, self).__init__(app, name)
+
+ def do_get_items(self, session):
+ ad_list = self.items.get(session)
+ error = self.qmf_error.get(session)
+
+ if not ad_list and not error:
+ ad_list = list()
+ id = self.frame.id.get(session)
+ job_server = self.frame.get_job_server(session, id)
+ job_id = self.frame.job_id.get(session)
+ action = QmfCall(self.app, {'JobAd': {}})
+ results = action.execute(job_server, "GetJobAd", job_id)
+ error = results.error
+ self.qmf_error.set(session, error)
+ ads = results.data['JobAd']
+ cls = self.app.model.job_meta_data
+ ad_list = [self.gen_item(x, ads[x], cls, dtype=self.get_type(ads[x])) \
+ for x in ads if not x.startswith("!!") and x in
self.app.fast_view_attributes]
+
+ self.items.set(session, ad_list)
+
+ return ad_list, error
+
+
class JobPropertyRenderer(TemplateRenderer):
def render_title(self, session, item):
title = item["name"]
@@ -517,6 +558,9 @@
if "property" in item:
property = item["property"]
return property.description
+
+ def render_id(self, session, item):
+ return item["property"].name
class JobAdsGroups(Widget):
def __init__(self, app, name):
@@ -606,7 +650,48 @@
group_items.append(item)
return group_items, error
+
+class FastViewJobAdsViewer(FastViewJobAdsSet):
+ def __init__(self, app, name):
+ super(FastViewJobAdsViewer, self).__init__(app, name)
+
+ self.item_renderer = JobPropertyRenderer(self, "property_html")
+ self.wait = Wait(app, "wait")
+ self.add_child(self.wait)
+
+ self.defer_enabled = True
+ self.update_enabled = True
+
+ def render_title(self, session):
+ return "Attributes"
+
+ def get_group_items(self, session, group):
+ group_items = list()
+
+ items, error = self.do_get_items(session)
+ for item in items:
+ if "property" in item:
+ property = item["property"]
+ item_group = property.group
+ else:
+ item_group = "Other"
+ if item_group == group:
+ group_items.append(item)
+
+ return group_items, error
+
+ def render_all_ordered_properties(self, session):
+ items, error = self.do_get_items(session)
+ writer = Writer()
+ viewable_items = self.app.fast_view_attributes
+ for viewable_item in viewable_items:
+ for item in items:
+ if item["name"] == viewable_item:
+ self.item_renderer.render(writer, session, item)
+ break
+ return writer.to_string()
+
class JobAdsEditButton(Widget):
def render_edit_ads_url(self, session):
branch = session.branch()
Modified: trunk/cumin/python/cumin/grid/job.strings
===================================================================
--- trunk/cumin/python/cumin/grid/job.strings 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/python/cumin/grid/job.strings 2011-06-15 12:18:00 UTC (rev 4830)
@@ -181,3 +181,37 @@
</ul>
</div>
</div>
+
+[FastViewJobAdsViewer.html]
+<div id="{id}">
+<table style='width:100%' class="CuminDetails">
+ <tbody>
+ <tr>
+ <td>
+ <table class="PropertySet FastViewPropertySet">
+ <thead>
+ <tr>
+ <th style="width: 33%;">Name</th>
+ <th style="width: 33%;">Value</th>
+ <th style="width: 33%;"> </th>
+ </tr>
+ </thead>
+ <tbody id="properties">
+ {all_ordered_properties}
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+[FastViewJobAdsViewer.deferred_html]
+<div id="{id}">
+ {wait}
+</div>
+
+[FastViewJobAdsViewer.property_html]
+<tr id='{id}'>
+ <th style="width:33%;">{title}</th><td
style="width:33%;">{value}</td><td
style="width:33%;">{inline_help}</td>
+</tr>
\ No newline at end of file
Modified: trunk/cumin/python/cumin/main.py
===================================================================
--- trunk/cumin/python/cumin/main.py 2011-06-14 19:32:23 UTC (rev 4829)
+++ trunk/cumin/python/cumin/main.py 2011-06-15 12:18:00 UTC (rev 4830)
@@ -56,6 +56,8 @@
self.operator_email = None
self.update_interval = 10
self.max_qmf_table_sort = 1000
+
+ self.fast_view_attributes = list()
self.form_defaults = self.CuminFormDefaults()