r5451 - trunk/cumin/python/cumin/grid

croberts at fedoraproject.org croberts at fedoraproject.org
Wed Aug 29 17:59:35 UTC 2012


Author: croberts
Date: 2012-08-29 17:59:33 +0000 (Wed, 29 Aug 2012)
New Revision: 5451

Modified:
   trunk/cumin/python/cumin/grid/negotiator.py
   trunk/cumin/python/cumin/grid/scheduler.py
   trunk/cumin/python/cumin/grid/slotvis.py
   trunk/cumin/python/cumin/grid/submission.py
Log:
For BZ 705358 (making search column selectable), this adds the requested functionality to the submission, slot, scheduler and negotiator tables.  (Limits, Quotas and Configuration tabs are NOT included since they are built on a different set of widgets due to their non-database storage).

Modified: trunk/cumin/python/cumin/grid/negotiator.py
===================================================================
--- trunk/cumin/python/cumin/grid/negotiator.py	2012-08-23 17:07:18 UTC (rev 5450)
+++ trunk/cumin/python/cumin/grid/negotiator.py	2012-08-29 17:59:33 UTC (rev 5451)
@@ -3,11 +3,11 @@
 from cumin.objectframe import ObjectFrame, ObjectFrameTask,\
     ObjectFrameTaskForm
 from cumin.objectselector import ObjectSelector, ObjectLinkColumn,\
-    MonitorSelfStatColumn, ObjectTable, MonitorSelfAgeColumn
+    MonitorSelfStatColumn, ObjectTable, MonitorSelfAgeColumn, SelectableSearchObjectTable
 from wooly import Widget, Attribute, Parameter
 from parsley.stringex import rpartition
 from cumin.parameters import RosemaryObjectParameter
-from wooly.parameters import ListParameter
+from wooly.parameters import ListParameter, StringParameter
 from wooly.template import WidgetTemplate
 from cumin.stat import StatFlashChart
 from sage.util import call_async
@@ -30,7 +30,6 @@
         frame = "main.grid.negotiator"
         col = ObjectLinkColumn(app, "name", cls.Name, cls._id, frame)
         self.add_column(col)
-        self.add_search_filter(col)
 
         self.add_attribute_column(cls.Machine)
         self.add_attribute_column(cls.System)
@@ -42,6 +41,12 @@
         stat = MonitorSelfStatColumn(app, cls.MonitorSelfImageSize.name, cls.MonitorSelfImageSize)
         self.add_column(stat)
 
+        self.field_param = StringParameter(app, "field_param")
+        self.add_parameter(self.field_param)
+        
+        self.select_input = self.NegotiatorFieldOptions(app, self.field_param)
+        self.add_selectable_search_filter(self.select_input)
+
         #self.start = DaemonSelectionStart(app, self, "NEGOTIATOR")
         #self.stop = DaemonSelectionStop(app, self, "NEGOTIATOR")
 
@@ -49,7 +54,16 @@
 
     def create_table(self, app, name, cls):
         # avoid the checkboxes
-        return ObjectTable(app, name, cls)
+        return SelectableSearchObjectTable(app, name, cls)
+    
+    class NegotiatorFieldOptions(SelectableSearchObjectTable.SearchFieldOptions):
+        def __init__(self, app, param):
+            super(NegotiatorSelector.NegotiatorFieldOptions, self).__init__(app, param)
+            self.cls = app.model.com_redhat_grid.Negotiator
+            
+        def do_get_items(self, session):
+            return [self.cls.Name, self.cls.Machine, self.cls.MonitorSelfAge, \
+                    self.cls.MonitorSelfCPUUsage, self.cls.MonitorSelfImageSize, self.cls.System]
 
 class GroupHelper(Widget):
     def __init__(self, app, name, negotiator):

Modified: trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.py	2012-08-23 17:07:18 UTC (rev 5450)
+++ trunk/cumin/python/cumin/grid/scheduler.py	2012-08-29 17:59:33 UTC (rev 5451)
@@ -9,7 +9,7 @@
 from submitter import SubmitterFrame, SubmitterSelector
 from submission import PoolSubmissionSelector
 from cumin.objectselector import ObjectSelectorTable, ObjectSelector,\
-    ObjectLinkColumn, MonitorSelfStatColumn, ObjectTable, MonitorSelfAgeColumn
+    ObjectLinkColumn, MonitorSelfStatColumn, ObjectTable, MonitorSelfAgeColumn, SelectableSearchObjectTable
 from cumin.grid.submission import SubmissionFrame
 
 strings = StringCatalog(__file__)
