[rhmessaging-commits] rhmessaging commits: r1156 - in mgmt: notes and 1 other directory.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Wed Oct 24 11:38:06 EDT 2007


Author: justi9
Date: 2007-10-24 11:38:06 -0400 (Wed, 24 Oct 2007)
New Revision: 1156

Added:
   mgmt/cumin/python/cumin/broker.py
   mgmt/cumin/python/cumin/broker.strings
   mgmt/cumin/python/cumin/brokergroup.py
   mgmt/cumin/python/cumin/brokergroup.strings
   mgmt/cumin/python/cumin/brokerprofile.py
   mgmt/cumin/python/cumin/brokerprofile.strings
Removed:
   mgmt/cumin/python/cumin/server.py
   mgmt/cumin/python/cumin/server.strings
   mgmt/cumin/python/cumin/servergroup.py
   mgmt/cumin/python/cumin/servergroup.strings
   mgmt/cumin/python/cumin/serverprofile.py
   mgmt/cumin/python/cumin/serverprofile.strings
Modified:
   mgmt/notes/Todo
Log:
Completion of the server->broker rename.



Copied: mgmt/cumin/python/cumin/broker.py (from rev 1155, mgmt/cumin/python/cumin/server.py)
===================================================================
--- mgmt/cumin/python/cumin/broker.py	                        (rev 0)
+++ mgmt/cumin/python/cumin/broker.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,401 @@
+from wooly import *
+from wooly.widgets import *
+
+from configproperty import *
+from virtualhost import *
+from widgets import *
+from parameters import *
+from util import *
+from random import random
+
+strings = StringCatalog(__file__)
+
+class BrokerSet(ItemSet):
+    def render_title(self, session, model):
+        return "Brokers (%i)" % len(model.get_brokers())
+
+    def get_items(self, session, model):
+        return sorted_by(model.get_brokers())
+
+    def render_item_link(self, session, broker):
+        branch = session.branch()
+        self.page().show_broker(branch, broker).show_view(branch)
+
+        return mlink(branch.marshal(), "Broker", broker.name)
+
+    def render_item_group_link(self, session, broker):
+        group = broker.get_broker_group()
+
+        if group:
+            branch = session.branch()
+            self.page().show_broker_group(branch, group).show_view(branch)
+
+            return mlink(branch.marshal(), "BrokerGroup", group.name)
+        else:
+            return none()
+
+    def render_item_profile_link(self, session, broker):
+        profile = broker.get_broker_profile()
+
+        if profile:
+            branch = session.branch()
+            self.page().show_broker_profile(branch, profile).show_view(branch)
+
+            return mlink(branch.marshal(), "BrokerProfile", profile.name)
+        else:
+            return none()
+
+    def render_item_cluster_link(self, session, broker):
+        cluster = broker.get_cluster()
+
+        if cluster:
+            branch = session.branch()
+            self.page().show_cluster(branch, cluster).show_view(branch)
+
+            return mlink(branch.marshal(), "Cluster", cluster.name)
+        else:
+            return none()
+
+    def render_item_status(self, session, broker):
+        return "0 errors, 0 warnings"
+
+    def render_item_load(self, session, broker):
+        return "%.2f" % random()
+
+class BrokerSetForm(BrokerSet, Form):
+    def __init__(self, app, name):
+        super(BrokerSetForm, self).__init__(app, name)
+
+        self.broker = BrokerParameter(app, "param")
+        self.add_parameter(self.broker)
+        self.add_form_parameter(self.broker)
+
+        self.brokers = ListParameter(app, "ids", self.broker)
+        self.add_parameter(self.brokers)
+        self.add_form_parameter(self.brokers)
+
+        self.submit = self.Submit(app, "submit", self)
+        self.add_child(self.submit)
+
+    def do_process(self, session, model):
+        if self.submit.get(session):
+            self.submit.set(session, False)
+
+            for broker in self.brokers.get(session):
+                print "broker", broker
+
+            session.set_redirect(session.marshal())
+
+    def render_item_checkbox_name(self, session, broker):
+        return self.brokers.path()
+
+    def render_item_checkbox_value(self, session, broker):
+        return self.broker.marshal(broker)
+
+    def render_item_checkbox_checked_attr(self, session, broker):
+        return broker in self.brokers.get(session) and "checked=\"checked\""
+
+    class Submit(FormButton):
+        def render_content(self, session, model):
+            return "Submit"
+
+class BrokerFrame(CuminFrame):
+    def __init__(self, app, name):
+        super(BrokerFrame, self).__init__(app, name)
+
+        self.param = BrokerParameter(app, "id")
+        self.add_parameter(self.param)
+        self.set_object_parameter(self.param)
+
+        self.view = BrokerView(app, "view")
+        self.add_mode(self.view)
+
+        self.vhost = VirtualHostFrame(app, "vhost")
+        self.add_mode(self.vhost)
+
+        self.prop = BrokerConfigPropertyForm(app, "prop")
+        self.add_mode(self.prop)
+
+    def show_view(self, session):
+        return self.show_mode(session, self.view)
+
+    def show_virtual_host(self, session, vhost):
+        self.vhost.set_object(session, vhost)
+        return self.show_mode(session, self.vhost)
+
+    def show_config_property(self, session, prop):
+        self.prop.set_config_property(session, prop)
+        frame = self.show_mode(session, self.prop)
+        return self.page().set_current_frame(session, frame)
+
+    def render_title(self, session, broker):
+        return "Broker '%s'" % broker.name
+
+class BrokerConfigPropertyForm(CuminForm, Frame):
+    def __init__(self, app, name):
+        super(BrokerConfigPropertyForm, self).__init__(app, name)
+
+        self.param = ConfigPropertyParameter(app, "param")
+        self.add_parameter(self.param)
+
+        self.source = Parameter(app, "source")
+        self.source.set_default("local")
+        self.add_parameter(self.source)
+
+        self.profile = RadioInput(app, "profile", self)
+        self.profile.set_parameter(self.source)
+        self.profile.set_value("profile")
+        self.add_child(self.profile)
+
+        self.pvalue = TextInput(app, "profile_value", self)
+        self.pvalue.set_disabled(True)
+        self.add_child(self.pvalue)
+
+        self.broker = RadioInput(app, "broker", self)
+        self.broker.set_parameter(self.source)
+        self.broker.set_value("broker")
+        self.add_child(self.broker)
+
+        self.svalue = TextInput(app, "broker_value", self)
+        self.svalue.set_disabled(True)
+        self.add_child(self.svalue)
+
+        self.local = RadioInput(app, "local", self)
+        self.local.set_parameter(self.source)
+        self.local.set_value("local")
+        self.add_child(self.local)
+
+        self.lvalue = TextInput(app, "local_value", self)
+        self.add_child(self.lvalue)
+
+    def get_object(self, session, object):
+        return self.param.get(session)
+
+    def set_config_property(self, session, prop):
+        return self.param.set(session, prop)
+
+    def process_cancel(self, session, prop):
+        branch = session.branch()
+        self.page().show_broker(branch, prop.get_broker()).show_view(branch)
+        session.set_redirect(branch.marshal())
+
+    def process_submit(self, session, prop):
+        source = self.source.get(session)
+        
+        if source == "profile":
+            prop.value = get_profile_value(prop)
+        elif source == "broker":
+            prop.value = prop.broker_value
+        elif source == "local":
+            prop.value = self.lvalue.get(session)
+        else:
+            raise Exception()
+
+        self.process_cancel(session, prop)
+
+    def process_display(self, session, prop):
+        self.pvalue.set(session, get_profile_value(prop))
+        self.svalue.set(session, prop.broker_value)
+        self.lvalue.set(session, prop.value)
+
+    def render_title(self, session, prop):
+        return "Edit Property '%s'" % prop.name
+
+def get_profile_value(prop):
+    profile = prop.get_broker().get_broker_profile()
+    value = None
+
+    if profile:
+        for p in profile.config_property_items():
+            if p.name == prop.name:
+                value = p.value
+
+    return value
+
+class BrokerView(Widget):
+    def __init__(self, app, name):
+        super(BrokerView, self).__init__(app, name)
+
+        self.tabs = TabSet(app, "tabs")
+        self.add_child(self.tabs)
+
+        self.tabs.add_tab(self.BrokerVirtualHostTab(app, "vhosts"))
+        self.config = self.BrokerConfigTab(app, "config")
+        self.tabs.add_tab(self.config)
+        self.tabs.add_tab(self.BrokerStatsTab(app, "stats"))
+        self.tabs.add_tab(self.BrokerLogTab(app, "log"))
+
+    def show_config(self, session):
+        return self.tabs.show_mode(session, self.config)
+
+    def render_title(self, session, broker):
+        return "Broker '%s'" % broker.name
+
+    def render_name(self, session, broker):
+        return broker.name
+
+    def render_cluster_link(self, session, broker):
+        cluster = broker.get_cluster()
+        
+        if cluster:
+            branch = session.branch()
+            self.page().show_cluster(branch, cluster).show_view(branch)
+            html = mlink(branch.marshal(), "Cluster", cluster.name)
+        else:
+            html = none()
+        
+        return html
+
+    def render_profile_link(self, session, broker):
+        profile = broker.get_broker_profile()
+
+        if profile:
+            branch = session.branch()
+            self.page().show_broker_profile(branch, profile).show_view(branch)
+            html = mlink(branch.marshal(), "BrokerProfile", profile.name)
+        else:
+            html = none()
+
+        return html
+
+    def render_version(self, session, broker):
+        return "1.0"
+
+    class BrokerVirtualHostTab(VirtualHostSet):
+        def render_title(self, session, broker):
+            return "Functional Hosts (%i)" % len(broker.virtual_host_items())
+
+        def get_items(self, session, broker):
+            return sorted_by(broker.virtual_host_items())
+
+    class BrokerConfigTab(ConfigPropertySet):
+        def render_title(self, session, broker):
+            return "Configuration"
+
+        def get_items(self, session, broker):
+            return sorted_by(broker.config_property_items())
+
+        def maybe_highlight(self, value, comparedto):
+            if str(value) != str(comparedto):
+                value = "<span class=\"BrokerConfigTab diff\">%s</span>" \
+                        % value
+
+            return value
+
+        def render_item_broker_value(self, session, prop):
+            return self.maybe_highlight(prop.broker_value, prop.value)
+
+        def render_item_profile_value(self, session, prop):
+            value = get_profile_value(prop)
+            return self.maybe_highlight(value, prop.value)
+
+        def render_item_edit_href(self, session, prop):
+            branch = session.branch()
+            frame = self.page().show_broker(branch, prop.get_broker())
+            frame.show_config_property(branch, prop)
+            return branch.marshal()
+
+    class BrokerStatsTab(Widget):
+        def render_title(self, session, broker):
+            return "Statistics"
+
+    class BrokerLogTab(Widget):
+        def render_title(self, session, broker):
+            return "Log Messages"
+
+class BrokerBrowser(Widget):
+    def __init__(self, app, name):
+        super(BrokerBrowser, self).__init__(app, name)
+
+        self.group_tmpl = Template(self, "group_html")
+        self.profile_tmpl = Template(self, "profile_html")
+        self.cluster_tmpl = Template(self, "cluster_html")
+        
+        self.group = BrokerGroupParameter(app, "group")
+        self.add_parameter(self.group)
+
+        self.profile = BrokerProfileParameter(app, "profile")
+        self.add_parameter(self.profile)
+
+        self.cluster = ClusterParameter(app, "cluster")
+        self.add_parameter(self.cluster)
+
+        self.brokers = self.BrowserBrokers(app, "brokers")
+        self.add_child(self.brokers)
+
+    class BrowserBrokers(BrokerSetForm):
+        def get_items(self, session, model):
+            brokers = sorted_by(model.get_brokers())
+            group = self.parent.group.get(session)
+            profile = self.parent.profile.get(session)
+            cluster = self.parent.cluster.get(session)
+
+            for broker in model.get_brokers():
+                if group and group not in broker.broker_group_items():
+                    brokers.remove(broker)
+
+                if profile and profile is not broker.get_broker_profile():
+                    try:
+                        brokers.remove(broker)
+                    except ValueError:
+                        pass
+                    
+                if cluster and cluster is not broker.get_cluster():
+                    try:
+                        brokers.remove(broker)
+                    except ValueError:
+                        pass
+
+            return brokers
+
+        def render_none(self, session, model):
+            return none()
+
+    def render_clear_filters_href(self, session, model):
+        branch = session.branch()
+        self.group.set(branch, None)
+        self.profile.set(branch, None)
+        self.cluster.set(branch, None)
+        return branch.marshal()
+
+    def render_group_filters(self, session, model):
+        groups = sorted_by(model.get_broker_groups())
+        return self._render_filters(session, groups, self.group_tmpl)
+
+    def render_group_link(self, session, group):
+        return self._render_filter_link(session, group, self.group)
+
+    def render_profile_filters(self, session, model):
+        profiles = sorted_by(model.get_broker_profiles())
+        return self._render_filters(session, profiles, self.profile_tmpl)
+
+    def render_profile_link(self, session, profile):
+        return self._render_filter_link(session, profile, self.profile)
+
+    def render_cluster_filters(self, session, model):
+        clusters = sorted_by(model.get_clusters())
+        return self._render_filters(session, clusters, self.cluster_tmpl)
+
+    def render_cluster_link(self, session, cluster):
+        return self._render_filter_link(session, cluster, self.cluster)
+
+    def _render_filters(self, session, collection, template):
+        writer = Writer()
+
+        for object in collection:
+            template.render(session, object, writer)
+
+        template.render(session, None, writer)
+
+        return writer.to_string()
+
+    def _render_filter_link(self, session, object, param):
+        branch = session.branch()
+        param.set(branch, object)
+        href = branch.marshal()
+
+        name = object and object.name or "Any"
+        
+        class_ = param.get(session) is object and "selected"
+
+        return link(href, name, class_)

