[rhmessaging-commits] rhmessaging commits: r1541 - in mgmt: cumin/python/wooly and 1 other directories.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Jan 8 12:04:53 EST 2008


Author: justi9
Date: 2008-01-08 12:04:53 -0500 (Tue, 08 Jan 2008)
New Revision: 1541

Modified:
   mgmt/cumin/python/cumin/client.py
   mgmt/cumin/python/cumin/client.strings
   mgmt/cumin/python/cumin/exchange.py
   mgmt/cumin/python/cumin/exchange.strings
   mgmt/cumin/python/cumin/queue.py
   mgmt/cumin/python/cumin/queue.strings
   mgmt/cumin/python/cumin/widgets.py
   mgmt/cumin/python/wooly/tables.py
   mgmt/notes/justin-todo.txt
Log:
Adds a PhaseSwitch widget for controlling for filtering views down to
active, inactive, or deleted objects.

Employs phaseswitch in the queue, exchange, client, and client session
views.

Removes TableHeader and TableColumn, since they are no longer used and
superceded by ItemTable and SqlTable.



Modified: mgmt/cumin/python/cumin/client.py
===================================================================
--- mgmt/cumin/python/cumin/client.py	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/client.py	2008-01-08 17:04:53 UTC (rev 1541)
@@ -16,7 +16,6 @@
         super(ClientSet, self).__init__(app, name)
 
         self.table_sql = "client as l"
-        self.where_sql = "where l.vhost_id = %(id)r"
 
         self.add_sql_join("client_stats as c", "c.id", "l.stats_curr_id")
         self.add_sql_join("client_stats as p", "p.id", "l.stats_prev_id")
@@ -58,15 +57,31 @@
         self.unit.add_state("f", "Frames")
         self.add_child(self.unit)
 
+        self.phase = PhaseSwitch(app, "phase")
+        self.add_child(self.phase)
+
     def get_title(self, session, vhost):
-        return "Clients %s" % fmt_count(self.get_item_count(session, vhost))
+        return "Clients %s" % fmt_count(vhost.clients.count())
 
     def get_unit_plural(self, session):
         return self.unit.get(session) == "b" and "Bytes" or "Frames"
 
-    def get_item_count(self, session, vhost):
-        return vhost.clients.count()
+    def get_where_sql(self, session):
+        elems = list()
+        elems.append("l.vhost_id = %(id)r")
 
+        phase = self.phase.get(session)
+
+        if phase == "a":
+            elems.append("c.rec_time > now() - interval '10 minutes'")
+        elif phase == "i":
+            elems.append("(c.rec_time <= now() - interval '10 minutes'" +
+                         " and l.deletion_time is null)")
+        else:
+            elems.append("l.deletion_time is not null")
+        
+        return "where %s" % " and ".join(elems)
+
     def get_sql_values(self, session, vhost):
         return {"id": vhost.id}
 
@@ -258,7 +273,6 @@
         super(ClientSessionSet, self).__init__(app, name)
 
         self.table_sql = "session as s"
-        self.where_sql = "where s.client_id = %(id)r"
 
         self.add_sql_join("session_stats as c", "c.id", "s.stats_curr_id")
         self.add_sql_join("session_stats as p", "p.id", "s.stats_curr_id")
@@ -276,15 +290,31 @@
         col = self.StatusColumn(app, "status")
         self.add_column(col)
 
+        self.phase = PhaseSwitch(app, "phase")
+        self.add_child(self.phase)
+
     def get_title(self, session, client):
-        return "Sessions %s" % fmt_count(self.get_item_count(session, client))
+        return "Sessions %s" % fmt_count(client.sessions.count())
 
+    def get_where_sql(self, session):
+        elems = list()
+        elems.append("s.client_id = %(id)r")
+
+        phase = self.phase.get(session)
+
+        if phase == "a":
+            elems.append("c.rec_time > now() - interval '10 minutes'")
+        elif phase == "i":
+            elems.append("(c.rec_time <= now() - interval '10 minutes'" +
+                         " and s.deletion_time is null)")
+        else:
+            elems.append("s.deletion_time is not null")
+        
+        return "where %s" % " and ".join(elems)
+
     def get_sql_values(self, session, client):
         return {"id": client.id}
 
