[rhmessaging-commits] rhmessaging commits: r1533 - mgmt/cumin/python/cumin.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Fri Jan 4 10:50:26 EST 2008
Author: justi9
Date: 2008-01-04 10:50:25 -0500 (Fri, 04 Jan 2008)
New Revision: 1533
Modified:
mgmt/cumin/python/cumin/__init__.py
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/model.py
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/parameters.py
mgmt/cumin/python/cumin/queue.py
mgmt/cumin/python/cumin/queue.strings
mgmt/cumin/python/cumin/stat.py
mgmt/cumin/python/cumin/stat.strings
mgmt/cumin/python/cumin/widgets.py
Log:
A step toward better charts. Changes the page and widget
infrastructure for charts. Adds more configuration capabilities to
the chart png target.
Simplifies listeners for live updates (charts and otherwise).
Introduces a CuminClassParameter for generic object ids.
Where possible moves stats js code into the reusable widgets
themselves rather than in the caller.
Adds cumin class lookup by name.
Modified: mgmt/cumin/python/cumin/__init__.py
===================================================================
--- mgmt/cumin/python/cumin/__init__.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/__init__.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -13,9 +13,10 @@
from model import CuminModel
from demo import DemoData
from page import CuminPage
-from queue import QueueXmlPage, QueueChartPage
-from exchange import ExchangeXmlPage, ExchangeChartPage
-from client import ClientXmlPage, ClientChartPage
+from queue import QueueXmlPage
+from exchange import ExchangeXmlPage
+from client import ClientXmlPage
+from stat import StatChartPage
class Cumin(Application):
def __init__(self):
@@ -41,11 +42,9 @@
self.add_page(ResourcePage(self, "resource"))
self.add_page(DevelPage(self, "devel.html"))
self.add_page(QueueXmlPage(self, "queue.xml"))
- self.add_page(QueueChartPage(self, "queue.png"))
self.add_page(ExchangeXmlPage(self, "exchange.xml"))
- self.add_page(ExchangeChartPage(self, "exchange.png"))
self.add_page(ClientXmlPage(self, "client.xml"))
- self.add_page(ClientChartPage(self, "client.png"))
+ self.add_page(StatChartPage(self, "stats.png"))
class CuminServer(WebServer):
def __init__(self, port=9090):
Modified: mgmt/cumin/python/cumin/client.py
===================================================================
--- mgmt/cumin/python/cumin/client.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/client.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -244,17 +244,20 @@
return "Current"
class StatisticsHistory(Widget):
- def get_title(self, session, client):
- return "History"
+ def __init__(self, app, name):
+ super(ClientStatistics.StatisticsHistory, self).__init__(app, name)
- def render_sent_chart_url(self, session, client):
- return "client.png?id=%i;s=framesFromClient;s=bytesFromClient" \
- % client.id
+ chart = StatValueChart(app, "sent")
+ chart.stats = ("framesFromClient", "bytesFromClient")
+ self.add_child(chart)
- def render_received_chart_url(self, session, client):
- return "client.png?id=%i;s=framesToClient;s=bytesToClient" \
- % client.id
+ chart = StatValueChart(app, "received")
+ chart.stats = ("framesToClient", "bytesToClient")
+ self.add_child(chart)
+ def get_title(self, session, client):
+ return "History"
+
class ClientSessionSet(CuminTable):
def __init__(self, app, name):
super(ClientSessionSet, self).__init__(app, name)
@@ -313,11 +316,3 @@
self.add_parameter(self.clients)
self.set_list_parameter(self.clients)
-
-class ClientChartPage(CuminChartPage):
- def __init__(self, app, name):
- super(ClientChartPage, self).__init__(app, name)
-
- self.client = ClientParameter(app, "id")
- self.add_parameter(self.client)
- self.set_object_parameter(self.client)
Modified: mgmt/cumin/python/cumin/client.strings
===================================================================
--- mgmt/cumin/python/cumin/client.strings 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/client.strings 2008-01-04 15:50:25 UTC (rev 1533)
@@ -70,7 +70,7 @@
</table>
</div>
<script>
- cumin.client.listeners["{id}"] = updateClientStatus, 3000;
+ cumin.listeners["{id}"] = updateClientStatus, 3000;
</script>
[ClientView.javascript]
@@ -83,8 +83,8 @@
break;
}
- for (var id in cumin.client.listeners) {
- cumin.client.listeners[id](id, client);
+ for (var id in cumin.listeners) {
+ cumin.listeners[id](id, client);
}
}
@@ -126,26 +126,14 @@
</td>
</tr>
</table>
-<script>
- cumin.client.listeners["{id}.general"] = updateStats;
-</script>
[StatisticsHistory.html]
<h2>Sent</h2>
-<div class="iblock chart">
- <img id="{id}.sent" src="{sent_chart_url}"/>
-</div>
+<div class="iblock chart">{sent}</div>
<h2>Received</h2>
-<div class="iblock chart">
- <img id="{id}.received" src="{received_chart_url}"/>
-</div>
+<div class="iblock chart">{received}</div>
-<script>
- cumin.client.listeners["{id}.sent"] = updateImage
- cumin.client.listeners["{id}.received"] = updateImage
-</script>
-
[ClientSessionSet.html]
<div class="rfloat">{page}</div>
Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/exchange.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -347,7 +347,8 @@
class StatisticsCurrent(Widget):
def __init__(self, app, name):
- super(ExchangeStatistics.StatisticsCurrent, self).__init__(app, name)
+ super(ExchangeStatistics.StatisticsCurrent, self).__init__ \
+ (app, name)
self.add_child(StatSet(app, "general", "general"))
@@ -355,19 +356,25 @@
return "Current"
class StatisticsHistory(Widget):
- def get_title(self, session, queue):
- return "History"
+ def __init__(self, app, name):
+ super(ExchangeStatistics.StatisticsHistory, self).__init__ \
+ (app, name)
- def render_received_chart_url(self, session, queue):
- return "exchange.png?id=%i;s=msgReceives;s=byteReceives" % queue.id
+ chart = StatValueChart(app, "received")
+ chart.stats = ("msgReceives", "byteReceives")
+ self.add_child(chart)
- def render_dropped_chart_url(self, session, queue):
- return "exchange.png?id=%i;s=msgDrops;s=byteDrops" % queue.id
+ chart = StatValueChart(app, "routed")
+ chart.stats = ("msgRoutes", "byteRoutes")
+ self.add_child(chart)
- def render_routed_chart_url(self, session, queue):
- return "exchange.png?id=%i;s=msgRoutes;s=byteRoutes" \
- % queue.id
+ chart = StatValueChart(app, "dropped")
+ chart.stats = ("msgDrops", "byteDrops")
+ self.add_child(chart)
+ def get_title(self, session, queue):
+ return "History"
+
class ExchangeProducerSet(ItemSet):
def get_title(self, session, exchange):
return "Producers %s" % \
@@ -407,11 +414,3 @@
self.add_parameter(self.exchanges)
self.set_list_parameter(self.exchanges)
-
-class ExchangeChartPage(CuminChartPage):
- def __init__(self, app, name):
- super(ExchangeChartPage, self).__init__(app, name)
-
- self.param = ExchangeParameter(app, "id")
- self.add_parameter(self.param)
- self.set_object_parameter(self.param)
Modified: mgmt/cumin/python/cumin/exchange.strings
===================================================================
--- mgmt/cumin/python/cumin/exchange.strings 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/exchange.strings 2008-01-04 15:50:25 UTC (rev 1533)
@@ -133,7 +133,7 @@
</table>
</div>
<script>
- cumin.exchange.listeners["{id}"] = updateExchangeStatus
+ cumin.listeners["{id}"] = updateExchangeStatus
</script>
[ExchangeView.javascript]
@@ -143,10 +143,11 @@
for (var key in exchanges) {
exchange = exchanges[key];
+ break;
}
- for (var id in cumin.exchange.listeners) {
- cumin.exchange.listeners[id](id, exchange);
+ for (var id in cumin.listeners) {
+ cumin.listeners[id](id, exchange);
}
}
@@ -205,32 +206,17 @@
</td>
</tr>
</table>
-<script>
- cumin.exchange.listeners["{id}.general"] = updateStats;
-</script>
[StatisticsHistory.html]
<h2>Received</h2>
-<div class="iblock chart">
- <img id="{id}.received" src="{received_chart_url}"/>
-</div>
+<div class="iblock chart">{received}</div>
<h2>Routed</h2>
-<div class="iblock chart">
- <img id="{id}.routed" src="{routed_chart_url}"/>
-</div>
+<div class="iblock chart">{routed}</div>
<h2>Dropped</h2>
-<div class="iblock chart">
- <img id="{id}.dropped" src="{dropped_chart_url}"/>
-</div>
+<div class="iblock chart">{dropped}</div>
-<script>
- cumin.exchange.listeners["{id}.received"] = updateImage
- cumin.exchange.listeners["{id}.routed"] = updateImage
- cumin.exchange.listeners["{id}.dropped"] = updateImage
-</script>
-
[ExchangeProducerSet.html]
<div class="sactions">
<h2>Act on Selected Producers:</h2>
Modified: mgmt/cumin/python/cumin/model.py
===================================================================
--- mgmt/cumin/python/cumin/model.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/model.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -10,7 +10,7 @@
def __init__(self):
self.data = MintModel()
- self.classes = dict()
+ self.classes = list()
self.queue = CuminQueue(self)
self.exchange = CuminExchange(self)
@@ -19,11 +19,22 @@
self.session = CuminSession(self)
def add_class(self, cls):
- self.classes[cls.mint_class] = cls
+ self.classes.append(cls)
+ # XXX get rid of this
def get_class(self, mint_object):
- return self.classes[mint_object.__class__]
+ return self.get_class_by_object(mint_object)
+ def get_class_by_object(self, mint_object):
+ for cls in self.classes:
+ if cls.mint_class is mint_object.__class__:
+ return cls
+
+ def get_class_by_name(self, name):
+ for cls in self.classes:
+ if cls.name == name:
+ return cls
+
class CuminClass(object):
def __init__(self, model, name, mint_class):
self.model = model
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/page.strings 2008-01-04 15:50:25 UTC (rev 1533)
@@ -573,33 +573,10 @@
cumin = new Cumin();
function Cumin() {
- this.queue = new Object();
- this.queue.listeners = new Object();
-
- this.exchange = new Object();
- this.exchange.listeners = new Object();
-
- this.client = new Object();
- this.client.listeners = new Object();
+ this.listeners = new Object();
}
}())
-function updateImage(id, object) {
- var img = wooly.doc().elembyid(id);
-
- var src = img.getattr("src");
- var sep = src.lastIndexOf(";");
- var time = new Date().getTime();
-
- if (isNaN(parseInt(src.substring(sep + 1)))) {
- src = src + ";" + time;
- } else {
- src = src.substring(0, sep) + ";" + time;
- }
-
- img.setattr("src", src);
-}
-
[CuminPage.html]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Modified: mgmt/cumin/python/cumin/parameters.py
===================================================================
--- mgmt/cumin/python/cumin/parameters.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/parameters.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -1,6 +1,13 @@
from wooly import *
from mint import *
+class CuminClassParameter(Parameter):
+ def do_unmarshal(self, string):
+ return self.app.model.get_class_by_name(string)
+
+ def do_marshal(self, cls):
+ return cls.name
+
class BrokerClusterParameter(Parameter):
def do_unmarshal(self, string):
return BrokerCluster.get(int(string))
Modified: mgmt/cumin/python/cumin/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/queue.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -541,19 +541,24 @@
return "Current"
class StatisticsHistory(Widget):
- def get_title(self, session, queue):
- return "History"
+ def __init__(self, app, name):
+ super(QueueStatistics.StatisticsHistory, self).__init__(app, name)
- def render_depth_chart_url(self, session, queue):
- return "queue.png?id=%i;s=msgDepth;s=byteDepth" % queue.id
+ chart = StatValueChart(app, "depth")
+ chart.stats = ("msgDepth", "byteDepth")
+ self.add_child(chart)
- def render_consumers_chart_url(self, session, queue):
- return "queue.png?id=%i;s=consumers" % queue.id
+ chart = StatValueChart(app, "consumers")
+ chart.stats = ("consumers",)
+ self.add_child(chart)
- def render_transactions_chart_url(self, session, queue):
- return "queue.png?id=%i;s=enqueueTxnCount;s=dequeueTxnCount" \
- % queue.id
+ chart = StatValueChart(app, "transactions")
+ chart.stats = ("enqueueTxnCount", "dequeueTxnCount")
+ self.add_child(chart)
+ def get_title(self, session, queue):
+ return "History"
+
class QueueConsumerSet(PaginatedItemSet):
def get_title(self, session, queue):
return "Consumers %s" % fmt_count(self.get_item_count(session, queue))
@@ -599,11 +604,3 @@
self.add_parameter(self.queues)
self.set_list_parameter(self.queues)
-
-class QueueChartPage(CuminChartPage):
- def __init__(self, app, name):
- super(QueueChartPage, self).__init__(app, name)
-
- self.queue = QueueParameter(app, "id")
- self.add_parameter(self.queue)
- self.set_object_parameter(self.queue)
Modified: mgmt/cumin/python/cumin/queue.strings
===================================================================
--- mgmt/cumin/python/cumin/queue.strings 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/queue.strings 2008-01-04 15:50:25 UTC (rev 1533)
@@ -133,7 +133,7 @@
</table>
</div>
<script>
- cumin.queue.listeners["{id}"] = updateQueueStatus
+ cumin.listeners["{id}"] = updateQueueStatus
</script>
[QueueView.javascript]
@@ -146,8 +146,8 @@
break;
}
- for (var id in cumin.queue.listeners) {
- cumin.queue.listeners[id](id, queue);
+ for (var id in cumin.listeners) {
+ cumin.listeners[id](id, queue);
}
//throw new Error();
@@ -251,35 +251,17 @@
</td>
</tr>
</table>
-<script>
- cumin.queue.listeners["{id}.general"] = updateStats;
- cumin.queue.listeners["{id}.persistent"] = updateStats;
- cumin.queue.listeners["{id}.transactional"] = updateStats;
- cumin.queue.listeners["{id}.transaction"] = updateStats;
-</script>
[StatisticsHistory.html]
<h2>Depth</h2>
-<div class="iblock chart">
- <img id="{id}.depth" src="{depth_chart_url}"/>
-</div>
+<div class="iblock chart">{depth}</div>
<h2>Consumers</h2>
-<div class="iblock chart">
- <img id="{id}.consumers" src="{consumers_chart_url}"/>
-</div>
+<div class="iblock chart">{consumers}</div>
<h2>Transactions</h2>
-<div class="iblock chart">
- <img id="{id}.transactions" src="{transactions_chart_url}"/>
-</div>
+<div class="iblock chart">{transactions}</div>
-<script>
- cumin.queue.listeners["{id}.depth"] = updateImage
- cumin.queue.listeners["{id}.consumers"] = updateImage
- cumin.queue.listeners["{id}.transactions"] = updateImage
-</script>
-
[QueueConsumerSet.html]
<div class="sactions">
<h2>Act on Selected Consumers:</h2>
Modified: mgmt/cumin/python/cumin/stat.py
===================================================================
--- mgmt/cumin/python/cumin/stat.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/stat.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -65,3 +65,88 @@
def render_item_average(self, session, args):
stat, object = args
return None #XXX "%0.2f" % (sum(stat.values) / float(len(stat.values)))
+
+class StatValueChart(Widget):
+ def __init__(self, app, name):
+ super(StatValueChart, self).__init__(app, name)
+
+ self.stats = ()
+
+ def render_href(self, session, object):
+ params = list()
+
+ cls = self.app.model.get_class_by_object(object).name
+ params.append("class=%s" % cls)
+
+ params.append("id=%i" % object.id)
+
+ for stat in self.stats:
+ params.append("stat=%s" % stat)
+
+ return "stats.png?" + ";".join(params)
+
+class StatChartPage(Page):
+ def __init__(self, app, name):
+ super(StatChartPage, self).__init__(app, name)
+
+ self.class_ = CuminClassParameter(app, "class")
+ self.add_parameter(self.class_)
+
+ self.id = IntegerParameter(app, "id")
+ self.add_parameter(self.id)
+
+ param = Parameter(app, "param")
+ self.add_parameter(param)
+
+ self.stats = ListParameter(app, "stat", param)
+ self.add_parameter(self.stats)
+
+ self.mode = Parameter(app, "mode")
+ self.add_parameter(self.mode)
+
+ def get_object(self, session, object):
+ cls = self.class_.get(session).mint_class
+ id = self.id.get(session)
+ return cls.get(id)
+
+ def get_content_type(self, session):
+ return "image/png"
+
+ def do_render(self, session, object):
+ chart = LineChart(600, 120)
+
+ cls = self.class_.get(session)
+ stats = [cls.get_stat(x) for x in self.stats.get(session)]
+
+ samples = dict()
+ times = dict()
+ values = dict()
+
+ for stat in stats:
+ samples[stat] = stat.samples(object)
+ values[stat] = [x[1] for x in samples[stat]]
+
+ max_value = 0
+
+ for stat in stats:
+ vals = values[stat]
+ if vals:
+ max_value = max(max(vals), max_value)
+
+ max_value = max_value * 1.1
+ max_value = max_value + (10 - max_value % 10)
+ chart.set_max_value(int(max_value))
+
+ chart.plot_x_axis()
+ chart.plot_y_axis()
+
+ colors = ((1,0,0), (0,0,1), (0,1,0))
+
+ for stat, color in zip(stats, colors):
+ chart.plot_values(samples[stat], color=color)
+
+ chart.plot_frame()
+
+ writer = Writer()
+ chart.write(writer)
+ return writer.to_string()
Modified: mgmt/cumin/python/cumin/stat.strings
===================================================================
--- mgmt/cumin/python/cumin/stat.strings 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/stat.strings 2008-01-04 15:50:25 UTC (rev 1533)
@@ -51,6 +51,9 @@
{items}
</table>
+<script>
+ cumin.listeners["{id}"] = updateStats;
+</script>
[StatSet.item_html]
<tr stat="{item_name}">
@@ -58,3 +61,26 @@
<td class="ralign"> {item_value}</td>
<td class="ralign"> {item_extra}</td>
</tr>
+
+[StatValueChart.javascript]
+function updateChartImage(id, object) {
+ var img = wooly.doc().elembyid(id);
+
+ var src = img.getattr("src");
+ var sep = src.lastIndexOf(";");
+ var time = new Date().getTime();
+
+ if (isNaN(parseInt(src.substring(sep + 1)))) {
+ src = src + ";" + time;
+ } else {
+ src = src.substring(0, sep) + ";" + time;
+ }
+
+ img.setattr("src", src);
+}
+
+[StatValueChart.html]
+<img id="{id}" src="{href}" height="140" width="660"/>
+<script>
+ cumin.listeners["{id}"] = updateChartImage
+</script>
Modified: mgmt/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/cumin/python/cumin/widgets.py 2008-01-03 17:46:34 UTC (rev 1532)
+++ mgmt/cumin/python/cumin/widgets.py 2008-01-04 15:50:25 UTC (rev 1533)
@@ -162,69 +162,6 @@
(error_count, ess(error_count),
warning_count, ess(warning_count))
-class CuminChartPage(Page):
- def __init__(self, app, name):
- super(CuminChartPage, self).__init__(app, name)
-
- self.__param = None
-
- param = Parameter(app, "param")
- self.add_parameter(param)
-
- self.stats = ListParameter(app, "s", param)
- self.add_parameter(self.stats)
-
- self.mode = Parameter(app, "m")
- self.add_parameter(self.mode)
-
- def set_object_parameter(self, param):
- self.__param = param
-
- def get_object(self, session, object):
- return self.__param.get(session)
-
- def get_content_type(self, session):
- return "image/png"
-
- def do_render(self, session, object):
- chart = LineChart(600, 120)
-
- cls = self.app.model.get_class(object)
- stats = [cls.get_stat(x) for x in self.stats.get(session)]
-
- samples = dict()
- times = dict()
- values = dict()
-
- for stat in stats:
- samples[stat] = stat.samples(object)
- values[stat] = [x[1] for x in samples[stat]]
-
- max_value = 0
-
- for stat in stats:
- vals = values[stat]
- if vals:
- max_value = max(max(vals), max_value)
-
- max_value = max_value * 1.1
- max_value = max_value + (10 - max_value % 10)
- chart.set_max_value(int(max_value))
-
- chart.plot_x_axis()
- chart.plot_y_axis()
-
- colors = ((1,0,0), (0,0,1), (0,1,0))
-
- for stat, color in zip(stats, colors):
- chart.plot_values(samples[stat], color=color)
-
- chart.plot_frame()
-
- writer = Writer()
- chart.write(writer)
- return writer.to_string()
-
class CuminXmlPage(Page):
def __init__(self, app, name):
super(CuminXmlPage, self).__init__(app, name)
More information about the rhmessaging-commits
mailing list