Copied: mgmt/cumin/python/cumin/broker.strings (from rev 1155, mgmt/cumin/python/cumin/server.strings)
===================================================================
--- mgmt/cumin/python/cumin/broker.strings	                        (rev 0)
+++ mgmt/cumin/python/cumin/broker.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,195 @@
+[BrokerSet.html]
+<table class="mobjects">
+  <tr>
+    <th>Broker</th>
+    <th>Profile</th>
+    <th>Cluster</th>
+    <th>Status</th>
+  </tr>
+
+  {items}
+</table>
+
+[BrokerSet.item_html]
+<tr>
+  <td>{item_link}</td>
+  <td>{item_profile_link}</td>
+  <td>{item_cluster_link}</td>
+  <td>0 errors, 0 warnings</td>
+</tr>
+
+[BrokerSetForm.html]
+<form id="{id}" method="post" action="?">
+  <!-- <select onchange="document.getElementById('{id}.submit').submit()"> -->
+  <select>
+    <option>Act on Selection...</option>
+    <optgroup label="Actions">
+      <option>Shutdown</option>
+      <option>Load Balance</option>
+    </optgroup>
+    <optgroup label="Add to Group">
+      <option>East Coast</option>
+      <option>West Coast</option>
+      <option>Marketing</option>
+      <option>Sales</option>
+    </optgroup>
+  </select>
+  {submit}
+  <br/><br/>
+
+  <table class="mobjects">
+    <tr>
+      <th><input type="checkbox"/></th>
+      <th>Broker</th>
+      <th>Profile</th>
+      <th>Cluster</th>
+      <th>Status</th>
+      <th>Load</th>
+    </tr>
+
+    {items}
+  </table>
+  {hidden_inputs}
+</form>
+
+[BrokerSetForm.item_html]
+<tr>
+  <td><input type="checkbox" name="{item_checkbox_name}" value="{item_checkbox_value}" {item_checkbox_checked_attr}/></td>
+  <td>{item_link}</td>
+  <td>{item_profile_link}</td>
+  <td>{item_cluster_link}</td>
+  <td>{item_status}</td>
+  <td>{item_load}</td>
+</tr>
+
+[BrokerConfigTab.css]
+.BrokerConfigTab.diff {
+  background-color: #ff9;
+}
+
+[BrokerConfigTab.html]
+<ul class="actions">
+  <li><a href="">Apply Configuration to Broker</a></li>
+  <li><a href="">Add Property</a></li>
+</ul>
+
+<table class="mobjects">
+  <tr>
+    <th>Property</th>
+    <th>Configured Value</th>
+    <th>Broker Value</th>
+    <th>Profile Value</th>
+    <th></th>
+  </tr>
+
+  {items}
+</table>
+
+[BrokerConfigTab.item_html]
+<tr>
+  <td>{item_name}</td>
+  <td>{item_value}</td>
+  <td>{item_broker_value}</td>
+  <td>{item_profile_value}</td>
+  <td><a class="action" href="{item_edit_href}">Edit</a></td>
+</tr>
+
+[BrokerConfigPropertyForm.css]
+.BrokerConfigPropertyForm div.value {
+  margin: 1em 2em;
+}
+
+[BrokerConfigPropertyForm.html]
+<form id="{id}" class="BrokerConfigPropertyForm mform" method="post" action="?">
+  <div class="head">
+    <h1>{title}</h1>
+  </div>
+  <div class="body">
+    <span class="legend">Value</span>
+    <fieldset>
+      <div class="field">
+        {profile} Use the value from the broker profile
+        <div class="value">{profile_value}</div>
+      </div>
+      <div class="field">
+        {broker} Use the value currently set on the broker
+        <div class="value">{broker_value}</div>
+      </div>
+      <div class="field">
+        {local} Set a new value
+        <div class="value">{local_value}</div>
+      </div>
+    </fieldset>
+
+    {hidden_inputs}
+  </div>
+  <div class="foot">
+    <div style="display: block; float: left;"><button>Help</button></div>
+    {cancel}
+    {submit}
+  </div>
+</form>
+<script defer="defer">
+(function() {
+    var elem = wooly.doc().elem("{id}").node.elements[1];
+    elem.focus();
+    elem.select();
+}())
+</script>
+
+[BrokerView.html]
+<div class="oblock">
+  <div class="mstatus green" id="{id}">
+    <h2>Broker Status</h2>
+
+    <div>0 errors, 0 warnings</div>
+  </div>
+
+  <h1>{title}</h1>
+
+  <dl class="properties">
+    <dt>Name</dt><dd>{name}</dd>
+    <dt>Cluster</dt><dd>{cluster_link}</dd>
+    <dt>Broker Profile</dt><dd>{profile_link}</dd>
+    <dt>Software Version</dt><dd>{version}</dd>
+  </dl>
+
+  <ul class="actions">
+    <li><a href="">Shutdown This Broker</a></li>
+  </ul>
+
+  {tabs}
+</div>
+
+[BrokerBrowser.html]
+<table class="browser">
+  <tr>
+    <td class="nav">
+      <ul class="actions">
+        <li><a href="{clear_filters_href}">Clear Filters</a></li>
+      </ul>
+
+      <h2>Filter by Group</h2>
+      <ul class="slist">{group_filters}</ul>
+      <h2>Filter by Profile</h2>
+      <ul class="slist">{profile_filters}</ul>
+      <h2>Filter by Cluster</h2>
+      <ul class="slist">{cluster_filters}</ul>
+    </td>
+    <td class="view">
+      <ul class="actions">
+        <li><a href="">Register New Brokers</a></li>
+      </ul>
+      {brokers}
+    </td>
+  </tr>
+</div>
+
+[BrokerBrowser.group_html]
+<li>{group_link}</li>
+
+[BrokerBrowser.profile_html]
+<li>{profile_link}</li>
+
+[BrokerBrowser.cluster_html]
+<li>{cluster_link}</li>