-    def get_item_count(self, session, client):
-        return client.sessions.count()
-
     class NameColumn(SqlTableColumn):
         def get_title(self, session, object):
             return "Name"

Modified: mgmt/cumin/python/cumin/client.strings
===================================================================
--- mgmt/cumin/python/cumin/client.strings	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/client.strings	2008-01-08 17:04:53 UTC (rev 1541)
@@ -1,5 +1,7 @@
 [ClientSet.html]
 <form>
+  <div class="rfloat">{phase}</div>
+
   {unit}
 
   <div class="sactions">
@@ -130,23 +132,29 @@
 <div class="iblock chart">{received}</div>
 
 [ClientSessionSet.html]
-<div class="sactions">
-  <h2>Act on Selected Sessions:</h2>
-  <button>Solicit Ack</button>
-  <button>Reset Lifespan</button>
-  <button>Detach</button>
-  <button>Close</button>
-</div>
+<form>
+  <div class="rfloat">{phase}</div>
 
-<table class="mobjects">
-  <thead>
-    <tr>
-      <th class="setnav" colspan="0">
-        <div class="rfloat">{page}</div>
-        {count}
-      </th>
-    </tr>
-    <tr>{headers}</tr>
-  </thead>
-  <tbody>{items}</tbody>
-</table>
+  <ul class="radiotabs"><li>&nbsp</li></ul>
+
+  <div class="sactions">
+    <h2>Act on Selected Sessions:</h2>
+    <button>Solicit Ack</button>
+    <button>Reset Lifespan</button>
+    <button>Detach</button>
+    <button>Close</button>
+  </div>
+
+  <table class="mobjects">
+    <thead>
+      <tr>
+        <th class="setnav" colspan="0">
+          <div class="rfloat">{page}</div>
+          {count}
+        </th>
+      </tr>
+      <tr>{headers}</tr>
+    </thead>
+    <tbody>{items}</tbody>
+  </table>
+</form>

Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/exchange.py	2008-01-08 17:04:53 UTC (rev 1541)
@@ -37,7 +37,6 @@
         super(ExchangeSet, self).__init__(app, name)
 
         self.table_sql = "exchange as e"
-        self.where_sql = "where e.vhost_id = %(id)r"
 
         self.add_sql_join("exchange_stats as c", "c.id", "e.stats_curr_id")
         self.add_sql_join("exchange_stats as p", "p.id", "e.stats_prev_id")
@@ -82,15 +81,28 @@
         self.unit = UnitSwitch(app, "unit")
         self.add_child(self.unit)
 
+        self.phase = PhaseSwitch(app, "phase")
+        self.add_child(self.phase)
+
     def get_title(self, session, vhost):
-        return "Exchanges %s" % fmt_count(self.get_item_count(session, vhost))
+        return "Exchanges %s" % fmt_count(vhost.exchanges.count())
 
-    def get_unit_plural(self, session):
-        return self.unit.get(session) == "b" and "Bytes" or "Msgs."
+    def get_where_sql(self, session):
+        elems = list()
+        elems.append("e.vhost_id = %(id)r")
 
-    def get_item_count(self, session, vhost):
-        return vhost.exchanges.count()
+        phase = self.phase.get(session)
 
+        if phase == "a":
+            elems.append("c.rec_time > now() - interval '10 minutes'")
+        elif phase == "i":
+            elems.append("(c.rec_time <= now() - interval '10 minutes'" +
+                         " and e.deletion_time is null)")
+        else:
+            elems.append("e.deletion_time is not null")
+        
+        return "where %s" % " and ".join(elems)
+
     def get_sql_values(self, session, vhost):
         return {"id": vhost.id}
 
@@ -129,7 +141,7 @@
 
     class ReceivedColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Received" % self.parent.get_unit_plural(session)
+            return "%s Received" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)
@@ -140,7 +152,7 @@
 
     class RoutedColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Routed" % self.parent.get_unit_plural(session)
+            return "%s Routed" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)
@@ -151,7 +163,7 @@
 
     class DroppedColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Dropped" % self.parent.get_unit_plural(session)
+            return "%s Dropped" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)

Modified: mgmt/cumin/python/cumin/exchange.strings
===================================================================
--- mgmt/cumin/python/cumin/exchange.strings	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/exchange.strings	2008-01-08 17:04:53 UTC (rev 1541)
@@ -12,6 +12,8 @@
 }
 
 [ExchangeSet.html]
