[rhmessaging-commits] rhmessaging commits: r2796 - mgmt/trunk/cumin/python/cumin.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Thu Nov 13 10:15:49 EST 2008


Author: eallen
Date: 2008-11-13 10:15:49 -0500 (Thu, 13 Nov 2008)
New Revision: 2796

Modified:
   mgmt/trunk/cumin/python/cumin/pool.py
Log:
Use objectlistener to update pool stats.
Deferred pool stats calculations until after page loads.
Removed Job visualization.
Added Pool Slot visualization.

Modified: mgmt/trunk/cumin/python/cumin/pool.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/pool.py	2008-11-13 15:07:41 UTC (rev 2795)
+++ mgmt/trunk/cumin/python/cumin/pool.py	2008-11-13 15:15:49 UTC (rev 2796)
@@ -17,6 +17,7 @@
 from collector import CollectorSet, CollectorFrame, CollectorStart, CollectorStop
 from negotiator import NegotiatorSet, NegotiatorFrame, NegStart, NegStop
 from limits import LimitsSet, LimitsFrame
+from slot import SlotSet
 
 strings = StringCatalog(__file__)
 log = logging.getLogger("cumin.pool")
@@ -190,6 +191,10 @@
     class LimitsTab(LimitsSet):
         pass
 
+    def render_script(self, session, pool):
+        data = "model.xml?class=pool;id=%s" % pool.id
+        return "wooly.setIntervalUpdate('%s', updatePool, 3000)" % data
+
 class PoolSchedulerSet(SchedulerSet):
     def get_args(self, session):
         return self.frame.get_args(session)
@@ -245,7 +250,21 @@
 
     def render_sql_where(self, session, pool):
         return "where n.pool = %(pool)s"
-    
+
+class PoolSlotSet(SlotSet):
+    def get_args(self, session):
+        return self.frame.get_args(session)
+
+    def render_sql_where(self, session, pool):
+        return "where s.pool = %(pool)s"
+
+    def get_sql_values(self, session, pool):
+        return {"pool": pool.id}
+
+    def render_title(self, session, pool):
+        count = self.get_item_count(session, pool)
+        return "Slots %s" % fmt_count(count)
+
 class PoolStats(Widget):
     def __init__(self, app, name):
         super(PoolStats, self).__init__(app, name)
@@ -253,9 +272,12 @@
         stats = PoolStatSet(app, "general", "general")
         self.add_child(stats)
 
-        self.grid = self.JobUtilizationGrid(app, "job_grid")
-        self.add_child(self.grid)
+        #self.grid = self.JobUtilizationGrid(app, "job_grid")
+        #self.add_child(self.grid)
 
+        self.slot_grid = self.SlotVisualization(app, "slot_grid")
+        self.add_child(self.slot_grid)
+
     def render_title(self, session):
         return "Statistics"
     
@@ -291,68 +313,45 @@
         def get_sticky_info(self, session):
             return [("name", "ID"), ("submitter", "Submitter"), ("status", "Status")]
 
-class PoolStatSet(StatSet):
-    def __init__(self, app, name, category):
-        super(PoolStatSet, self).__init__(app, name, category)
+    class SlotVisualization(StatUtilizationGrid):
+        def get_cells(self, session):
+            pool = self.frame.get_args(session)[0]
+            action = self.app.model.pool.slots
+            return action.get_slots(session, pool)
         
-        self.jobs = Attribute(app, "jobs")
-        self.add_attribute(self.jobs)
-        
-    def process(self, session):
-        value = Job.select().count()
-        self.jobs.set(session, value)
-        super(PoolStatSet, self).process(session)
-        
-    def render_rate_text(self, session, args):
-        return "Percentage"
+        def render_title(self, session):
+            return ""
 
-    def render_item_name(self, session, args):
-        stat = args[0]
-        return stat.name
+        def get_colors(self, session):
+            action = self.app.model.pool.slots
+            return action.get_colors()
+            
+        def get_color(self, session, job):
+            action = self.app.model.pool.slots
+            return action.get_color(job)
+    
+        def get_contents(self, session, slot):
+            return ""
 
-    def render_item_value(self, session, args):
-        stat = args[0]
-        if stat.name == "Jobs":
-            return self.jobs.get(session)
-        else:
-            state = stat.name
-            value = self.get_value(session, state)
-        return value
+        def get_href(self, session, slot):
+            branch = session.branch()
+            try:
+                job = Job.select("custom_id = '%s'" % slot.JobId)[0]
+            except Exception, e:
+                return "#"
+            return self.page.main.pool.job.get_href(branch, job)
 
-    def get_value(self, session, state):
-        pool = self.frame.get_object(session)
-        elems = list()
-        istate = JobStatusInfo.get_status_int(state)
-        elems.append("job_status = %i" % istate)
-        elems.append("s.pool = '%s'" % pool.id)
+        def get_url(self, session):
+            pool = self.parent.frame.get_args(session)[0]
+            return "call.xml?class=pool;method=slots"
+        
+        def get_sticky_info(self, session):
+            return [("name", "Name"), ("machine", "Machine"), ("job", "Job")]
 
-        # manually removed jobs will have a state of Idle
-        # with a deletion_time
-        if state == "Idle":
-            elems.append("job.deletion_time is null")
-        where = " and ".join(elems)
+class PoolStatSet(StatSet):
+    def render_rate_text(self, session, args):
+        return "Percentage"
 
-        # manually removed jobs will have a state of Idle
-        # with a deletion_time
-        if state == "Removed":
-            removed = "(job.deletion_time is not null and job_status = %i)" % JobStatusInfo.get_status_int("Idle") 
-            where = " or ".join((where, removed))
-            
-        jn = "inner join scheduler as s on s.id = scheduler_id"
-        return Job.select(where, join=jn).count()
-
-    def render_item_rate(self, session, stat):
-        jobs = self.jobs.get(session)
-        state = stat[0].name
-        if state == "Jobs":
-            value = jobs
-        else:
-            value = self.get_value(session, state)
-        if jobs:
-            percent = (value*1.0) / (jobs*1.0) * 100.0
-        return jobs and "%2.2f" % percent or "-"
-    
-
 class PoolStatus(CuminStatus):
     def render_status(self, session, pool):
         return "Active"




More information about the rhmessaging-commits mailing list