Copied: mgmt/cumin/python/cumin/brokergroup.py (from rev 1155, mgmt/cumin/python/cumin/servergroup.py)
===================================================================
--- mgmt/cumin/python/cumin/brokergroup.py	                        (rev 0)
+++ mgmt/cumin/python/cumin/brokergroup.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,132 @@
+from wooly import *
+from wooly.widgets import *
+
+from broker import BrokerSet
+from model import *
+from widgets import *
+from parameters import *
+from util import *
+
+strings = StringCatalog(__file__)
+
+class BrokerGroupSet(ItemSet):
+    def render_title(self, session, model):
+        return "Broker Groups (%i)" % len(model.get_broker_groups())
+
+    def render_group_add_href(self, session, model):
+        branch = session.branch()
+        self.page().show_broker_group_add(branch)
+        return branch.marshal()
+
+    def get_items(self, session, model):
+        return sorted_by(model.get_broker_groups())
+    
+    def render_item_link(self, session, group):
+        href = self.page().broker_group_href(session, group)
+        return mlink(href, "BrokerGroup", group.name)
+
+    def render_item_config(self, session, group):
+        count = len(group.broker_items())
+        return "%i broker%s" % (count, count == 1 and "" or "s")
+
+    def render_item_status(self, session, group):
+        return "0 errors, 0 warnings"
+
+    def render_none(self, session, group):
+        return none()
+
+class BrokerGroupFrame(CuminFrame):
+    def __init__(self, app, name):
+        super(BrokerGroupFrame, self).__init__(app, name)
+
+        self.param = BrokerGroupParameter(app, "id")
+        self.add_parameter(self.param)
+        self.set_object_parameter(self.param)
+
+        self.view = BrokerGroupView(app, "view")
+        self.add_child(self.view)
+        self.set_view_mode(self.view)
+
+        self.edit = BrokerGroupEdit(app, "edit")
+        self.add_child(self.edit)
+        self.set_edit_mode(self.edit)
+
+    def render_title(self, session, group):
+        return "Broker Group '%s'" % group.name
+
+class BrokerGroupView(Widget):
+    def __init__(self, app, name):
+        super(BrokerGroupView, self).__init__(app, name)
+
+        self.tabs = TabSet(app, "tabs")
+        self.add_child(self.tabs)
+
+        self.tabs.add_tab(self.GroupBrokerTab(app, "brokers"))
+
+    def render_title(self, session, group):
+        return "Broker Group '%s'" % group.name
+
+    def render_name(self, session, group):
+        return group.name
+
+    def render_category(self, session, group):
+        return group.get_type().name
+
+    def render_edit_href(self, session, group):
+        branch = session.branch()
+        self.page().show_broker_group(branch, group).show_edit(branch)
+        return branch.marshal()
+
+    class GroupBrokerTab(BrokerSet):
+        def get_items(self, session, group):
+            return sorted_by(group.broker_items())
+        
+        def render_title(self, session, group):
+            return "Brokers (%i)" % len(group.broker_items())
+
+class BrokerGroupForm(CuminForm):
+    def __init__(self, app, name):
+        super(BrokerGroupForm, self).__init__(app, name)
+
+        self.group_name = TextInput(app, "name", self)
+        self.add_child(self.group_name)
+
+    def process_group(self, session, group):
+        group.lock()
+        try:
+            group.name = self.group_name.get(session)
+            group.set_type(self.app.model.get_broker_group_types()[0])
+        finally:
+            group.unlock()
+
+        branch = session.branch()
+        self.page().show_broker_group(branch, group).show_view(branch)
+        session.set_redirect(branch.marshal())
+
+class BrokerGroupAdd(BrokerGroupForm, Frame):
+    def process_cancel(self, session, model):
+        branch = session.branch()
+        self.page().show_view(branch)
+        session.set_redirect(branch.marshal())
+    
+    def process_submit(self, session, model):
+        group = BrokerGroup(model)
+        self.process_group(session, group)
+    
+    def render_title(self, session, model):
+        return "Add Group"
+
+class BrokerGroupEdit(BrokerGroupForm, Frame):
+    def process_cancel(self, session, group):
+        branch = session.branch()
+        self.parent.show_view(branch)
+        session.set_redirect(branch.marshal())
+
+    def process_submit(self, session, group):
+        self.process_group(session, group)
+
+    def process_display(self, session, group):
+        self.group_name.set(session, group.name)
+
+    def render_title(self, session, group):
+        return "Edit Group '%s'" % group.name