+<div class="rfloat">{phase}</div>
+
 {unit}
 
 <table class="mobjects">

Modified: mgmt/cumin/python/cumin/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/queue.py	2008-01-08 17:04:53 UTC (rev 1541)
@@ -21,7 +21,6 @@
         super(QueueSet, self).__init__(app, name)
 
         self.table_sql = "queue as q"
-        self.where_sql = "where q.vhost_id = %(id)r"
 
         self.add_sql_join("queue_stats as c", "c.id", "q.stats_curr_id")
         self.add_sql_join("queue_stats as p", "p.id", "q.stats_prev_id")
@@ -73,17 +72,27 @@
         self.unit = UnitSwitch(app, "unit")
         self.add_child(self.unit)
 
+        self.phase = PhaseSwitch(app, "phase")
+        self.add_child(self.phase)
+
     def get_title(self, session, vhost):
-        return "Queues %s" % fmt_count(self.get_item_count(session, vhost))
+        return "Queues %s" % fmt_count(vhost.queues.count())
 
-    def get_unit_singular(self, session):
-        return self.unit.get(session) == "b" and "Byte" or "Msg."
+    def get_where_sql(self, session):
+        elems = list()
+        elems.append("q.vhost_id = %(id)r")
 
-    def get_unit_plural(self, session):
-        return self.unit.get(session) == "b" and "Bytes" or "Msgs."
+        phase = self.phase.get(session)
 
-    def get_item_count(self, session, vhost):
-        return vhost.queues.count()
+        if phase == "a":
+            elems.append("c.rec_time > now() - interval '10 minutes'")
+        elif phase == "i":
+            elems.append("(c.rec_time <= now() - interval '10 minutes'" +
+                         " and q.deletion_time is null)")
+        else:
+            elems.append("q.deletion_time is not null")
+        
+        return "where %s" % " and ".join(elems)
 
     def get_sql_values(self, session, vhost):
         return {"id": vhost.id}
@@ -122,7 +131,7 @@
 
     class EnqueuedColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Enqueued" % self.parent.get_unit_plural(session)
+            return "%s Enqueued" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)
@@ -133,7 +142,7 @@
 
     class DequeuedColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Dequeued" % self.parent.get_unit_plural(session)
+            return "%s Dequeued" % self.parent.unit.get_brief_plural(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)
@@ -144,7 +153,7 @@
 
     class DepthColumn(SqlTableColumn):
         def get_title(self, session, object):
-            return "%s Depth" % self.parent.get_unit_singular(session)
+            return "%s Depth" % self.parent.unit.get_brief_singular(session)
 
         def get_column_key(self, session):
             unit = self.parent.unit.get(session)

Modified: mgmt/cumin/python/cumin/queue.strings
===================================================================
--- mgmt/cumin/python/cumin/queue.strings	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/queue.strings	2008-01-08 17:04:53 UTC (rev 1541)
@@ -1,5 +1,6 @@
 [QueueSet.html]
 <form>
+  <div class="rfloat">{phase}</div>
   {unit}
 
   <div class="sactions">

Modified: mgmt/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/cumin/python/cumin/widgets.py	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/cumin/widgets.py	2008-01-08 17:04:53 UTC (rev 1541)
@@ -233,6 +233,23 @@
         self.add_state("m", "Messages")
         self.add_state("b", "Bytes")
 
+        self.brief_sing = {"m": "Msg.", "b": "Byte"}
+        self.brief_plur = {"m": "Msgs.", "b": "Bytes"}
+
+    def get_brief_singular(self, session):
+        return self.brief_sing[self.get(session)]
+
+    def get_brief_plural(self, session):
+        return self.brief_plur[self.get(session)]
+
+class PhaseSwitch(StateSwitch):
+    def __init__(self, app, name):
+        super(PhaseSwitch, self).__init__(app, name)
+
+        self.add_state("a", "Active")
+        self.add_state("i", "Inactive")
+        self.add_state("d", "Deleted")
+
 class Paginator(ItemSet):
     def __init__(self, app, name):
         super(Paginator, self).__init__(app, name)
@@ -275,88 +292,6 @@
     def render_item_content(self, session, page):
         return page + 1
 
