Author: justi9
Date: 2007-10-08 16:01:52 -0400 (Mon, 08 Oct 2007)
New Revision: 971
Modified:
mgmt/cumin/python/cumin/
mgmt/cumin/python/cumin/cluster.py
mgmt/cumin/python/cumin/cluster.strings
mgmt/cumin/python/cumin/demo.py
mgmt/cumin/python/cumin/exchange.py
mgmt/cumin/python/cumin/page.py
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/queue.py
mgmt/cumin/python/cumin/queue.strings
mgmt/cumin/python/cumin/server.py
mgmt/cumin/python/cumin/server.strings
mgmt/cumin/python/cumin/virtualhost.py
mgmt/cumin/python/wooly/
mgmt/cumin/python/wooly/server.py
mgmt/cumin/python/wooly/widgets.py
mgmt/cumin/python/wooly/widgets.strings
Log:
A batch commit of the work I did before I got commit access :).
* Marks pyc files ignored in the cumin and wooly dirs
* Adds dummy status blocks to the cluster and server views
* Makes status block styling more general, not queue status specific
* Fills out the server group nav
* Adds servers to server groups in the demo data
Property changes on: mgmt/cumin/python/cumin
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Modified: mgmt/cumin/python/cumin/cluster.py
===================================================================
--- mgmt/cumin/python/cumin/cluster.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/cluster.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -14,7 +14,7 @@
return "Clusters (%i)" % len(model.get_clusters())
def get_items(self, session, model):
- return sorted(model.get_clusters())
+ return sorted(model.get_clusters(), cmp, lambda x: x.name)
def render_item_href(self, session, cluster):
branch = session.branch()
@@ -62,14 +62,17 @@
self.tabs = TabSet(app, "tabs")
self.add_child(self.tabs)
- self.tabs.add_child(self.Servers(app, "servers"))
+ self.tabs.add_child(self.ClusterServers(app, "servers"))
def render_title(self, session, cluster):
return "Cluster '%s'" % cluster.name
- class Servers(ServerSet):
+ def render_name(self, session, cluster):
+ return cluster.name
+
+ class ClusterServers(ServerSet):
def render_title(self, session, cluster):
return "Servers (%i)" % len(cluster.server_items())
def get_items(self, session, cluster):
- return sorted(cluster.server_items())
+ return sorted(cluster.server_items(), cmp, lambda x: x.name)
Modified: mgmt/cumin/python/cumin/cluster.strings
===================================================================
--- mgmt/cumin/python/cumin/cluster.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/cluster.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -13,6 +13,39 @@
[ClusterView.html]
<div class="oblock">
+ <div class="mstatus green" id="{id}">
+ <h2>Cluster Status</h2>
+
+ <div>0 errors, 0 warnings</div>
+ </div>
+
<h1>{title}</h1>
+
+ <dl class="properties">
+ <dt>Name</dt><dd>{name}</dd>
+ </dl>
+
+ <ul class="actions">
+ <li><a href="">Add Server</a></li>
+ <li><a href="">Shutdown Servers in
Cluster</a></li>
+ </ul>
+
{tabs}
</div>
+
+[ClusterServers.html]
+<table class="ClusterServers mobjects">
+ <tr>
+ <th>Name</th>
+ <th>Status</th>
+ <th></th>
+ </tr>
+{items}
+</table>
+
+[ClusterServers.item_html]
+<tr>
+ <td><a href="{item_href}">{item_name}</a></td>
+ <td>0 errors, 0 warnings</td>
+ <td><a class="action"
href="">Remove</a></td>
+</tr>
Modified: mgmt/cumin/python/cumin/demo.py
===================================================================
--- mgmt/cumin/python/cumin/demo.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/demo.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -4,6 +4,9 @@
from model import *
+def fmt(str_, int_):
+ return "%s%02i" % (str_, int_)
+
class DemoData(object):
def __init__(self, model):
self.model = model
@@ -34,14 +37,19 @@
for cluster_count in range(3):
cluster = Cluster(self.model)
- cluster.name = "cluster" + str(cluster_count)
+ cluster.name = fmt("cluster", cluster_count)
clusters.append(cluster)
for server_count in range(12):
server = Server(self.model)
- server.name = "server" + str(server_count)
+ server.name = fmt("server", server_count)
server.set_cluster(clusters[server_count % 3])
+ if server_count % 2:
+ sgroups["East Coast"].add_server(server)
+ else:
+ sgroups["West Coast"].add_server(server)
+
vhost = VirtualHost(self.model)
vhost.name = "default"
server.add_virtual_host(vhost)
@@ -66,7 +74,7 @@
for queue_count in range(10):
queue = Queue(self.model)
- queue.name = "queue" + str(queue_count)
+ queue.name = fmt("queue", queue_count)
vhost.add_queue(queue)
def start_updates(self):
Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/exchange.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -24,7 +24,7 @@
self.set_parameter(param)
def get_items(self, session, vhost):
- return sorted(vhost.exchange_items())
+ return sorted(vhost.exchange_items(), cmp, lambda x: x.name)
def render_item_value(self, session, exchange):
return exchange.id
@@ -40,7 +40,7 @@
return "Exchanges (%s)" % len(vhost.exchange_items())
def get_items(self, session, vhost):
- return sorted(vhost.exchange_items())
+ return sorted(vhost.exchange_items(), cmp, lambda x: x.name)
def render_item_href(self, session, exchange):
branch = session.branch()
@@ -142,7 +142,8 @@
return "Bindings (%i)" % len(exchange.binding_items())
def get_items(self, session, exchange):
- return sorted(exchange.binding_items())
+ return sorted(exchange.binding_items(), cmp,
+ lambda x: x.get_queue().name)
def render_item_href(self, session, binding):
branch = session.branch()
Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/page.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -38,6 +38,9 @@
def show_server(self, session, server):
return self.main.show_server(session, server)
+ def show_server_group(self, session, sgroup):
+ return self.main.show_server_group(session, sgroup)
+
def show_cluster(self, session, cluster):
return self.main.show_cluster(session, cluster)
@@ -91,6 +94,9 @@
self.server = ServerFrame(app, "server")
self.add_child(self.server)
+ self.sgroup = ServerGroupFrame(app, "sgroup")
+ self.add_child(self.sgroup)
+
self.cluster = ClusterFrame(app, "cluster")
self.add_child(self.cluster)
@@ -104,6 +110,10 @@
self.server.set_server(session, server)
return self.show_mode(session, self.server)
+ def show_server_group(self, session, sgroup):
+ self.sgroup.set_server_group(session, sgroup)
+ return self.show_mode(session, self.sgroup)
+
def show_cluster(self, session, cluster):
self.cluster.set_cluster(session, cluster)
return self.show_mode(session, self.cluster)
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/page.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -274,6 +274,33 @@
content: url(resource?name=radio-button-checked.png);
}
+.mstatus {
+ float: right;
+ margin: 1em;
+ padding: 0.75em 1em;
+ width: 15em;
+}
+
+.mstatus h2 {
+ font-weight: bold;
+ margin: 0 0 0.5em 0;
+}
+
+.mstatus.red {
+ border: 1px solid #c99;
+ background-color: #fcc;
+}
+
+.mstatus.yellow {
+ border: 1px solid #cc9;
+ background-color: #ffc;
+}
+
+.mstatus.green {
+ border: 1px solid #9c9;
+ background-color: #cfc;
+}
+
[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/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/queue.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -32,7 +32,7 @@
return "Queues (%s)" % len(vhost.queue_items())
def get_items(self, session, vhost):
- return sorted(vhost.queue_items())
+ return sorted(vhost.queue_items(), cmp, lambda x: x.name)
def render_item_href(self, session, queue):
branch = session.branch()
@@ -200,7 +200,8 @@
return "Bindings (%i)" % len(queue.binding_items())
def get_items(self, session, queue):
- return sorted(queue.binding_items())
+ return sorted(queue.binding_items(), cmp,
+ lambda x: x.get_exchange().name)
def render_item_href(self, session, binding):
branch = session.branch()
@@ -393,7 +394,8 @@
class Exchanges(ExchangeInputSet):
def get_items(self, session, queue):
- return sorted(queue.virtual_host.exchange_items())
+ return sorted(queue.virtual_host.exchange_items(), cmp,
+ lambda x: x.name)
class QueueBindingRemove(CuminConfirmForm):
def on_confirm(self, session, binding):
Modified: mgmt/cumin/python/cumin/queue.strings
===================================================================
--- mgmt/cumin/python/cumin/queue.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/queue.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -66,34 +66,6 @@
}())
</script>
-[QueueStatus.css]
-.QueueStatus {
- float: right;
- margin: 1em;
- padding: 0.75em 1em;
- width: 15em;
-}
-
-.QueueStatus h2 {
- font-weight: bold;
- margin: 0 0 0.5em 0;
-}
-
-.QueueStatus.red {
- border: 1px solid #c99;
- background-color: #fcc;
-}
-
-.QueueStatus.yellow {
- border: 1px solid #cc9;
- background-color: #ffc;
-}
-
-.QueueStatus.green {
- border: 1px solid #9c9;
- background-color: #cfc;
-}
-
[QueueStatus.html]
<script defer="defer">
(function() {
@@ -108,11 +80,11 @@
var warnings = wcount + " " + (wcount == "1" &&
"warning" || "warnings");
if (ecount != "0") {
- elem.node.className = "QueueStatus red";
+ elem.node.className = "QueueStatus mstatus red";
} else if (wcount != "0") {
- elem.node.className = "QueueStatus yellow";
+ elem.node.className = "QueueStatus mstatus yellow";
} else {
- elem.node.className = "QueueStatus green";
+ elem.node.className = "QueueStatus mstatus green";
}
var divs = elem.elems("div");
@@ -123,7 +95,7 @@
wooly.setIntervalUpdate("{id}", "{url}", updateStatus, 3000);
}())
</script>
-<div class="{class}" id="{id}">
+<div class="{class} mstatus" id="{id}">
<h2>Queue Status</h2>
<div>{message_info}</div>
Modified: mgmt/cumin/python/cumin/server.py
===================================================================
--- mgmt/cumin/python/cumin/server.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/server.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -11,7 +11,7 @@
return "Servers (%i)" % len(model.get_servers())
def get_items(self, session, model):
- return sorted(model.get_servers())
+ return sorted(model.get_servers(), cmp, lambda x: x.name)
def render_item_href(self, session, server):
branch = session.branch()
@@ -98,20 +98,18 @@
def render_title(self, session, server):
return "Server '%s'" % server.name
+ def render_name(self, session, server):
+ return server.name
+
class ServerLog(Widget):
def render_title(self, session, server):
return "Log Messages"
-class ServerGroupTree(Widget):
- def __init__(self, app, name):
- super(ServerGroupTree, self).__init__(app, name)
-
- self.item_tmpl = Template(self, "item_html")
-
+class ServerGroupTree(ItemTree):
def render_title(self, session, model):
return "Server Groups (%i)" % len(model.get_server_groups())
- def get_root_items(self, session, model):
+ def get_items(self, session, model):
roots = list()
for group in model.get_server_groups():
@@ -123,24 +121,60 @@
def get_child_items(self, session, group):
return group.child_items()
- def render_root_items(self, session, model):
- roots = self.get_root_items(session, model)
+ def render_item_href(self, session, group):
+ branch = session.branch()
+ self.page().show_server_group(branch, group).show_view(branch)
+ return branch.marshal()
- if roots:
- writer = Writer()
+ def render_item_name(self, session, group):
+ return group.name
- for root in roots:
- self.item_tmpl.render(session, root, writer)
+class ServerGroupParameter(Parameter):
+ def do_unmarshal(self, string):
+ return self.app.model.get_server_group(int(string))
- return writer.to_string()
+ def do_marshal(self, group):
+ return str(group.id)
- def render_child_items(self, session, object):
- writer = Writer()
-
- for child in self.get_child_items(session, object):
- self.item_tmpl.render(session, child, writer)
+class ServerGroupFrame(CuminFrame):
+ def __init__(self, app, name):
+ super(ServerGroupFrame, self).__init__(app, name)
- return writer.to_string()
+ self.param = ServerGroupParameter(app, "id")
+ self.add_parameter(self.param)
+ self.set_object_attribute(self.param)
- def render_item_name(self, session, group):
- return group.name
+ self.view = ServerGroupView(app, "view")
+ self.add_child(self.view)
+
+ def set_server_group(self, session, group):
+ self.param.set(session, group)
+
+ def show_view(self, session):
+ self.show_mode(session, self.view)
+
+ def render_title(self, session, group):
+ return "Server Group '%s'" % group.name
+
+class ServerGroupView(Widget):
+ def __init__(self, app, name):
+ super(ServerGroupView, self).__init__(app, name)
+
+ self.tabs = TabSet(app, "tabs")
+ self.add_child(self.tabs)
+
+ self.tabs.add_child(self.Servers(app, "servers"))
+
+ def render_title(self, session, group):
+ return "Server Group '%s'" % group.name
+
+ def render_parent_groups(self, session, group):
+ return ", ".join([i.name for i in group.parent_items()]) \
+ or "<em>None</em>"
+
+ class Servers(ServerSet):
+ def get_items(self, session, group):
+ return sorted(group.server_items(), cmp, lambda x: x.name)
+
+ def render_title(self, session, group):
+ return "Servers (%i)" % len(group.server_items())
Modified: mgmt/cumin/python/cumin/server.strings
===================================================================
--- mgmt/cumin/python/cumin/server.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/server.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -17,8 +17,18 @@
[ServerView.html]
<div class="oblock">
+ <div class="mstatus green" id="{id}">
+ <h2>Server Status</h2>
+
+ <div>0 errors, 0 warnings</div>
+ </div>
+
<h1>{title}</h1>
+ <dl class="properties">
+ <dt>Name</dt><dd>{name}</dd>
+ </dl>
+
<ul class="actions">
<li><a href="">Shutdown</a></li>
</ul>
@@ -37,8 +47,24 @@
}
[ServerGroupTree.html]
-<ul class="ServerGroupTree">{root_items}</ul>
+<ul class="ServerGroupTree">{items}</ul>
[ServerGroupTree.item_html]
-<li><a href="">{item_name}</a></li>
+<li><a href="{item_href}">{item_name}</a></li>
<ul>{child_items}</ul>
+
+[ServerGroupView.html]
+<div class="oblock">
+ <h1>{title}</h1>
+
+ <dl class="properties">
+ <dt>Parent Groups</dt><dd>{parent_groups}</dd>
+ </dl>
+
+ <ul class="actions">
+ <li><a href="">Add Server</a></li>
+ <li><a href="">Shutdown All Servers in
Group</a></li>
+ </ul>
+
+ {tabs}
+</div>
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -13,7 +13,7 @@
return "Virtual Hosts (%i)" % len(server.virtual_host_items())
def get_items(self, session, server):
- return sorted(server.virtual_host_items())
+ return sorted(server.virtual_host_items(), cmp, lambda x: x.name)
def render_item_href(self, session, vhost):
branch = session.branch()
Property changes on: mgmt/cumin/python/wooly
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Modified: mgmt/cumin/python/wooly/server.py
===================================================================
--- mgmt/cumin/python/wooly/server.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/server.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -19,8 +19,12 @@
server.app = self.app
print "Cumin server started on port %s" % (self.port)
- server.serve_forever()
+ try:
+ server.serve_forever()
+ except KeyboardInterrupt:
+ pass
+
class RequestHandler(BaseHTTPRequestHandler):
http_date = "%a, %d %b %Y %H:%M:%S %Z"
Modified: mgmt/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/cumin/python/wooly/widgets.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/widgets.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -145,3 +145,19 @@
def render_item_content(self, session, item):
return None
+
+class ItemTree(ItemSet):
+ def get_items(self, session, object):
+ """Get the root items"""
+ pass
+
+ def get_child_items(self, session, object):
+ pass
+
+ def render_child_items(self, session, object):
+ writer = Writer()
+
+ for child in self.get_child_items(session, object):
+ self.item_tmpl.render(session, child, writer)
+
+ return writer.to_string()
Modified: mgmt/cumin/python/wooly/widgets.strings
===================================================================
--- mgmt/cumin/python/wooly/widgets.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/widgets.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -58,3 +58,10 @@
[ItemSet.item_html]
<li>{item_content}</li>
+
+[ItemTree.html]
+<ul class="ItemTree">{items}</ul>
+
+[ItemTree.item_html]
+<li>{item_content}</li>
+<ul>{child_items}</ul>