Copied: mgmt/cumin/python/cumin/brokergroup.strings (from rev 1155, mgmt/cumin/python/cumin/servergroup.strings)
===================================================================
--- mgmt/cumin/python/cumin/brokergroup.strings	                        (rev 0)
+++ mgmt/cumin/python/cumin/brokergroup.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,74 @@
+[BrokerGroupSet.html]
+<ul class="actions">
+  <li><a href="{group_add_href}">Add Broker Group</a></li>
+</ul>
+
+<button>Shutdown</button>
+<button>Remove</button>
+
+<br/><br/>
+
+<table class="mobjects">
+  <tr>
+    <th><input type="checkbox"/></th>
+    <th>Broker Group</th>
+    <th>Configuration</th>
+    <th>Status</th>
+  </tr>
+
+  {items}
+</table>
+
+[BrokerGroupSet.item_html]
+<tr>
+  <td><input type="checkbox"/></td>
+  <td>{item_link}</td>
+  <td>{item_config}</td>
+  <td>{item_status}</td>
+</tr>
+
+[BrokerGroupView.html]
+<div class="mstatus green" id="{id}">
+  <h2>Broker Group Status</h2>
+
+  <div>0 errors, 0 warnings</div>
+</div>
+
+<h1>{title}</h1>
+
+<dl class="properties">
+  <dt>Name</dt><dd>{name}</dd>
+  <dt>Category</dt><dd>{category}</dd>
+</dl>
+
+<ul class="actions">
+  <li><a href="{edit_href}">Edit This Broker Group</a></li>
+  <li><a href="">Remove This Broker Group</a></li>
+</ul>
+
+{tabs}
+
+[BrokerGroupForm.html]
+<form id="{id}" class="BrokerGroupForm mform" method="post" action="?">
+  <div class="head">
+    <h1>{title}</h1>
+  </div>
+  <div class="body">
+    <span class="legend">Name</span>
+    <fieldset>{name}</fieldset>
+
+    {hidden_inputs}
+  </div>
+  <div class="foot">
+    <div style="display: block; float: left;"><button>Help</button></div>
+    {cancel}
+    {submit}
+  </div>
+</form>
+<script defer="defer">
+(function() {
+    var elem = wooly.doc().elem("{id}").node.elements[1];
+    elem.focus();
+    elem.select();
+}())
+</script>

Copied: mgmt/cumin/python/cumin/brokerprofile.py (from rev 1155, mgmt/cumin/python/cumin/serverprofile.py)
===================================================================
--- mgmt/cumin/python/cumin/brokerprofile.py	                        (rev 0)
+++ mgmt/cumin/python/cumin/brokerprofile.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,87 @@
+from wooly import *
+from wooly.widgets import *
+
+from configproperty import *
+from broker import *
+from widgets import *
+from parameters import *
+from util import *
+
+strings = StringCatalog(__file__)
+
+class BrokerProfileSet(ItemSet):
+    def get_items(self, session, model):
+        return sorted_by(model.get_broker_profiles())
+
+    def render_item_link(self, session, profile):
+        branch = session.branch()
+        frame = self.page().show_broker_profile(branch, profile)
+        frame.show_view(branch)
+        return mlink(branch.marshal(), "BrokerProfile", profile.name)
+
+class BrokerProfileFrame(CuminFrame):
+    def __init__(self, app, name):
+        super(BrokerProfileFrame, self).__init__(app, name)
+
+        self.param = BrokerProfileParameter(app, "id")
+        self.add_parameter(self.param)
+        self.set_object_parameter(self.param)
+
+        self.view = BrokerProfileView(app, "view")
+        self.add_mode(self.view)
+
+    def show_view(self, session):
+        return self.show_mode(session, self.view)
+
+    def render_title(self, session, profile):
+        return "Broker Profile '%s'" % profile.name
+
+class BrokerProfileView(Widget):
+    def __init__(self, app, name):
+        super(BrokerProfileView, self).__init__(app, name)
+
+        self.tabs = TabSet(app, "tabs")
+        self.add_child(self.tabs)
+        
+        self.tabs.add_tab(self.ProfileConfigTab(app, "config"))
+        self.tabs.add_tab(self.ProfileBrokerTab(app, "brokers"))
+
+    def render_title(self, session, profile):
+        return "Broker Profile '%s'" % profile.name
+
+    def render_name(self, session, profile):
+        return profile.name
+
+    class ProfileConfigTab(ConfigPropertySet):
+        def get_items(self, session, profile):
+            return sorted_by(profile.config_property_items())
+        
+        def render_title(self, session, profile):
+            return "Configuration"
+
+    class ProfileBrokerTab(BrokerSet):
+        def __init__(self, app, name):
+            super(BrokerProfileView.ProfileBrokerTab, self).__init__(app, name)
+
+        def render_title(self, session, profile):
+            return "Brokers (%i)" % len(profile.broker_items())
+
+        def get_items(self, session, profile):
+            return sorted_by(profile.broker_items())
+
+        def render_item_config_href(self, session, broker):
+            branch = session.branch()
+            frame = self.page().show_broker(branch, broker)
+            frame.show_view(branch).show_config(branch)
+            return branch.marshal()
+
+        def render_item_config_status(self, session, broker):
+            diffs = 0
+
+            for prop in broker.get_broker_profile().config_property_items():
+                for iprop in broker.config_property_items():
+                    if iprop.name == prop.name:
+                        if iprop.value != prop.value:
+                            diffs += 1
+                            
+            return "%i difference(s)" % diffs

Copied: mgmt/cumin/python/cumin/brokerprofile.strings (from rev 1155, mgmt/cumin/python/cumin/serverprofile.strings)
===================================================================
--- mgmt/cumin/python/cumin/brokerprofile.strings	                        (rev 0)
+++ mgmt/cumin/python/cumin/brokerprofile.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -0,0 +1,71 @@
+[BrokerProfileSet.html]
+<table class="BrokerProfileSet mobjects">
+  <tr>
+    <th>Broker Profile</th>
+  </tr>
+
+  {items}
+</table>
+
+[BrokerProfileSet.item_html]
+<tr>
+  <td>{item_link}</td>
+</tr>
+
+[BrokerProfileView.html]
+<div class="oblock">
+  <h1>{title}</h1>
+
+  <dl class="properties">
+    <dt>Name</dt><dd>{name}</dd>
+  </dl>
+
+  <ul class="actions">
+    <li><a href="">Edit This Profile</a></li>
+  </ul>
+
+  {tabs}
+</div>
+
+[ProfileConfigTab.html]
+<ul class="actions">
+  <li><a href="">Add Property</a></li>
+</ul>
+
+<table class="mobjects">
+  <tr>
+    <th>Property</th>
+    <th>Configured Value</th>
+    <th></th>
+  </tr>
+
+  {items}
+</table>
+
+[ProfileConfigTab.item_html]
+<tr>
+  <td>{item_name}</td>
+  <td>{item_value}</td>
+  <td><a class="action" href="">Edit</a></td>
+</tr>
+
+[ProfileBrokerTab.html]
+<ul class="actions">
+  <li><a href="">Apply Profile Configuration to Brokers</a></li>
+</ul>
+
+<table class="mobjects">
+  <tr>
+    <th>Broker</th>
+    <th>Configuration Status</th>
+    <th></th>
+  </tr>
+
+  {items}
+</table>
+
+[ProfileBrokerTab.item_html]
+<tr>
+  <td>{item_link}</td>
+  <td><a href="{item_config_href}">{item_config_status}</a></td>
+</tr>