-class TableHeader(ItemSet):
-    def __init__(self, app, name):
-        super(TableHeader, self).__init__(app, name)
-
-        self.columns = list() # of TableColumns
-
-        self.column = Parameter(app, "col")
-        self.add_parameter(self.column)
-
-        self.reversed = BooleanParameter(app, "rev")
-        self.reversed.set_default(False)
-        self.add_parameter(self.reversed)
-
-    def add_column(self, column):
-        self.columns.append(column)
-        column.header = self
-
-        if not self.column.default:
-            self.column.set_default(column.name)
-
-    def get_selected_column(self, session):
-        name = self.column.get(session)
-        for column in self.columns:
-            if column.name == name:
-                return column
-
-    def is_reversed(self, session):
-        return self.reversed.get(session)
-
-    def get_items(self, session, object):
-        return self.columns
-
-    def render_item_class(self, session, column):
-        return column.get_class(session)
-
-    def render_item_content(self, session, column):
-        return column.get_title(session)
-
-    def render_item_href(self, session, column):
-        branch = session.branch()
-
-        if column.name == self.column.get(session):
-            self.reversed.set(branch, not self.reversed.get(session))
-
-        self.column.set(branch, column.name)
-
-        return branch.marshal()
-
-# XXX for now, not a Widget
-class TableColumn(object):
-    def __init__(self, name, data_name=None, title=None, class_=None):
-        self.name = name
-        self.data_name = data_name
-        self.title = title
-        self.class_ = class_
-
-        self.header = None
-
-    def get_data_name(self, session):
-        return self.data_name
-
-    def get_title(self, session):
-        return self.title
-
-    def get_class(self, session):
-        column = self.header.get_selected_column(session)
-        classes = self.class_
-
-        if self is column:
-            classes = (classes or "") + " selected"
-
-        return classes
-
-    def get_sorted_items(self, session, items):
-        name = self.get_data_name(session)
-
-        if name:
-            # XXX sqlobject specific
-            items = items.orderBy(self.get_data_name(session))
-
-        return items
-
 class CuminTable(SqlTable):
     def __init__(self, app, name):
         super(CuminTable, self).__init__(app, name)

Modified: mgmt/cumin/python/wooly/tables.py
===================================================================
--- mgmt/cumin/python/wooly/tables.py	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/cumin/python/wooly/tables.py	2008-01-08 17:04:53 UTC (rev 1541)
@@ -171,6 +171,16 @@
                  self.get_orderby_sql(session),
                  self.get_limit_sql(session))
 
+        return self.build_sql(elems)
+
+    def get_count_sql(self, session):
+        elems = ("select count(*)",
+                 self.get_from_sql(session),
+                 self.get_where_sql(session))
+
+        return self.build_sql(elems)
+
+    def build_sql(self, elems):
         writer = Writer()
         
         for elem in elems:
@@ -178,16 +188,27 @@
                 writer.write(elem)
                 writer.write("\n")
 
-        sql = writer.to_string()
+        return writer.to_string()
 
-        return sql
-
     def get_sql_values(self, session, object):
         return None
 
     def get_connection(self, session):
         pass
 
+    def get_item_count(self, session, object):
+        conn = self.get_connection(session)
+
+        if conn:
+            cursor = conn.cursor()
+            sql = self.get_count_sql(session)
+            sql_values = self.get_sql_values(session, object)
+
+            cursor.execute(sql, sql_values)
+            data = cursor.fetchone()
+
+            return data[0]
+
     # XXX shouldn't this be do_get_items?
     def get_items(self, session, object):
         conn = self.get_connection(session)

Modified: mgmt/notes/justin-todo.txt
===================================================================
--- mgmt/notes/justin-todo.txt	2008-01-08 05:19:48 UTC (rev 1540)
+++ mgmt/notes/justin-todo.txt	2008-01-08 17:04:53 UTC (rev 1541)
@@ -24,14 +24,16 @@
 
  * Tables
 
-   - Indicate selected (sorted-by) column
-
    - Add sort direction icon
 
    - Deal with large numbers of pages in paginators
 
    - Change first-click sort to desc for number fields
 
+   - Handle no pages in paginator
+
+   - Column justification
+
  * Div by zero error in queues view
 
 Deferred




More information about the rhmessaging-commits mailing list