@@ -79,12 +79,17 @@
         frame = "main.grid.scheduler"
         col = ObjectLinkColumn(app, "name", cls.Name, cls._id, frame)
         self.add_column(col)
-        self.add_search_filter(col)
 
         self.add_attribute_column(cls.NumUsers)
         self.add_attribute_column(cls.TotalIdleJobs)
         self.add_attribute_column(cls.TotalRunningJobs)
         self.add_attribute_column(cls.TotalHeldJobs)
+        
+        self.field_param = StringParameter(app, "field_param")
+        self.add_parameter(self.field_param)
+        
+        self.select_input = self.SchedulerFieldOptions(app, self.field_param)
+        self.add_selectable_search_filter(self.select_input)
 
         stat = MonitorSelfAgeColumn(app, cls.MonitorSelfAge.name, cls.MonitorSelfAge)
         self.add_column(stat)
@@ -100,7 +105,17 @@
 
     def create_table(self, app, name, cls):
         # avoid the checkboxes
-        return ObjectTable(app, name, cls)
+        return SelectableSearchObjectTable(app, name, cls)
+    
+    class SchedulerFieldOptions(SelectableSearchObjectTable.SearchFieldOptions):
+        def __init__(self, app, param):
+            super(SchedulerSelector.SchedulerFieldOptions, self).__init__(app, param)
+            self.cls = app.model.com_redhat_grid.Scheduler
+            
+        def do_get_items(self, session):
+            return [self.cls.Name, self.cls.NumUsers, self.cls.TotalIdleJobs, \
+                    self.cls.TotalRunningJobs, self.cls.TotalHeldJobs, self.cls.MonitorSelfAge, \
+                    self.cls.MonitorSelfCPUUsage, self.cls.MonitorSelfImageSize]
 
 class SchedulerOverview(RadioModeSet):
     def __init__(self, app, name, scheduler):

Modified: trunk/cumin/python/cumin/grid/slotvis.py
===================================================================
--- trunk/cumin/python/cumin/grid/slotvis.py	2012-08-23 17:07:18 UTC (rev 5450)
+++ trunk/cumin/python/cumin/grid/slotvis.py	2012-08-29 17:59:33 UTC (rev 5451)
@@ -4,12 +4,13 @@
 from wooly import Session, Widget
 from wooly.util import StringCatalog
 from wooly.widgets import RadioModeSet
+from wooly.parameters import StringParameter
 
 from cumin.parameters import RosemaryObjectParameter
 from cumin.widgets import StateSwitch
 from cumin.stat import FlashFullPage
 from cumin.objectselector import ObjectSelector, ObjectLinkColumn,\
-    ObjectTableColumn, ObjectTable
+    ObjectTableColumn, ObjectTable, SelectableSearchObjectTable
 
 strings = StringCatalog(__file__)
 log = logging.getLogger("cumin.slotvis")
@@ -32,7 +33,6 @@
         frame = "main.grid.slot"
         col = ObjectLinkColumn(app, "name", cls.Name, cls._id, frame)
         self.add_column(col)
-        self.add_search_filter(col)
 
         self.add_attribute_column(cls.Activity)
         self.add_attribute_column(cls.State)
@@ -40,13 +40,27 @@
         col = ObjectTableColumn(app, cls.LoadAvg.name, cls.LoadAvg)
         self.add_column(col)
         self.table.set_default_sort_column(col)
+        
+        self.field_param = StringParameter(app, "field_param")
+        self.add_parameter(self.field_param)
+        
+        self.select_input = self.SlotFieldOptions(app, self.field_param)
+        self.add_selectable_search_filter(self.select_input)
 
         self.enable_csv_export()
 
     def create_table(self, app, name, cls):
         # avoid the checkboxes
-        return ObjectTable(app, name, cls)
+        return SelectableSearchObjectTable(app, name, cls)
 
     def render_title(self, session):
         return "Slot table"
+    
+    class SlotFieldOptions(SelectableSearchObjectTable.SearchFieldOptions):
+        def __init__(self, app, param):
+            super(SlotSelector.SlotFieldOptions, self).__init__(app, param)
+            self.cls = app.model.com_redhat_grid.Slot
+            
+        def do_get_items(self, session):
+            return [self.cls.Name, self.cls.Activity, self.cls.State, self.cls.LoadAvg]
 