Deleted: mgmt/cumin/python/cumin/server.py
===================================================================
--- mgmt/cumin/python/cumin/server.py	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/server.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,401 +0,0 @@
-from wooly import *
-from wooly.widgets import *
-
-from configproperty import *
-from virtualhost import *
-from widgets import *
-from parameters import *
-from util import *
-from random import random
-
-strings = StringCatalog(__file__)
-
-class BrokerSet(ItemSet):
-    def render_title(self, session, model):
-        return "Brokers (%i)" % len(model.get_brokers())
-
-    def get_items(self, session, model):
-        return sorted_by(model.get_brokers())
-
-    def render_item_link(self, session, broker):
-        branch = session.branch()
-        self.page().show_broker(branch, broker).show_view(branch)
-
-        return mlink(branch.marshal(), "Broker", broker.name)
-
-    def render_item_group_link(self, session, broker):
-        group = broker.get_broker_group()
-
-        if group:
-            branch = session.branch()
-            self.page().show_broker_group(branch, group).show_view(branch)
-
-            return mlink(branch.marshal(), "BrokerGroup", group.name)
-        else:
-            return none()
-
-    def render_item_profile_link(self, session, broker):
-        profile = broker.get_broker_profile()
-
-        if profile:
-            branch = session.branch()
-            self.page().show_broker_profile(branch, profile).show_view(branch)
-
-            return mlink(branch.marshal(), "BrokerProfile", profile.name)
-        else:
-            return none()
-
-    def render_item_cluster_link(self, session, broker):
-        cluster = broker.get_cluster()
-
-        if cluster:
-            branch = session.branch()
-            self.page().show_cluster(branch, cluster).show_view(branch)
-
-            return mlink(branch.marshal(), "Cluster", cluster.name)
-        else:
-            return none()
-
-    def render_item_status(self, session, broker):
-        return "0 errors, 0 warnings"
-
-    def render_item_load(self, session, broker):
-        return "%.2f" % random()
-
-class BrokerSetForm(BrokerSet, Form):
-    def __init__(self, app, name):
-        super(BrokerSetForm, self).__init__(app, name)
-
-        self.broker = BrokerParameter(app, "param")
-        self.add_parameter(self.broker)
-        self.add_form_parameter(self.broker)
-
-        self.brokers = ListParameter(app, "ids", self.broker)
-        self.add_parameter(self.brokers)
-        self.add_form_parameter(self.brokers)
-
-        self.submit = self.Submit(app, "submit", self)
-        self.add_child(self.submit)
-
-    def do_process(self, session, model):
-        if self.submit.get(session):
-            self.submit.set(session, False)
-
-            for broker in self.brokers.get(session):
-                print "broker", broker
-
-            session.set_redirect(session.marshal())
-
-    def render_item_checkbox_name(self, session, broker):
-        return self.brokers.path()
-
-    def render_item_checkbox_value(self, session, broker):
-        return self.broker.marshal(broker)
-
-    def render_item_checkbox_checked_attr(self, session, broker):
-        return broker in self.brokers.get(session) and "checked=\"checked\""
-
-    class Submit(FormButton):
-        def render_content(self, session, model):
-            return "Submit"
-
-class BrokerFrame(CuminFrame):
-    def __init__(self, app, name):
-        super(BrokerFrame, self).__init__(app, name)
-
-        self.param = BrokerParameter(app, "id")
-        self.add_parameter(self.param)
-        self.set_object_parameter(self.param)
-
-        self.view = BrokerView(app, "view")
-        self.add_mode(self.view)
-
-        self.vhost = VirtualHostFrame(app, "vhost")
-        self.add_mode(self.vhost)
-
-        self.prop = BrokerConfigPropertyForm(app, "prop")
-        self.add_mode(self.prop)
-
-    def show_view(self, session):
-        return self.show_mode(session, self.view)
-
-    def show_virtual_host(self, session, vhost):
-        self.vhost.set_object(session, vhost)
-        return self.show_mode(session, self.vhost)
-
-    def show_config_property(self, session, prop):
-        self.prop.set_config_property(session, prop)
-        frame = self.show_mode(session, self.prop)
-        return self.page().set_current_frame(session, frame)
-
-    def render_title(self, session, broker):
-        return "Broker '%s'" % broker.name
-
-class BrokerConfigPropertyForm(CuminForm, Frame):
-    def __init__(self, app, name):
-        super(BrokerConfigPropertyForm, self).__init__(app, name)
-
-        self.param = ConfigPropertyParameter(app, "param")
-        self.add_parameter(self.param)
-
-        self.source = Parameter(app, "source")
-        self.source.set_default("local")
-        self.add_parameter(self.source)
-
-        self.profile = RadioInput(app, "profile", self)
-        self.profile.set_parameter(self.source)
-        self.profile.set_value("profile")
-        self.add_child(self.profile)
-
-        self.pvalue = TextInput(app, "profile_value", self)
-        self.pvalue.set_disabled(True)
-        self.add_child(self.pvalue)
-
-        self.broker = RadioInput(app, "broker", self)
-        self.broker.set_parameter(self.source)
-        self.broker.set_value("broker")
-        self.add_child(self.broker)
-
-        self.svalue = TextInput(app, "broker_value", self)
-        self.svalue.set_disabled(True)
-        self.add_child(self.svalue)
-
-        self.local = RadioInput(app, "local", self)
-        self.local.set_parameter(self.source)
-        self.local.set_value("local")
-        self.add_child(self.local)
-
-        self.lvalue = TextInput(app, "local_value", self)
-        self.add_child(self.lvalue)
-
-    def get_object(self, session, object):
-        return self.param.get(session)
-
-    def set_config_property(self, session, prop):
-        return self.param.set(session, prop)
-
-    def process_cancel(self, session, prop):
-        branch = session.branch()
-        self.page().show_broker(branch, prop.get_broker()).show_view(branch)
-        session.set_redirect(branch.marshal())
-
-    def process_submit(self, session, prop):
-        source = self.source.get(session)
-        
-        if source == "profile":
-            prop.value = get_profile_value(prop)
-        elif source == "broker":
-            prop.value = prop.broker_value
-        elif source == "local":
-            prop.value = self.lvalue.get(session)
-        else:
-            raise Exception()
-
-        self.process_cancel(session, prop)
-
-    def process_display(self, session, prop):
-        self.pvalue.set(session, get_profile_value(prop))
-        self.svalue.set(session, prop.broker_value)
-        self.lvalue.set(session, prop.value)
-
-    def render_title(self, session, prop):
-        return "Edit Property '%s'" % prop.name
-
-def get_profile_value(prop):
-    profile = prop.get_broker().get_broker_profile()
-    value = None
-
-    if profile:
-        for p in profile.config_property_items():
-            if p.name == prop.name:
-                value = p.value
-
-    return value
-
-class BrokerView(Widget):
-    def __init__(self, app, name):
-        super(BrokerView, self).__init__(app, name)
-
-        self.tabs = TabSet(app, "tabs")
-        self.add_child(self.tabs)
-
-        self.tabs.add_tab(self.BrokerVirtualHostTab(app, "vhosts"))
-        self.config = self.BrokerConfigTab(app, "config")
-        self.tabs.add_tab(self.config)
-        self.tabs.add_tab(self.BrokerStatsTab(app, "stats"))
-        self.tabs.add_tab(self.BrokerLogTab(app, "log"))
-
-    def show_config(self, session):
-        return self.tabs.show_mode(session, self.config)
-
-    def render_title(self, session, broker):
-        return "Broker '%s'" % broker.name
-
-    def render_name(self, session, broker):
-        return broker.name
-
-    def render_cluster_link(self, session, broker):
-        cluster = broker.get_cluster()
-        
-        if cluster:
-            branch = session.branch()
-            self.page().show_cluster(branch, cluster).show_view(branch)
-            html = mlink(branch.marshal(), "Cluster", cluster.name)
-        else:
-            html = none()
-        
-        return html
-
-    def render_profile_link(self, session, broker):
-        profile = broker.get_broker_profile()
-
-        if profile:
-            branch = session.branch()
-            self.page().show_broker_profile(branch, profile).show_view(branch)
-            html = mlink(branch.marshal(), "BrokerProfile", profile.name)
-        else:
-            html = none()
-
-        return html
-
-    def render_version(self, session, broker):
-        return "1.0"
-
-    class BrokerVirtualHostTab(VirtualHostSet):
-        def render_title(self, session, broker):
-            return "Functional Hosts (%i)" % len(broker.virtual_host_items())
-
-        def get_items(self, session, broker):
-            return sorted_by(broker.virtual_host_items())
-
-    class BrokerConfigTab(ConfigPropertySet):
-        def render_title(self, session, broker):
-            return "Configuration"
-
-        def get_items(self, session, broker):
-            return sorted_by(broker.config_property_items())
-
-        def maybe_highlight(self, value, comparedto):
-            if str(value) != str(comparedto):
-                value = "<span class=\"BrokerConfigTab diff\">%s</span>" \
-                        % value
-
-            return value
-
-        def render_item_broker_value(self, session, prop):
-            return self.maybe_highlight(prop.broker_value, prop.value)
-
-        def render_item_profile_value(self, session, prop):
-            value = get_profile_value(prop)
-            return self.maybe_highlight(value, prop.value)
-
-        def render_item_edit_href(self, session, prop):
-            branch = session.branch()
-            frame = self.page().show_broker(branch, prop.get_broker())
-            frame.show_config_property(branch, prop)
-            return branch.marshal()
-
-    class BrokerStatsTab(Widget):
-        def render_title(self, session, broker):
-            return "Statistics"
-
-    class BrokerLogTab(Widget):
-        def render_title(self, session, broker):
-            return "Log Messages"
-
-class BrokerBrowser(Widget):
-    def __init__(self, app, name):
-        super(BrokerBrowser, self).__init__(app, name)
-
-        self.group_tmpl = Template(self, "group_html")
-        self.profile_tmpl = Template(self, "profile_html")
-        self.cluster_tmpl = Template(self, "cluster_html")
-        
-        self.group = BrokerGroupParameter(app, "group")
-        self.add_parameter(self.group)
-
-        self.profile = BrokerProfileParameter(app, "profile")
-        self.add_parameter(self.profile)
-
-        self.cluster = ClusterParameter(app, "cluster")
-        self.add_parameter(self.cluster)
-
-        self.brokers = self.BrowserBrokers(app, "brokers")
-        self.add_child(self.brokers)
-
-    class BrowserBrokers(BrokerSetForm):
-        def get_items(self, session, model):
-            brokers = sorted_by(model.get_brokers())
-            group = self.parent.group.get(session)
-            profile = self.parent.profile.get(session)
-            cluster = self.parent.cluster.get(session)
-
-            for broker in model.get_brokers():
-                if group and group not in broker.broker_group_items():
-                    brokers.remove(broker)
-
-                if profile and profile is not broker.get_broker_profile():
-                    try:
-                        brokers.remove(broker)
-                    except ValueError:
-                        pass
-                    
-                if cluster and cluster is not broker.get_cluster():
-                    try:
-                        brokers.remove(broker)
-                    except ValueError:
-                        pass
-
-            return brokers
-
-        def render_none(self, session, model):
-            return none()
-
-    def render_clear_filters_href(self, session, model):
-        branch = session.branch()
-        self.group.set(branch, None)
-        self.profile.set(branch, None)
-        self.cluster.set(branch, None)
-        return branch.marshal()
-
-    def render_group_filters(self, session, model):
-        groups = sorted_by(model.get_broker_groups())
-        return self._render_filters(session, groups, self.group_tmpl)
-
-    def render_group_link(self, session, group):
-        return self._render_filter_link(session, group, self.group)
-
-    def render_profile_filters(self, session, model):
-        profiles = sorted_by(model.get_broker_profiles())
-        return self._render_filters(session, profiles, self.profile_tmpl)
-
-    def render_profile_link(self, session, profile):
-        return self._render_filter_link(session, profile, self.profile)
-
-    def render_cluster_filters(self, session, model):
-        clusters = sorted_by(model.get_clusters())
-        return self._render_filters(session, clusters, self.cluster_tmpl)
-
-    def render_cluster_link(self, session, cluster):
-        return self._render_filter_link(session, cluster, self.cluster)
-
-    def _render_filters(self, session, collection, template):
-        writer = Writer()
-
-        for object in collection:
-            template.render(session, object, writer)
-
-        template.render(session, None, writer)
-
-        return writer.to_string()
-
-    def _render_filter_link(self, session, object, param):
-        branch = session.branch()
-        param.set(branch, object)
-        href = branch.marshal()
-
-        name = object and object.name or "Any"
-        
-        class_ = param.get(session) is object and "selected"
-
-        return link(href, name, class_)

Deleted: mgmt/cumin/python/cumin/server.strings
===================================================================
--- mgmt/cumin/python/cumin/server.strings	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/server.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,195 +0,0 @@
-[BrokerSet.html]
-<table class="mobjects">
-  <tr>
-    <th>Broker</th>
-    <th>Profile</th>
-    <th>Cluster</th>
-    <th>Status</th>
-  </tr>
-
-  {items}
-</table>
-
-[BrokerSet.item_html]
-<tr>
-  <td>{item_link}</td>
-  <td>{item_profile_link}</td>
-  <td>{item_cluster_link}</td>
-  <td>0 errors, 0 warnings</td>
-</tr>
-
-[BrokerSetForm.html]
-<form id="{id}" method="post" action="?">
-  <!-- <select onchange="document.getElementById('{id}.submit').submit()"> -->
-  <select>
-    <option>Act on Selection...</option>
-    <optgroup label="Actions">
-      <option>Shutdown</option>
-      <option>Load Balance</option>
-    </optgroup>
-    <optgroup label="Add to Group">
-      <option>East Coast</option>
-      <option>West Coast</option>
-      <option>Marketing</option>
-      <option>Sales</option>
-    </optgroup>
-  </select>
-  {submit}
-  <br/><br/>
-
-  <table class="mobjects">
-    <tr>
-      <th><input type="checkbox"/></th>
-      <th>Broker</th>
-      <th>Profile</th>
-      <th>Cluster</th>
-      <th>Status</th>
-      <th>Load</th>
-    </tr>
-
-    {items}
-  </table>
-  {hidden_inputs}
-</form>
-
-[BrokerSetForm.item_html]
-<tr>
-  <td><input type="checkbox" name="{item_checkbox_name}" value="{item_checkbox_value}" {item_checkbox_checked_attr}/></td>
-  <td>{item_link}</td>
-  <td>{item_profile_link}</td>
-  <td>{item_cluster_link}</td>
-  <td>{item_status}</td>
-  <td>{item_load}</td>
-</tr>
-
-[BrokerConfigTab.css]
-.BrokerConfigTab.diff {
-  background-color: #ff9;
-}
-
-[BrokerConfigTab.html]
-<ul class="actions">
-  <li><a href="">Apply Configuration to Broker</a></li>
-  <li><a href="">Add Property</a></li>
-</ul>
-
-<table class="mobjects">
-  <tr>
-    <th>Property</th>
-    <th>Configured Value</th>
-    <th>Broker Value</th>
-    <th>Profile Value</th>
-    <th></th>
-  </tr>
-
-  {items}
-</table>
-
-[BrokerConfigTab.item_html]
-<tr>
-  <td>{item_name}</td>
-  <td>{item_value}</td>
-  <td>{item_broker_value}</td>
-  <td>{item_profile_value}</td>
-  <td><a class="action" href="{item_edit_href}">Edit</a></td>
-</tr>
-
-[BrokerConfigPropertyForm.css]
-.BrokerConfigPropertyForm div.value {
-  margin: 1em 2em;
-}
-
-[BrokerConfigPropertyForm.html]
-<form id="{id}" class="BrokerConfigPropertyForm mform" method="post" action="?">
-  <div class="head">
-    <h1>{title}</h1>
-  </div>
-  <div class="body">
-    <span class="legend">Value</span>
-    <fieldset>
-      <div class="field">
-        {profile} Use the value from the broker profile
-        <div class="value">{profile_value}</div>
-      </div>
-      <div class="field">
-        {broker} Use the value currently set on the broker
-        <div class="value">{broker_value}</div>
-      </div>
-      <div class="field">
-        {local} Set a new value
-        <div class="value">{local_value}</div>
-      </div>
-    </fieldset>
-
-    {hidden_inputs}
-  </div>
-  <div class="foot">
-    <div style="display: block; float: left;"><button>Help</button></div>
-    {cancel}
-    {submit}
-  </div>
-</form>
-<script defer="defer">
-(function() {
-    var elem = wooly.doc().elem("{id}").node.elements[1];
-    elem.focus();
-    elem.select();
-}())
-</script>
-
-[BrokerView.html]
-<div class="oblock">
-  <div class="mstatus green" id="{id}">
-    <h2>Broker Status</h2>
-
-    <div>0 errors, 0 warnings</div>
-  </div>
-
-  <h1>{title}</h1>
-
-  <dl class="properties">
-    <dt>Name</dt><dd>{name}</dd>
-    <dt>Cluster</dt><dd>{cluster_link}</dd>
-    <dt>Broker Profile</dt><dd>{profile_link}</dd>
-    <dt>Software Version</dt><dd>{version}</dd>
-  </dl>
-
-  <ul class="actions">
-    <li><a href="">Shutdown This Broker</a></li>
-  </ul>
-
-  {tabs}
-</div>
-
-[BrokerBrowser.html]
-<table class="browser">
-  <tr>
-    <td class="nav">
-      <ul class="actions">
-        <li><a href="{clear_filters_href}">Clear Filters</a></li>
-      </ul>
-
-      <h2>Filter by Group</h2>
-      <ul class="slist">{group_filters}</ul>
-      <h2>Filter by Profile</h2>
-      <ul class="slist">{profile_filters}</ul>
-      <h2>Filter by Cluster</h2>
-      <ul class="slist">{cluster_filters}</ul>
-    </td>
-    <td class="view">
-      <ul class="actions">
-        <li><a href="">Register New Brokers</a></li>
-      </ul>
-      {brokers}
-    </td>
-  </tr>
-</div>
-
-[BrokerBrowser.group_html]
-<li>{group_link}</li>
-
-[BrokerBrowser.profile_html]
-<li>{profile_link}</li>
-
-[BrokerBrowser.cluster_html]
-<li>{cluster_link}</li>