Modified: trunk/cumin/python/cumin/grid/submission.py
===================================================================
--- trunk/cumin/python/cumin/grid/submission.py	2012-08-23 17:07:18 UTC (rev 5450)
+++ trunk/cumin/python/cumin/grid/submission.py	2012-08-29 17:59:33 UTC (rev 5451)
@@ -8,19 +8,20 @@
 from cumin.objectframe import ObjectFrame, ObjectView, ObjectViewSummary, ObjectViewContext
 from cumin.sqladapter import ObjectSqlAdapter
 from cumin.objectselector import ObjectSelector, ObjectLinkColumn,\
-    ObjectTableColumn, ObjectTable
+    ObjectTableColumn, ObjectTable, SelectableSearchObjectTable
 from cumin.task import TaskLink, Task, ObjectTaskForm
 from cumin.parameters import ObjectAttribute
 from cumin.util import xml_escape
 
-from rosemary.sqlfilter import SqlFilter
+from rosemary.sqlfilter import SqlFilter, SqlLikeFilter, SqlValueFilter, SqlDateValueFilter
 from rosemary.sqlquery import SqlInnerJoin
 
-from wooly import Attribute, Parameter
+from wooly.util import StringCatalog
 from wooly.forms import StringField, ScalarField, FormError, OptionInputSet,\
     MultilineStringField, FormField, IntegerField, LabelFormField, NoXMLStringField
-from wooly.parameters import IntegerParameter
+from wooly.parameters import IntegerParameter, StringParameter
 
+
 log = logging.getLogger("cumin.grid.submission")
 
 class SubmissionFrame(ObjectFrame):
@@ -118,11 +119,13 @@
         self.add_attribute_column(cls.Completed)
         self.add_attribute_column(cls.Held)
         self.add_attribute_column(cls.Suspended)
-
-    def create_table(self, app, name, cls):
-        # avoid the checkboxes
-        return ObjectTable(app, name, cls)
-
+        
+        self.field_param = StringParameter(app, "field_param")
+        self.add_parameter(self.field_param)
+        
+        self.select_input = self.SubmissionFieldOptions(app, self.field_param)
+        self.add_selectable_search_filter(self.select_input)
+           
     class QDateColumn(ObjectTableColumn):
         def _get_raw_content(self, session, data):
             d = super(SubmissionSelector.QDateColumn, self).\
@@ -145,13 +148,22 @@
         def render_cell_title(self, session, data):
             return self._get_raw_content(session, data)
 
+    class SubmissionFieldOptions(SelectableSearchObjectTable.SearchFieldOptions):
+        def __init__(self, app, param):
+            super(SubmissionSelector.SubmissionFieldOptions, self).__init__(app, param)
+            self.cls = app.model.com_redhat_grid.Submission
+            
+        def do_get_items(self, session):
+            return [self.cls.Name, self.cls.Owner, self.cls.QDate, self.cls.Idle, \
+                    self.cls.Running, self.cls.Completed, self.cls.Held, self.cls.Suspended]
+
 class PoolSubmissionSelector(SubmissionSelector):
     def __init__(self, app, name, frame="main.grid.submission"):
         super(PoolSubmissionSelector, self).__init__(app, name)
        
         col = self.PoolSubmissionObjectLinkColumn(app, "name", self.cls.Name, self.cls._id, frame)
         self.insert_column(0, col)
-        self.add_search_filter(col)
+        #self.add_search_filter(col)
 
         attr = self.cls.Owner
         col = ObjectTableColumn(app, attr.name, attr)
@@ -169,13 +181,17 @@
 
         link = TaskLink(app, "vm_job_submit", app.grid.vm_job_submit)
         self.links.add_child(link)
-            
+        
+    
+    def create_table(self, app, name, cls):
+        return SelectableSearchObjectTable(app, name, cls)    
+
     class PoolSubmissionObjectLinkColumn(ObjectLinkColumn):      
         def render_cell_content(self, session, record):
             retval = len(record) > 0 and record[self.field.index] or ""
             if(len(record[self.field.index]) > 50):
                 retval = record[self.field.index][:50] + "..."  #indicate that we truncated the name
-            return retval
+            return retval       
 
 class PoolSubmissionJoinSelector(PoolSubmissionSelector):
     def __init__(self, app, name):
@@ -184,7 +200,7 @@
         scheduler = app.model.com_redhat_grid.Scheduler
         self.SchedulerJoin(app, self.table.adapter.query, self.cls.sql_table,
                      self.cls.jobserverRef.sql_column, "jid")
-
+        
         #frame = "main.grid.scheduler"
         #col = self.SchedulerColumn(app, "Scheduler", scheduler.Name, scheduler._id, frame)
         #self.insert_column(2, col)



More information about the cumin-developers mailing list