Deleted: mgmt/cumin/python/cumin/servergroup.py
===================================================================
--- mgmt/cumin/python/cumin/servergroup.py	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/servergroup.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,132 +0,0 @@
-from wooly import *
-from wooly.widgets import *
-
-from broker import BrokerSet
-from model import *
-from widgets import *
-from parameters import *
-from util import *
-
-strings = StringCatalog(__file__)
-
-class BrokerGroupSet(ItemSet):
-    def render_title(self, session, model):
-        return "Broker Groups (%i)" % len(model.get_broker_groups())
-
-    def render_group_add_href(self, session, model):
-        branch = session.branch()
-        self.page().show_broker_group_add(branch)
-        return branch.marshal()
-
-    def get_items(self, session, model):
-        return sorted_by(model.get_broker_groups())
-    
-    def render_item_link(self, session, group):
-        href = self.page().broker_group_href(session, group)
-        return mlink(href, "BrokerGroup", group.name)
-
-    def render_item_config(self, session, group):
-        count = len(group.broker_items())
-        return "%i broker%s" % (count, count == 1 and "" or "s")
-
-    def render_item_status(self, session, group):
-        return "0 errors, 0 warnings"
-
-    def render_none(self, session, group):
-        return none()
-
-class BrokerGroupFrame(CuminFrame):
-    def __init__(self, app, name):
-        super(BrokerGroupFrame, self).__init__(app, name)
-
-        self.param = BrokerGroupParameter(app, "id")
-        self.add_parameter(self.param)
-        self.set_object_parameter(self.param)
-
-        self.view = BrokerGroupView(app, "view")
-        self.add_child(self.view)
-        self.set_view_mode(self.view)
-
-        self.edit = BrokerGroupEdit(app, "edit")
-        self.add_child(self.edit)
-        self.set_edit_mode(self.edit)
-
-    def render_title(self, session, group):
-        return "Broker Group '%s'" % group.name
-
-class BrokerGroupView(Widget):
-    def __init__(self, app, name):
-        super(BrokerGroupView, self).__init__(app, name)
-
-        self.tabs = TabSet(app, "tabs")
-        self.add_child(self.tabs)
-
-        self.tabs.add_tab(self.GroupBrokerTab(app, "brokers"))
-
-    def render_title(self, session, group):
-        return "Broker Group '%s'" % group.name
-
-    def render_name(self, session, group):
-        return group.name
-
-    def render_category(self, session, group):
-        return group.get_type().name
-
-    def render_edit_href(self, session, group):
-        branch = session.branch()
-        self.page().show_broker_group(branch, group).show_edit(branch)
-        return branch.marshal()
-
-    class GroupBrokerTab(BrokerSet):
-        def get_items(self, session, group):
-            return sorted_by(group.broker_items())
-        
-        def render_title(self, session, group):
-            return "Brokers (%i)" % len(group.broker_items())
-
-class BrokerGroupForm(CuminForm):
-    def __init__(self, app, name):
-        super(BrokerGroupForm, self).__init__(app, name)
-
-        self.group_name = TextInput(app, "name", self)
-        self.add_child(self.group_name)
-
-    def process_group(self, session, group):
-        group.lock()
-        try:
-            group.name = self.group_name.get(session)
-            group.set_type(self.app.model.get_broker_group_types()[0])
-        finally:
-            group.unlock()
-
-        branch = session.branch()
-        self.page().show_broker_group(branch, group).show_view(branch)
-        session.set_redirect(branch.marshal())
-
-class BrokerGroupAdd(BrokerGroupForm, Frame):
-    def process_cancel(self, session, model):
-        branch = session.branch()
-        self.page().show_view(branch)
-        session.set_redirect(branch.marshal())
-    
-    def process_submit(self, session, model):
-        group = BrokerGroup(model)
-        self.process_group(session, group)
-    
-    def render_title(self, session, model):
-        return "Add Group"
-
-class BrokerGroupEdit(BrokerGroupForm, Frame):
-    def process_cancel(self, session, group):
-        branch = session.branch()
-        self.parent.show_view(branch)
-        session.set_redirect(branch.marshal())
-
-    def process_submit(self, session, group):
-        self.process_group(session, group)
-
-    def process_display(self, session, group):
-        self.group_name.set(session, group.name)
-
-    def render_title(self, session, group):
-        return "Edit Group '%s'" % group.name

Deleted: mgmt/cumin/python/cumin/servergroup.strings
===================================================================
--- mgmt/cumin/python/cumin/servergroup.strings	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/servergroup.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,74 +0,0 @@
-[BrokerGroupSet.html]
-<ul class="actions">
-  <li><a href="{group_add_href}">Add Broker Group</a></li>
-</ul>
-
-<button>Shutdown</button>
-<button>Remove</button>
-
-<br/><br/>
-
-<table class="mobjects">
-  <tr>
-    <th><input type="checkbox"/></th>
-    <th>Broker Group</th>
-    <th>Configuration</th>
-    <th>Status</th>
-  </tr>
-
-  {items}
-</table>
-
-[BrokerGroupSet.item_html]
-<tr>
-  <td><input type="checkbox"/></td>
-  <td>{item_link}</td>
-  <td>{item_config}</td>
-  <td>{item_status}</td>
-</tr>
-
-[BrokerGroupView.html]
-<div class="mstatus green" id="{id}">
-  <h2>Broker Group Status</h2>
-
-  <div>0 errors, 0 warnings</div>
-</div>
-
-<h1>{title}</h1>
-
-<dl class="properties">
-  <dt>Name</dt><dd>{name}</dd>
-  <dt>Category</dt><dd>{category}</dd>
-</dl>
-
-<ul class="actions">
-  <li><a href="{edit_href}">Edit This Broker Group</a></li>
-  <li><a href="">Remove This Broker Group</a></li>
-</ul>
-
-{tabs}
-
-[BrokerGroupForm.html]
-<form id="{id}" class="BrokerGroupForm mform" method="post" action="?">
-  <div class="head">
-    <h1>{title}</h1>
-  </div>
-  <div class="body">
-    <span class="legend">Name</span>
-    <fieldset>{name}</fieldset>
-
-    {hidden_inputs}
-  </div>
-  <div class="foot">
-    <div style="display: block; float: left;"><button>Help</button></div>
-    {cancel}
-    {submit}
-  </div>
-</form>
-<script defer="defer">
-(function() {
-    var elem = wooly.doc().elem("{id}").node.elements[1];
-    elem.focus();
-    elem.select();
-}())
-</script>

Deleted: mgmt/cumin/python/cumin/serverprofile.py
===================================================================
--- mgmt/cumin/python/cumin/serverprofile.py	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/serverprofile.py	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,87 +0,0 @@
-from wooly import *
-from wooly.widgets import *
-
-from configproperty import *
-from broker import *
-from widgets import *
-from parameters import *
-from util import *
-
-strings = StringCatalog(__file__)
-
-class BrokerProfileSet(ItemSet):
-    def get_items(self, session, model):
-        return sorted_by(model.get_broker_profiles())
-
-    def render_item_link(self, session, profile):
-        branch = session.branch()
-        frame = self.page().show_broker_profile(branch, profile)
-        frame.show_view(branch)
-        return mlink(branch.marshal(), "BrokerProfile", profile.name)
-
-class BrokerProfileFrame(CuminFrame):
-    def __init__(self, app, name):
-        super(BrokerProfileFrame, self).__init__(app, name)
-
-        self.param = BrokerProfileParameter(app, "id")
-        self.add_parameter(self.param)
-        self.set_object_parameter(self.param)
-
-        self.view = BrokerProfileView(app, "view")
-        self.add_mode(self.view)
-
-    def show_view(self, session):
-        return self.show_mode(session, self.view)
-
-    def render_title(self, session, profile):
-        return "Broker Profile '%s'" % profile.name
-
-class BrokerProfileView(Widget):
-    def __init__(self, app, name):
-        super(BrokerProfileView, self).__init__(app, name)
-
-        self.tabs = TabSet(app, "tabs")
-        self.add_child(self.tabs)
-        
-        self.tabs.add_tab(self.ProfileConfigTab(app, "config"))
-        self.tabs.add_tab(self.ProfileBrokerTab(app, "brokers"))
-
-    def render_title(self, session, profile):
-        return "Broker Profile '%s'" % profile.name
-
-    def render_name(self, session, profile):
-        return profile.name
-
-    class ProfileConfigTab(ConfigPropertySet):
-        def get_items(self, session, profile):
-            return sorted_by(profile.config_property_items())
-        
-        def render_title(self, session, profile):
-            return "Configuration"
-
-    class ProfileBrokerTab(BrokerSet):
-        def __init__(self, app, name):
-            super(BrokerProfileView.ProfileBrokerTab, self).__init__(app, name)
-
-        def render_title(self, session, profile):
-            return "Brokers (%i)" % len(profile.broker_items())
-
-        def get_items(self, session, profile):
-            return sorted_by(profile.broker_items())
-
-        def render_item_config_href(self, session, broker):
-            branch = session.branch()
-            frame = self.page().show_broker(branch, broker)
-            frame.show_view(branch).show_config(branch)
-            return branch.marshal()
-
-        def render_item_config_status(self, session, broker):
-            diffs = 0
-
-            for prop in broker.get_broker_profile().config_property_items():
-                for iprop in broker.config_property_items():
-                    if iprop.name == prop.name:
-                        if iprop.value != prop.value:
-                            diffs += 1
-                            
-            return "%i difference(s)" % diffs

Deleted: mgmt/cumin/python/cumin/serverprofile.strings
===================================================================
--- mgmt/cumin/python/cumin/serverprofile.strings	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/cumin/python/cumin/serverprofile.strings	2007-10-24 15:38:06 UTC (rev 1156)
@@ -1,71 +0,0 @@
-[BrokerProfileSet.html]
-<table class="BrokerProfileSet mobjects">
-  <tr>
-    <th>Broker Profile</th>
-  </tr>
-
-  {items}
-</table>
-
-[BrokerProfileSet.item_html]
-<tr>
-  <td>{item_link}</td>
-</tr>
-
-[BrokerProfileView.html]
-<div class="oblock">
-  <h1>{title}</h1>
-
-  <dl class="properties">
-    <dt>Name</dt><dd>{name}</dd>
-  </dl>
-
-  <ul class="actions">
-    <li><a href="">Edit This Profile</a></li>
-  </ul>
-
-  {tabs}
-</div>
-
-[ProfileConfigTab.html]
-<ul class="actions">
-  <li><a href="">Add Property</a></li>
-</ul>
-
-<table class="mobjects">
-  <tr>
-    <th>Property</th>
-    <th>Configured Value</th>
-    <th></th>
-  </tr>
-
-  {items}
-</table>
-
-[ProfileConfigTab.item_html]
-<tr>
-  <td>{item_name}</td>
-  <td>{item_value}</td>
-  <td><a class="action" href="">Edit</a></td>
-</tr>
-
-[ProfileBrokerTab.html]
-<ul class="actions">
-  <li><a href="">Apply Profile Configuration to Brokers</a></li>
-</ul>
-
-<table class="mobjects">
-  <tr>
-    <th>Broker</th>
-    <th>Configuration Status</th>
-    <th></th>
-  </tr>
-
-  {items}
-</table>
-
-[ProfileBrokerTab.item_html]
-<tr>
-  <td>{item_link}</td>
-  <td><a href="{item_config_href}">{item_config_status}</a></td>
-</tr>

Modified: mgmt/notes/Todo
===================================================================
--- mgmt/notes/Todo	2007-10-24 15:31:43 UTC (rev 1155)
+++ mgmt/notes/Todo	2007-10-24 15:38:06 UTC (rev 1156)
@@ -107,3 +107,6 @@
  * exch: link bindings, producers stats to respective views
 
  * model: get rid of the old *_count stat fields and use the new ones
+
+ * Rename cluster to broker cluster, to avoid any future conflicts
+   with system clusters




More information about the rhmessaging-commits mailing list