r4624 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-16 16:23:05 +0000 (Wed, 16 Mar 2011)
New Revision: 4624
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Separated recent and current negotiator job throughput charts
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-03-16 15:26:52 UTC (rev 4623)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-03-16 16:23:05 UTC (rev 4624)
@@ -1,7 +1,7 @@
import logging
from wooly import Widget, Attribute
-from wooly.util import StringCatalog
+from wooly.util import StringCatalog, Writer
from wooly.datatable import DataAdapterOptions, DataAdapterField
from wooly.table import TableHeader
from wooly.widgets import RadioModeSet, WidgetSet
@@ -14,6 +14,7 @@
from cumin.util import rgb_to_string
from negotiator import NegotiatorAttribute
from cumin.grid.slotvis import PoolSlotMap, PoolSlotFlashVis
+from wooly.template import WidgetTemplate
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.dashboard")
@@ -123,32 +124,16 @@
# if this gets defined, this widget will have a link to display
# the chart in a popup
- self.chart = None
+ self.chart_link = None
+ self.pie_tmpl = WidgetTemplate(self, "pie_html")
+
# don't show this if our object isn't there
def do_render(self, session):
object = self.object.get(session)
if object:
return super(PieStatSet, self).do_render(session)
- def get_pie_slices(self, session):
- # don't include total lines, convert None to 0
- items = self.do_get_items(session)
- return [self.render_item_value(session, x) or 0 for x in items if not self.is_total(x)]
-
- def render_width(self, session):
- return self.radius * 2
-
- def render_height(self, session):
- return self.render_width(session)
-
- def render_pie_src(self, session):
- if self.has_pie_chart:
- slices = self.get_pie_slices(session)
- return PieChartPage.get_href(slices, self.color_scheme, self.radius)
- else:
- return ""
-
# we generate the style sheet for the legend based on
# the colors defined in the PieChartPage
def render_legend_styles(self, session):
@@ -182,12 +167,34 @@
# don't show a chart icon on hover if there is no chart
def render_span_class(self, session):
- return self.chart and "chart" or "blank"
+ return self.chart_link and "chart" or "blank"
def render_chart_href(self, session):
- if self.chart:
- return self.page.get_popup_url(session, self.chart)
+ if self.chart_link:
+ return self.page.get_popup_url(session, self.chart_link)
+ def render_chart(self, session):
+ if self.has_pie_chart:
+ writer = Writer()
+ self.pie_tmpl.render(writer, session)
+
+ return writer.to_string()
+
+ def render_pie_src(self, session):
+ slices = self.get_pie_slices(session)
+ return PieChartPage.get_href(slices, self.color_scheme, self.radius)
+
+ def render_width(self, session):
+ return self.radius * 2
+
+ def render_height(self, session):
+ return self.render_width(session)
+
+ def get_pie_slices(self, session):
+ # don't include total lines, convert None to 0
+ items = self.do_get_items(session)
+ return [self.render_item_value(session, x) or 0 for x in items if not self.is_total(x)]
+
class AliasSqlColumn(object):
def __init__(self, identifier, alias):
self.identifier = identifier
@@ -454,12 +461,12 @@
self.has_total = True
self.color_scheme = PieChartPage.BLUES
- self.chart = StatFlashChart(app, "popup", collector)
- self.chart.stats = self.attrs
- self.add_child(self.chart)
+ self.chart_link = StatFlashChart(app, "popup", collector)
+ self.chart_link.stats = self.attrs
+ self.add_child(self.chart_link)
def render_title(self, session):
- return "Host summaryiInfo"
+ return "Host summary info"
def is_total(self, item):
index = self.attrs.index(item[0].name)
@@ -592,12 +599,12 @@
class NegotiatorDefinitionStatSet(PieStatSet):
def __init__(self, app, name, collector):
- negotiator = NegotiatorAttribute(app, "neg", collector)
- super(NegotiatorDefinitionStatSet, self).__init__(app, name, negotiator)
- self.add_attribute(negotiator)
+ self.negotiator = NegotiatorAttribute(app, "neg", collector)
+ super(NegotiatorDefinitionStatSet, self).__init__(app, name, self.negotiator)
+ self.add_attribute(self.negotiator)
- self.chart = StatFlashChart(app, "popup", negotiator)
- self.add_child(self.chart)
+ self.chart_link = StatFlashChart(app, "popup", self.negotiator)
+ self.add_child(self.chart_link)
def is_total(self, item):
if not self.has_total:
@@ -615,19 +622,39 @@
return 0
return super(NegotiatorDefinitionStatSet, self).render_item_value(session, item)
-class NegotiatorJobThroughput(NegotiatorDefinitionStatSet):
+
+class NegotiatorJobThroughput(Widget):
def __init__(self, app, name, collector):
- super(NegotiatorJobThroughput, self).__init__(app, name, collector)
+ super(NegotiatorJobThroughput, self).__init__(app, name)
- self.attrs = ["NumJobsConsidered", "Matches", "MatchRate", "CandidateSlots"]
- self.chart.stats = self.attrs
+ self.attrs = ["NumJobsConsidered", "Matches", "CandidateSlots", "MatchRate"]
+ throughput_stats = JobThroughput(app, "stats", self.attrs, collector)
+ self.add_child(throughput_stats)
+
+ chart = self.ThroughputChart(app, "timeseries", throughput_stats.negotiator)
+ chart.duration.param.default = "3600"
+ chart.stats = self.attrs
+ self.add_child(chart)
+
+ class ThroughputChart(StatFlashChart):
+ def render_title(self, session):
+ return "Recent negotiator job throughput"
+
+class JobThroughput(NegotiatorDefinitionStatSet):
+ def __init__(self, app, name, attrs, collector):
+ super(JobThroughput, self).__init__(app, name, collector)
+
+ self.attrs = attrs
+
+ self.remove_child(self.chart_link)
+ self.chart_link = None
+
self.has_total = False
self.has_pie_chart = False
- self.color_scheme = PieChartPage.BLANK
def render_title(self, session):
- return "Negotiator job throughput"
+ return "Current negotiator job throughput"
def get_legend_class(self, session, item):
return "blank"
@@ -637,7 +664,7 @@
super(NegotiatorCycles, self).__init__(app, name, collector)
self.attrs = ["Phase1Duration", "Phase2Duration", "Phase3Duration", "Phase4Duration", "Duration"]
- self.chart.stats = self.attrs
+ self.chart_link.stats = self.attrs
self.has_total = True
self.color_scheme = PieChartPage.RAINBOW
@@ -650,7 +677,7 @@
super(NegotiatorSlots, self).__init__(app, name, collector)
self.attrs = ["TrimmedSlots", "CandidateSlots", "TotalSlots"]
- self.chart.stats = self.attrs
+ self.chart_link.stats = self.attrs
self.has_total = True
@@ -711,8 +738,8 @@
self.object = RosemaryPoolObjectAttribute(app, "obj", pool, cls)
self.add_attribute(self.object)
- self.chart = MonitorSelfCharts(app, "history", pool, cls, self.object)
- self.add_child(self.chart)
+ self.chart_link = MonitorSelfCharts(app, "history", pool, cls, self.object)
+ self.add_child(self.chart_link)
table = MonitorSelfTable(app, "current", pool, cls, frame, True)
self.add_child(table)
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-16 15:26:52 UTC (rev 4623)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-16 16:23:05 UTC (rev 4624)
@@ -155,14 +155,40 @@
<dl>
{items}
</dl>
- <img src="{pie_src}" alt="pie_chart" title="{title}" width="{width}" height="{height}"/>
+ {chart}
</div>
+[DefinitionSet.pie_html]
+ <img src="{pie_src}" alt="pie_chart" title="{title}" width="{width}" height="{height}"/>
+
+[DefinitionSet.timeseries_html]
+ {timeseries}
+
[DefinitionSet.item_html]
<dt title="{html_title}" class="{legend_class}"><span class="legend_block"></span>{item_title}</dt>
<dd{dd_class}><span>{item_value}</span></dd>
+[NegotiatorJobThroughput.css]
+div.NegotiatorJobThroughput {
+ clear: both;
+}
+div.NegotiatorJobThroughput div.timeseries,
+div.NegotiatorJobThroughput div.stats {
+ float: left;
+}
+
+div.NegotiatorJobThroughput div.stats {
+ margin-left: 14em;
+}
+
+[NegotiatorJobThroughput.html]
+<div class="{class}">
+ <div class="timeseries">{timeseries}</div>
+ <div class="stats">{stats}</div>
+</div>
+<div style="clear:both;"></div>
+
[MinimalTableHeader.html]
<thead>
<tr>{headers}</tr>
13 years, 2 months
r4623 - trunk/cumin/etc
by tmckay@fedoraproject.org
Author: tmckay
Date: 2011-03-16 15:26:52 +0000 (Wed, 16 Mar 2011)
New Revision: 4623
Modified:
trunk/cumin/etc/cumin.conf
Log:
Start to include explanatory comments in cumin.conf for
configuration parameters
Modified: trunk/cumin/etc/cumin.conf
===================================================================
--- trunk/cumin/etc/cumin.conf 2011-03-16 15:06:13 UTC (rev 4622)
+++ trunk/cumin/etc/cumin.conf 2011-03-16 15:26:52 UTC (rev 4623)
@@ -1,4 +1,6 @@
-# Fields in comments reflect the default values
+# Fields in comments reflect the default values.
+# Explanatory comments for some options are included
+# at the end of the file.
[common]
# database: dbname=cumin user=cumin host=localhost
@@ -22,3 +24,26 @@
# expire-threshold: 86400
# vacuum-interval: 3600
# packages: [all]
+
+# *************** Parameter Explanations by Section ***************
+
+# [common]
+
+# Maximum size in MB of *.log files created by cumin.
+# A log file reaching maximum size will be rolled over.
+# A value of 0 leaves the log file size unlimited.
+# log-max-mb: 10
+
+# Number of rolled over log files to retain. A retained
+# log file will have a "." and a number added to its name.
+# A value of 0 will cause a log file to be truncated
+# rather than renamed if it reaches maximum size.
+# log-max-archives: 1
+
+# [web]
+
+# Controls content of the top level page.
+# Valid values are "default", "grid", and "messaging".
+# The default persona contains content for both grid and
+# messaging.
+# persona: default
13 years, 2 months
r4622 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-16 15:06:13 +0000 (Wed, 16 Mar 2011)
New Revision: 4622
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Add MatchRate to the dashboard stats and right align the numbers
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-03-16 15:00:49 UTC (rev 4621)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-03-16 15:06:13 UTC (rev 4622)
@@ -119,6 +119,7 @@
# determines if a line is drawn under the legend
self.has_total = False
+ self.has_pie_chart = True
# if this gets defined, this widget will have a link to display
# the chart in a popup
@@ -142,8 +143,11 @@
return self.render_width(session)
def render_pie_src(self, session):
- slices = self.get_pie_slices(session)
- return PieChartPage.get_href(slices, self.color_scheme, self.radius)
+ if self.has_pie_chart:
+ slices = self.get_pie_slices(session)
+ return PieChartPage.get_href(slices, self.color_scheme, self.radius)
+ else:
+ return ""
# we generate the style sheet for the legend based on
# the colors defined in the PieChartPage
@@ -615,10 +619,11 @@
def __init__(self, app, name, collector):
super(NegotiatorJobThroughput, self).__init__(app, name, collector)
- self.attrs = ["NumJobsConsidered", "Matches", "CandidateSlots"]
+ self.attrs = ["NumJobsConsidered", "Matches", "MatchRate", "CandidateSlots"]
self.chart.stats = self.attrs
self.has_total = False
+ self.has_pie_chart = False
self.color_scheme = PieChartPage.BLANK
def render_title(self, session):
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-16 15:00:49 UTC (rev 4621)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-16 15:06:13 UTC (rev 4622)
@@ -99,7 +99,7 @@
padding-bottom: 1em;
}
-.DefinitionSet span {
+.DefinitionSet span.legend_block {
display: block;
float: left;
width: 1em;
@@ -109,18 +109,23 @@
top: 0.1em;
}
-.DefinitionSet dt.blank span {
+.DefinitionSet dt.blank span.legend_block {
width: 0;
}
.DefinitionSet dd {
float: left;
- width: 3em;
margin: 0;
padding: 5px;
border-top: 1px solid #999;
}
+.DefinitionSet dd span {
+ text-align: right;
+ width: 5em;
+ display: block;
+}
+
.DefinitionSet h3 span {
display: block;
float: right;
@@ -154,8 +159,8 @@
</div>
[DefinitionSet.item_html]
- <dt title="{html_title}" class="{legend_class}"><span></span>{item_title}</dt>
- <dd{dd_class}>{item_value}</dd>
+ <dt title="{html_title}" class="{legend_class}"><span class="legend_block"></span>{item_title}</dt>
+ <dd{dd_class}><span>{item_value}</span></dd>
[MinimalTableHeader.html]
13 years, 2 months
r4621 - in trunk: cumin/bin cumin/etc cumin/python/cumin cumin/python/cumin/account cumin/python/cumin/usergrid cumin/resources wooly/python/wooly
by tmckay@fedoraproject.org
Author: tmckay
Date: 2011-03-16 15:00:49 +0000 (Wed, 16 Mar 2011)
New Revision: 4621
Modified:
trunk/cumin/bin/cumin-web
trunk/cumin/etc/cumin.conf
trunk/cumin/python/cumin/account/main.py
trunk/cumin/python/cumin/config.py
trunk/cumin/python/cumin/main.py
trunk/cumin/python/cumin/main.strings
trunk/cumin/python/cumin/usergrid/main.py
trunk/cumin/python/cumin/widgets.py
trunk/cumin/resources/app.css
trunk/wooly/python/wooly/__init__.py
Log:
Initial specialization of console for grid vs messaging (vs both)
Link set changes on top level page. That is the extent of any
differentiation at this point.
BZ678029
Modified: trunk/cumin/bin/cumin-web
===================================================================
--- trunk/cumin/bin/cumin-web 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/bin/cumin-web 2011-03-16 15:00:49 UTC (rev 4621)
@@ -61,7 +61,7 @@
broker_uris = [x.strip() for x in opts.brokers.split(",")]
cumin = Cumin(config.get_home(), broker_uris, opts.database,
- opts.host, opts.port)
+ opts.host, opts.port, values.persona)
cumin.debug = opts.debug
cumin.user = values.user
Modified: trunk/cumin/etc/cumin.conf
===================================================================
--- trunk/cumin/etc/cumin.conf 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/etc/cumin.conf 2011-03-16 15:00:49 UTC (rev 4621)
@@ -14,6 +14,7 @@
# operator-email: [none]
# update-interval: 10
# max-qmf-table-sort: 1000
+# persona: default
[data]
# log-file: $CUMIN_HOME/log/data.log
Modified: trunk/cumin/python/cumin/account/main.py
===================================================================
--- trunk/cumin/python/cumin/account/main.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/account/main.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -11,7 +11,7 @@
self.app.add_page(self.app.login_page)
self.app.account_page = AccountPage(self.app, "account.html")
- self.app.add_page(self.app.account_page)
+ self.app.add_page(self.app.account_page, add_to_link_set=True)
self.app.login_page.protected = False
self.app.login_page.css_page.protected = False
Modified: trunk/cumin/python/cumin/config.py
===================================================================
--- trunk/cumin/python/cumin/config.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/config.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -67,6 +67,9 @@
param = ConfigParameter(web, "request-disk-vm", int)
param.default = 5 * 1024 #MB
+ param = ConfigParameter(web, "persona", str)
+ param.default = "default"
+
class CuminDataConfig(CuminConfig):
def __init__(self, section_name, strict_section):
super(CuminDataConfig, self).__init__()
Modified: trunk/cumin/python/cumin/main.py
===================================================================
--- trunk/cumin/python/cumin/main.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/main.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -30,7 +30,7 @@
class Cumin(Application):
def __init__(self, home, broker_uris, database_dsn,
- host="localhost", port=45672):
+ host="localhost", port=45672, persona="default"):
super(Cumin, self).__init__()
self.home = home
@@ -43,6 +43,7 @@
self.server = CuminServer(self, host, port)
self.admin = CuminAdmin(self)
+
self.add_resource_dir(os.path.join(self.home, "resources-wooly"))
self.add_resource_dir(os.path.join(self.home, "resources"))
@@ -58,6 +59,16 @@
self.form_defaults = self.CuminFormDefaults()
+ # Persona methods are used to control what pages and/or
+ # modules are present
+
+ self.persona = persona
+ self.personas = dict()
+ self.personas["default"] = self._init_default_persona
+ self.personas["grid"] = self._init_grid_persona
+ self.personas["messaging"] = self._init_messaging_persona
+ self._page_links = list()
+
# self.model.sql_logging_enabled = True
def server_alive(self):
@@ -72,18 +83,47 @@
self.model.check()
- def init(self):
- log.info("Initializing %s", self)
+ def _init_grid_persona(self):
+ self.main_page = GridMainPage(self, "index.html")
+ self.add_page(self.main_page, add_to_link_set=True)
+ self.set_default_page(self.main_page)
+
+ self.add_common_pages()
- self.model.init()
- self.session.init()
- self.database.init()
- self.server.init()
+ import account
+ import grid
+ import inventory
+ import usergrid
- self.add_pages()
+ account.Module(self, "account")
+ grid.Module(self, "grid")
+ inventory.Module(self, "inventory")
+ usergrid.Module(self, "usergrid")
+ def _init_messaging_persona(self):
+ self.main_page = MessagingMainPage(self, "index.html")
+ self.add_page(self.main_page, add_to_link_set=True)
+ self.set_default_page(self.main_page)
+
+ self.add_common_pages()
+
import account
import messaging
+ import inventory
+
+ account.Module(self, "account")
+ messaging.Module(self, "messaging")
+ inventory.Module(self, "inventory")
+
+ def _init_default_persona(self):
+ self.main_page = MainPage(self, "index.html")
+ self.add_page(self.main_page, add_to_link_set=True)
+ self.set_default_page(self.main_page)
+
+ self.add_common_pages()
+
+ import account
+ import messaging
import grid
import inventory
import usergrid
@@ -94,6 +134,20 @@
inventory.Module(self, "inventory")
usergrid.Module(self, "usergrid")
+ def init(self):
+ log.info("Initializing %s", self)
+
+ self.model.init()
+ self.session.init()
+ self.database.init()
+ self.server.init()
+
+ # Create the correct persona
+ if self.persona in self.personas:
+ self.personas[self.persona]()
+ else:
+ self._init_default_persona()
+
for module in self.modules:
module.init()
@@ -102,12 +156,7 @@
super(Cumin, self).init()
- def add_pages(self):
- self.main_page = MainPage(self, "index.html")
-
- self.add_page(self.main_page)
- self.set_default_page(self.main_page)
-
+ def add_common_pages(self):
self.form_page = CuminFormPage(self, "form.html")
self.add_page(self.form_page)
@@ -170,6 +219,52 @@
def init_test(self, test):
pass
+class GridMainPage(CuminPage, ModeSet):
+ def __init__(self, app, name):
+ super(GridMainPage, self).__init__(app, name)
+
+ self.main = GridMainView(app, "main")
+ self.add_mode(self.main)
+ self.set_default_frame(self.main)
+
+ self.page_html_class = "Cumin"
+
+ def render_title(self, session):
+ return self.get_title(session)
+
+ def get_title(self, session):
+ return "Administrator"
+
+class GridMainView(CuminMainView):
+ def __init__(self, app, name):
+ super(GridMainView, self).__init__(app, name)
+
+ self.overview = GridOverviewFrame(app, "overview")
+ self.add_tab(self.overview)
+
+class MessagingMainPage(CuminPage, ModeSet):
+ def __init__(self, app, name):
+ super(MessagingMainPage, self).__init__(app, name)
+
+ self.main = MessagingMainView(app, "main")
+ self.add_mode(self.main)
+ self.set_default_frame(self.main)
+
+ self.page_html_class = "Cumin"
+
+ def render_title(self, session):
+ return self.get_title(session)
+
+ def get_title(self, session):
+ return "Administrator"
+
+class MessagingMainView(CuminMainView):
+ def __init__(self, app, name):
+ super(MessagingMainView, self).__init__(app, name)
+
+ self.overview = MessagingOverviewFrame(app, "overview")
+ self.add_tab(self.overview)
+
class MainPage(CuminPage, ModeSet):
def __init__(self, app, name):
super(MainPage, self).__init__(app, name)
@@ -199,12 +294,15 @@
def __init__(self, app, name):
super(OverviewFrame, self).__init__(app, name)
- self.view = OverviewView(app, "view")
+ self.view = self.get_overview_view(app)
self.add_mode(self.view)
self.notice = ConfigurationNotice(app, "notice")
self.add_mode(self.notice)
+ def get_overview_view(self, app):
+ return OverviewView(app, "view")
+
def do_process(self, session):
super(OverviewFrame, self).do_process(session)
@@ -242,13 +340,48 @@
#systems = inventory.system.TopSystemSet(app, "systems")
#self.add_child(systems)
- class Heading(CuminHeading):
- def render_title(self, session):
- return "Overview"
+# don't appear to need this....
+ # class Heading(CuminHeading):
+ # def render_title(self, session):
+ # return "Overview"
- def render_icon_href(self, session):
- return "resource?name=action-36.png"
+ # def render_icon_href(self, session):
+ # return "resource?name=action-36.png"
+class GridOverviewFrame(OverviewFrame):
+ def __init__(self, app, name):
+ super(GridOverviewFrame, self).__init__(app, name)
+
+ def get_overview_view(self, app):
+ return GridOverviewView(app, "view")
+
+class GridOverviewView(Widget):
+ def __init__(self, app, name):
+ super(GridOverviewView, self).__init__(app, name)
+
+ systems = TopSystemTable(app, "systems")
+ self.add_child(systems)
+
+ submissions = TopSubmissionTable(app, "submissions")
+ self.add_child(submissions)
+
+class MessagingOverviewFrame(OverviewFrame):
+ def __init__(self, app, name):
+ super(MessagingOverviewFrame, self).__init__(app, name)
+
+ def get_overview_view(self, app):
+ return MessagingOverviewView(app, "view")
+
+class MessagingOverviewView(Widget):
+ def __init__(self, app, name):
+ super(MessagingOverviewView, self).__init__(app, name)
+
+ queues = TopQueueTable(app, "queues")
+ self.add_child(queues)
+
+ systems = TopSystemTable(app, "systems")
+ self.add_child(systems)
+
class ConfigurationNotice(Widget):
pass
Modified: trunk/cumin/python/cumin/main.strings
===================================================================
--- trunk/cumin/python/cumin/main.strings 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/main.strings 2011-03-16 15:00:49 UTC (rev 4621)
@@ -1,22 +1,3 @@
-[OverviewView.css]
-div.OverviewView > table {
- width: 100%;
-}
-
-div.OverviewView > table > tbody > tr > td {
- width: 50%;
- vertical-align: top;
-}
-
-div.OverviewView h2 > img {
- vertical-align: bottom;
- margin: 0 0.2em 0 0;
-}
-
-div.OverviewView {
- clear: both;
-}
-
[OverviewView.html]
<div class="oblock OverviewView">
<table>
@@ -51,6 +32,54 @@
</table>
</div>
+
+[GridOverviewView.html]
+<div class="oblock OverviewView">
+ <table>
+ <tbody>
+ <tr>
+ <td>
+<div class="fullpageable">
+ <h2><img src="{resource_prefix}/job-20.png" alt="" /> Longest Running Grid Submissions</h2>
+ <div class="iblock">{submissions}</div>
+</div>
+ </td>
+ <td>
+<div class="fullpageable">
+ <h2><img src="{resource_prefix}/system-20.png" alt=""/> Busiest Systems</h2>
+
+ <div class="iblock">{systems}</div>
+</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+[MessagingOverviewView.html]
+<div class="oblock OverviewView">
+ <table>
+ <tbody>
+ <tr>
+ <td>
+<div class="fullpageable">
+ <h2><img src="{resource_prefix}/queue-20.png" alt="" /> Deepest Message Queues</h2>
+
+ <div class="iblock">{queues}</div>
+</div>
+ </td>
+ <td>
+<div class="fullpageable">
+ <h2><img src="{resource_prefix}/system-20.png" alt=""/> Busiest Systems</h2>
+
+ <div class="iblock">{systems}</div>
+</div>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
[ConfigurationNotice.css]
div.ConfigurationNotice {
margin: 2em;
Modified: trunk/cumin/python/cumin/usergrid/main.py
===================================================================
--- trunk/cumin/python/cumin/usergrid/main.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/usergrid/main.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -10,4 +10,4 @@
super(Module, self).init()
self.app.user_grid_page = MainPage(self.app, "usergrid.html")
- self.app.add_page(self.app.user_grid_page)
+ self.app.add_page(self.app.user_grid_page, add_to_link_set=True)
Modified: trunk/cumin/python/cumin/widgets.py
===================================================================
--- trunk/cumin/python/cumin/widgets.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/python/cumin/widgets.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -93,28 +93,8 @@
self.check_admin = self.CheckAdmin(app)
def do_get_items(self, session):
- pages = list()
+ return self.app.page_links
- user = self.page.user.get(session)
-
- # if user is admin, display main_page XXX
-
- #self.check_admin.add_where_expr \
- # (session, "r.name = 'admin'")
- #self.check_admin.add_where_expr \
- # (session, "m.subject_id = %i", user.id)
-
- #results = self.check_admin.execute(session)
-
- #if results.fetchone():
- # pages.append(self.app.main_page)
-
- pages.append(self.app.main_page)
- pages.append(self.app.user_grid_page)
- pages.append(self.app.account_page)
-
- return pages
-
def render_item_content(self, session, page):
href = Session(page).marshal()
title = page.render_title(session)
Modified: trunk/cumin/resources/app.css
===================================================================
--- trunk/cumin/resources/app.css 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/cumin/resources/app.css 2011-03-16 15:00:49 UTC (rev 4621)
@@ -629,3 +629,21 @@
.autocomplete .normal{border-top: 1px solid #fefefe;}
.autocomplete .selected{background: #ddf;}
.autocomplete .highlited{font-weight: bold; color: #008;}
+
+div.OverviewView > table {
+ width: 100%;
+}
+
+div.OverviewView > table > tbody > tr > td {
+ width: 50%;
+ vertical-align: top;
+}
+
+div.OverviewView h2 > img {
+ vertical-align: bottom;
+ margin: 0 0.2em 0 0;
+}
+
+div.OverviewView {
+ clear: both;
+}
Modified: trunk/wooly/python/wooly/__init__.py
===================================================================
--- trunk/wooly/python/wooly/__init__.py 2011-03-15 19:49:07 UTC (rev 4620)
+++ trunk/wooly/python/wooly/__init__.py 2011-03-16 15:00:49 UTC (rev 4621)
@@ -579,6 +579,7 @@
def __init__(self):
self.pages = list()
self.pages_by_name = dict()
+ self.page_links = list()
self.resource_page = ResourcePage(self, "resource")
self.add_page(self.resource_page)
@@ -594,7 +595,7 @@
for page in self.pages:
page.seal()
- def add_page(self, page):
+ def add_page(self, page, add_to_link_set=False):
if page.parent:
raise Exception("Page '%s' is not a root widget" % page.name)
@@ -604,6 +605,8 @@
self.pages.append(page)
self.pages_by_name[page.name] = page
+ if add_to_link_set:
+ self.page_links.append(page)
def set_default_page(self, page):
self.pages_by_name[""] = page
13 years, 2 months
r4620 - trunk/cumin/python/cumin
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:49:07 +0000 (Tue, 15 Mar 2011)
New Revision: 4620
Modified:
trunk/cumin/python/cumin/charts.py
Log:
Use a hollow circle to signify "no chartable data"
Modified: trunk/cumin/python/cumin/charts.py
===================================================================
--- trunk/cumin/python/cumin/charts.py 2011-03-15 19:38:54 UTC (rev 4619)
+++ trunk/cumin/python/cumin/charts.py 2011-03-15 19:49:07 UTC (rev 4620)
@@ -27,10 +27,12 @@
if not total:
# draw a grey placeholder circle
- self.draw_slice_path(cr, self.centerx, self.centery,
- self.radius, 0, 2 * pi)
- cr.set_source_rgba(0, 0, 0, 0.05)
- cr.fill()
+ cr.new_path()
+ cr.arc(self.centerx, self.centery,
+ self.radius, 0, 2 * pi)
+ cr.close_path()
+ cr.set_source_rgba(0, 0, 0, 0.1)
+ cr.stroke()
return surface
wedge = cum_wedges = end = 0.0
13 years, 2 months
r4619 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:38:54 +0000 (Tue, 15 Mar 2011)
New Revision: 4619
Added:
trunk/cumin/python/cumin/grid/slotvis.py
trunk/cumin/python/cumin/grid/slotvis.strings
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
trunk/cumin/python/cumin/grid/main.py
trunk/cumin/python/cumin/grid/pool.py
trunk/cumin/python/cumin/grid/pool.strings
Log:
Shuffle the grid dashboard components around
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-03-15 19:37:45 UTC (rev 4618)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-03-15 19:38:54 UTC (rev 4619)
@@ -4,7 +4,7 @@
from wooly.util import StringCatalog
from wooly.datatable import DataAdapterOptions, DataAdapterField
from wooly.table import TableHeader
-from wooly.widgets import TabbedModeSet
+from wooly.widgets import RadioModeSet, WidgetSet
from cumin.sqladapter import ObjectSqlAdapter
from cumin.stat import StatSet, PieChartPage, StatFlashChart
@@ -13,71 +13,84 @@
ObjectLinkColumn
from cumin.util import rgb_to_string
from negotiator import NegotiatorAttribute
+from cumin.grid.slotvis import PoolSlotMap, PoolSlotFlashVis
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.dashboard")
-class PoolDashboard(Widget):
+class PoolDashboard(RadioModeSet):
def __init__(self, app, name, collector):
super(PoolDashboard, self).__init__(app, name)
self.collector = collector
- overview = DashboardOverview(app, "overview", collector)
- self.add_child(overview)
+ dashboard = Dashboard(app, "d", collector)
+ self.add_tab(dashboard)
- performance = DashboardPerformance(app, "performance", collector)
- self.add_child(performance)
+ performance = DashboardPerformance(app, "p", collector)
+ self.add_tab(performance)
- capacity = DashboardCapacity(app, "capacity", collector)
- self.add_child(capacity)
+ capacity = DashboardCapacity(app, "c", collector)
+ self.add_tab(capacity)
+ visualization = Visualization(app, "v", collector)
+ self.add_tab(visualization)
+
def render_title(self, session):
- return "Dashboard"
+ return "Overview"
-class DashboardOverview(Widget):
+class Visualization(Widget):
def __init__(self, app, name, collector):
- super(DashboardOverview, self).__init__(app, name)
+ super(Visualization, self).__init__(app, name)
- job_data = DashboardOverviewJobSummary(app, "jobs_summary", collector)
- self.add_child(job_data)
+ self.collector = collector
+ slot_map = PoolSlotMap(app, "slot_png", self.collector)
+ self.add_child(slot_map)
+
+ slot_vis = PoolSlotFlashVis(app, "slot_map", self.collector)
+ self.add_child(slot_vis)
+
+ def render_title(self, session):
+ return "Slot visualization"
+
+class Dashboard(WidgetSet):
+ def __init__(self, app, name, collector):
+ super(Dashboard, self).__init__(app, name)
+
slot_data = GridSlotsSummary(app, "slots_summary", collector)
self.add_child(slot_data)
+ job_data = DashboardOverviewJobSummary(app, "jobs_summary", collector)
+ self.add_child(job_data)
+
+ neg_through = NegotiatorJobThroughput(app, "negotiator_throughput", collector)
+ self.add_child(neg_through)
+
os_data = GridOSBreakdown(app, "os_breakdown", collector)
self.add_child(os_data)
def render_title(self, session):
- return "Overview"
+ return "Dashboard"
class DashboardPerformance(Widget):
def __init__(self, app, name, collector):
super(DashboardPerformance, self).__init__(app, name)
cls = app.model.com_redhat_grid.Collector
- c = MonitorSelfStats(app, "ms_c", collector, cls, "Collector Performance", None)
+ c = MonitorSelfStats(app, "ms_c", collector, cls, "Collector performance", None)
self.add_child(c)
cls = app.model.com_redhat_grid.Negotiator
frame = "main.grid.negotiator"
- n = MonitorSelfStats(app, "ms_n", collector, cls, "Negotiator Performance", frame)
+ n = MonitorSelfStats(app, "ms_n", collector, cls, "Negotiator performance", frame)
self.add_child(n)
s = MonitorSelfSchedulerTable(app, "ms_s", collector)
self.add_child(s)
- neg_through = NegotiatorJobThroughput(app, "negotiator_throughput", collector)
- self.add_child(neg_through)
-
- neg_cycles = NegotiatorCycles(app, "negotiator_cycles", collector)
- self.add_child(neg_cycles)
-
- neg_slots = NegotiatorSlots(app, "negotiator_slots", collector)
- self.add_child(neg_slots)
-
def render_title(self, session):
- return "Scheduler Performance"
+ return "Performance"
class DashboardCapacity(Widget):
def __init__(self, app, name, collector):
@@ -87,7 +100,7 @@
self.add_child(capacity)
def render_title(self, session):
- return "Slot Capacity"
+ return "Slot capacity"
class DefinitionSet(StatSet):
pass
@@ -184,10 +197,6 @@
self.header = self.MinimalTableHeader(app, "header")
self.replace_child(self.header)
- # no footer
- self.footer = Widget(app, "footer")
- self.replace_child(self.footer)
-
# no checkboxes or id field
self.adapter = self.MinimalAdapter(app, cls)
@@ -395,7 +404,7 @@
self.color_scheme = PieChartPage.GREENS
def render_title(self, session):
- return "Job Summary Info"
+ return "Job summary info"
class DashboardCapacitySlotSummary(ObjectSelector):
def __init__(self, app, name, collector):
@@ -404,14 +413,14 @@
self.add_filter(collector, cls.Pool)
- stat = self.DiskTotalColumn(app, "disk", cls.Disk, "Disk Total")
+ stat = self.DiskTotalColumn(app, "disk", cls.Disk, "Disk total")
stat.static_header = True
self.add_column(stat)
- stat = SumSqlColumn(app, "slot_mem_used", cls.ImageSize, "Memory Used")
+ stat = SumSqlColumn(app, "slot_mem_used", cls.ImageSize, "Memory used")
stat.static_header = True
self.add_column(stat)
- stat = SumSqlColumn(app, "memtotal", cls.Memory, "Memory Total")
+ stat = SumSqlColumn(app, "memtotal", cls.Memory, "Memory total")
stat.static_header = True
self.add_column(stat)
stat = QuotientSqlColumn(app, "percentmem",
@@ -446,7 +455,7 @@
self.add_child(self.chart)
def render_title(self, session):
- return "Host Summary Info"
+ return "Host summaryiInfo"
def is_total(self, item):
index = self.attrs.index(item[0].name)
@@ -501,9 +510,9 @@
records = list()
for os in recs_by_os:
- records.append(("%s Used" % os, recs_by_os[os]["used"]))
- records.append(("%s Unused" % os, recs_by_os[os]["unused"]))
- records.append(("%s Total" % os, recs_by_os[os]["total"]))
+ records.append(("%s used" % os, recs_by_os[os]["used"]))
+ records.append(("%s unused" % os, recs_by_os[os]["unused"]))
+ records.append(("%s total" % os, recs_by_os[os]["total"]))
########## dummy test data
"""
@@ -547,14 +556,14 @@
return super(GridOSBreakdown, self).do_render(session)
def render_title(self, session):
- return "Slot Breakdown by OS"
+ return "Slot breakdown by OS"
def do_get_items(self, session):
return [(i, x) for i, x in enumerate(self.os_records.get(session))]
def is_total(self, item):
_, record = item
- return "Total" in record[0]
+ return "total" in record[0]
def render_item_title(self, session, item):
_, record = item
@@ -606,15 +615,17 @@
def __init__(self, app, name, collector):
super(NegotiatorJobThroughput, self).__init__(app, name, collector)
- self.attrs = ["NumJobsConsidered", "Rejections"]
+ self.attrs = ["NumJobsConsidered", "Matches", "CandidateSlots"]
self.chart.stats = self.attrs
self.has_total = False
- self.color_scheme = PieChartPage.RAINBOW
+ self.color_scheme = PieChartPage.BLANK
def render_title(self, session):
- return "Negotiator Job Throughput"
+ return "Negotiator job throughput"
+ def get_legend_class(self, session, item):
+ return "blank"
class NegotiatorCycles(NegotiatorDefinitionStatSet):
def __init__(self, app, name, collector):
@@ -678,7 +689,7 @@
self.add_child(self.table)
def render_title(self, session):
- return "Scheduler Performance"
+ return "Scheduler performance"
def render_table(self, session):
return self.table.render(session)
@@ -690,34 +701,24 @@
self.pool = pool
self.cls = cls
self.frame = frame
+ self.title = title
self.object = RosemaryPoolObjectAttribute(app, "obj", pool, cls)
self.add_attribute(self.object)
- title_widget = self.MonitorSelfTitle(app, "title", self.object, title)
- self.add_child(title_widget)
-
- tabs = TabbedModeSet(app, "tabs")
- self.add_child(tabs)
-
self.chart = MonitorSelfCharts(app, "history", pool, cls, self.object)
- tabs.add_tab(self.chart)
- tabs.add_tab(MonitorSelfTable(app, "current", pool, cls, frame, True))
+ self.add_child(self.chart)
+ table = MonitorSelfTable(app, "current", pool, cls, frame, True)
+ self.add_child(table)
+
def do_render(self, session):
if self.object.get(session):
return super(MonitorSelfStats, self).do_render(session)
- class MonitorSelfTitle(Widget):
- def __init__(self, app, name, object, title):
- super(MonitorSelfStats.MonitorSelfTitle, self).__init__(app, name)
+ def render_title(self, session):
+ return self.title
- self.object = object
- self.title = title
-
- def render_title(self, session):
- return self.title
-
class MonitorSelfTable(ObjectSelector):
def __init__(self, app, name, pool, cls, frame, static):
super(MonitorSelfTable, self).__init__(app, name, cls)
@@ -734,7 +735,7 @@
col.static_header = static
self.add_column(col)
- stat = MonitorSelfStatColumn(app, cls.MonitorSelfAge.name, cls.MonitorSelfAge)
+ stat = ObjectTableColumn(app, cls.MonitorSelfAge.name, cls.MonitorSelfAge)
stat.static_header = True
self.add_column(stat)
@@ -746,20 +747,10 @@
stat.static_header = True
self.add_column(stat)
- stat = MonitorSelfStatColumn(app, cls.MonitorSelfResidentSetSize.name, cls.MonitorSelfResidentSetSize)
- stat.static_header = True
- self.add_column(stat)
-
stat = MonitorSelfStatColumn(app, cls.MonitorSelfImageSize.name, cls.MonitorSelfImageSize)
stat.static_header = True
self.add_column(stat)
- stat = QuotientSqlColumn(app, "used", cls.MonitorSelfResidentSetSize,
- cls.MonitorSelfImageSize)
- stat.static_header = True
- stat.title = "% Used"
- self.add_column(stat)
-
self.enable_csv_export(pool)
def create_table(self, app, name, cls):
@@ -780,9 +771,8 @@
cpu.stats = ("MonitorSelfCPUUsage",)
self.add_child(cpu)
- used = self.MemoryFlashChart(app, "used", object)
- used.chart_type = "percent"
- used.stats = ("MonitorSelfResidentSetSize",)
+ used = self.SocketFlashChart(app, "used", object)
+ used.stats = ("MonitorSelfRegisteredSocketCount",)
self.add_child(used)
def render_title(self, session):
@@ -790,18 +780,12 @@
class CPUFlashChart(StatFlashChart):
def render_title(self, session, *args):
- return "CPU Usage"
+ return "CPU usage"
- class MemoryFlashChart(StatFlashChart):
+ class SocketFlashChart(StatFlashChart):
def render_title(self, session, *args):
- return "Memory Usage"
+ return "Socket count"
- def get_href_params(self, session):
- params = super(MonitorSelfCharts.MemoryFlashChart, self).get_href_params(session)
- params.append("tp=MonitorSelfImageSize")
-
- return params
-
class RosemaryPoolObjectAttribute(Attribute):
def __init__(self, app, name, pool, cls):
super(RosemaryPoolObjectAttribute, self).__init__(app, name)
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-15 19:37:45 UTC (rev 4618)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-03-15 19:38:54 UTC (rev 4619)
@@ -1,34 +1,33 @@
-[PoolDashboard.html]
- {overview}
- <div style="clear:both;"></div>
- {performance}
- <div style="clear:both; padding-top:2em;"></div>
- {capacity}
- <div style="clear:both;"></div>
+[Dashboard.css]
+div.Dashboard {
+ width: 950px;
+}
-[DashboardOverview.html]
- {os_breakdown}
- {slots_summary}
- {jobs_summary}
+[Dashboard.html]
+<div id="{id}" class="{class}">{widgets}</div>
+<div style="clear:both;"></div>
-[DashboardPerformance.css]
-div.DashboardPerformance {
- width: 1000px;
- clear: both;
+[Dashboard.widget_html]
+{widget}
+
+[MonitorSelfStats.css]
+div.MonitorSelfStats div.data {
+ margin-left: 2em;
}
-div.DashboardPerformance div.TabbedModeSet {
- min-height: 6em;
+div.MonitorSelfStats h2.title{
+ margin: 1em 0;
+ padding: 0.5em;
+ background-color: #E7E7F7;
}
-[DashboardPerformance.html]
- {negotiator_throughput}
- {negotiator_cycles}
- {negotiator_slots}
+[MonitorSelfStats.html]
<div id="{id}" class="{class}">
- {ms_s}
- {ms_c}
- {ms_n}
+ <h2 class="title">{title}</h2>
+ <div class="data">
+ {current}
+ {history}
+ </div>
</div>
[MonitorSelfTitle.html]
@@ -38,10 +37,15 @@
div.MonitorSelfSchedulerTable {
margin-bottom: 3em;
}
+div.MonitorSelfSchedulerTable h2.title {
+ margin: 1em 0;
+ padding: 0.5em;
+ background-color: #E7E7F7;
+}
[MonitorSelfSchedulerTable.html]
<div id="{id}" class="{class}">
- <h3>{title}</h3>
+ <h2 class="title">{title}</h2>
{table}
</div>
@@ -179,3 +183,15 @@
<th><span class="{chart_class}" onclick="showHistoryChart('{item_title}', '{chart_href}')" title="{span_title}"></span>{item_title}</th>
<td class="ralign"> {item_value}</td>
</tr>
+
+
+[Visualization.css]
+div#flashSlotMap, div#pngSlotMap {
+ display: none;
+}
+
+[Visualization.html]
+<div class="{class}">
+ <div id="flashSlotMap">{slot_map}</div>
+ <div id="pngSlotMap">{slot_png}</div>
+</div>
Modified: trunk/cumin/python/cumin/grid/main.py
===================================================================
--- trunk/cumin/python/cumin/grid/main.py 2011-03-15 19:37:45 UTC (rev 4618)
+++ trunk/cumin/python/cumin/grid/main.py 2011-03-15 19:38:54 UTC (rev 4619)
@@ -5,6 +5,7 @@
from cumin import *
from cumin.objecttask import *
from cumin.util import *
+from cumin.grid.slotvis import PoolSlotMapPage, PoolSlotFullPage
from model import *
from pool import *
Modified: trunk/cumin/python/cumin/grid/pool.py
===================================================================
--- trunk/cumin/python/cumin/grid/pool.py 2011-03-15 19:37:45 UTC (rev 4618)
+++ trunk/cumin/python/cumin/grid/pool.py 2011-03-15 19:38:54 UTC (rev 4619)
@@ -4,14 +4,13 @@
from wooly.template import WidgetTemplate
from wooly.util import StringCatalog, Writer
-from cumin.widgets import Session, StateSwitch
from cumin.objectframe import ObjectFrame, ObjectView
-from cumin.parameters import CollectorGridAttribute, RosemaryObjectParameter
-from cumin.stat import StatFlashChart, StatSet, FlashFullPage
+from cumin.parameters import CollectorGridAttribute
+from cumin.stat import StatFlashChart, StatSet
from cumin.grid.dashboard import PoolDashboard
from submission import SubmissionFrame, PoolSubmissionJoinSelector
-from slot import SlotFrame, SlotSelector, SlotMap, SlotMapPage
+from slot import SlotFrame, SlotSelector
from scheduler import SchedulerFrame, SchedulerSelector
from negotiator import NegotiatorFrame, NegotiatorSelector,\
NegotiatorEditDynamicQuota, NegotiatorAttribute
@@ -19,7 +18,6 @@
from cumin.grid.quota import QuotaSelector
from collector import CollectorGeneralStatSet
-
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.pool")
@@ -73,8 +71,8 @@
self.limit = LimitFrame(app, "limit")
self.add_mode(self.limit)
- overview = PoolOverview(app, "overview", self.object)
- self.view.add_tab(overview)
+ #overview = PoolOverview(app, "overview", self.object)
+ #self.view.add_tab(overview)
dashboard = PoolDashboard(app, "dashboard", self.object)
self.view.add_tab(dashboard)
@@ -146,12 +144,6 @@
stats = GridStats(app, "grid_stats", self.grid)
self.add_child(stats)
- slot_map = PoolSlotMap(app, "slot_png", self.collector)
- self.add_child(slot_map)
-
- slot_vis = PoolSlotFlashVis(app, "slot_map", self.collector)
- self.add_child(slot_vis)
-
chart = self.JobStackedChart(app, "jobs", self.collector)
chart.duration.param.default = "3600"
chart.stats = ("RunningJobs", "IdleJobs")
@@ -229,129 +221,3 @@
class GridSubmitChart(StatFlashChart):
def render_title(self, session):
return "Grid submits"
-
-class PoolSlotMap(SlotMap):
- def __init__(self, app, name, collector):
- super(PoolSlotMap, self).__init__(app, name)
-
- self.collector = collector
-
- def do_process(self, session):
- super(PoolSlotMap, self).do_process(session)
-
- collector = self.collector.get(session)
-
- self.slots.add_where_expr(session, "\"Pool\" = '%s'", collector.Pool)
-
- def render_image_href(self, session):
- collector = self.collector.get(session)
-
- page = self.app.grid.pool_slots_page
- sess = Session(page)
-
- page.collector.set(sess, collector)
-
- return sess.marshal()
-
- def get_scheduler_select(self, session):
- pass
- #pool = self.pool.get(session)
-
-class PoolSlotMapPage(SlotMapPage):
- def __init__(self, app, name):
- cls = app.model.com_redhat_grid.Collector
- self.collector = RosemaryObjectParameter(app, "id", cls)
-
- super(PoolSlotMapPage, self).__init__(app, name, self.collector, "Pool")
-
- self.add_parameter(self.collector)
-
- def do_process(self, session):
- super(PoolSlotMapPage, self).do_process(session)
-
- collector = self.collector.get(session)
-
- # XXX The conditional is necessary because this page is
- # overloaded to generate little dots, in which case it has no
- # pool
-
- if collector:
- self.slots.add_where_expr(session, "\"Pool\" = '%s'", collector.Pool)
-
-class PoolSlotFlashVis(PoolSlotMap):
- def __init__(self, app, name, object):
- super(PoolSlotFlashVis, self).__init__(app, name, object)
-
- self.group_by = self.GroupBySwitch(app, "group_by")
- self.add_child(self.group_by)
-
- self.fullpageable = True
-
- def render_slots_href(self, session):
- collector = self.collector.get(session)
-
- page = self.app.grid.pool_slots_page
- sess = Session(page)
-
- page.collector.set(sess, collector)
- page.json.set(sess, "slots")
- page.groups.set(sess, [self.group_by.get(session)])
-
- return sess.marshal()
-
- def render_image_href(self, session):
- collector = self.collector.get(session)
-
- page = self.app.grid.pool_slots_page
- sess = Session(page)
-
- page.collector.set(sess, collector)
-
- return sess.marshal()
-
- def render_slot_chart_width(self, session):
- return self.render_slot_clip_size(session)
-
- def render_slot_chart_height(self, session):
- return self.render_slot_clip_size(session)
-
- def render_fullpageable(self, session):
- return self.fullpageable and "fullpageable" or ""
-
- def render_fullpage_href(self, session):
- collector = self.collector.get(session)
-
- page = self.app.grid.pool_slots_fullpage
- sess = Session(page)
-
- page.collector.set(sess, collector)
-
- return sess.marshal()
-
- class GroupBySwitch(StateSwitch):
- def __init__(self, app, name):
- super(PoolSlotFlashVis.GroupBySwitch, self).__init__(app, name)
-
- self.add_state("System", "By system")
- self.add_state("AccountingGroup", "By accounting group")
- self.add_state("None", "No Grouping")
-
- def get_click(self, session, state):
- href = self.parent.render_slots_href(session)
- return "return slot_vis('%s', this, '%s', '%s')" % \
- (state, self.parent.path, href)
-
-class PoolSlotFullPage(FlashFullPage):
- def __init__(self, app, name):
- super(PoolSlotFullPage, self).__init__(app, name)
-
- cls = app.model.com_redhat_grid.Collector
- self.collector = RosemaryObjectParameter(app, "id", cls)
- self.add_parameter(self.collector)
-
- self.flash_chart = PoolSlotFlashVis(app, "chart", self.collector)
- self.flash_chart.fullpageable = False
- self.replace_child(self.flash_chart)
-
- def render_content(self, session):
- return self.flash_chart.render(session)
Modified: trunk/cumin/python/cumin/grid/pool.strings
===================================================================
--- trunk/cumin/python/cumin/grid/pool.strings 2011-03-15 19:37:45 UTC (rev 4618)
+++ trunk/cumin/python/cumin/grid/pool.strings 2011-03-15 19:38:54 UTC (rev 4619)
@@ -25,9 +25,6 @@
div#PoolOverview div.col1 {
padding-right: 2em;
}
-div#flashSlotMap, div#pngSlotMap {
- display: none;
-}
[PoolOverview.html]
<div id="PoolOverview">
@@ -38,11 +35,7 @@
<div>{slots}</div>
{grid_stats}
</div>
-<div class="col2">
- <div id="flashSlotMap">{slot_map}</div>
- <div id="pngSlotMap">{slot_png}</div>
</div>
-</div>
<div style="clear:left;"><!-- --></div>
[GridStats.html]
@@ -51,129 +44,3 @@
{stats}
<div>{jobs_chart}</div>
<div>{submit_chart}</div>
-
-[PoolSlotFlashVis.css]
-div#PoolSlotFlashVis {
- visibility: hidden;
-}
-
-[PoolSlotFlashVis.html]
-<div id="PoolSlotFlashVis">
- <h2>Slots</h2>
- <div class="StatValueChart {fullpageable}" id="{id}">
- <h2>{title}</h2>
- <div class="duration">{group_by}</div>
- <div id="{id}_chart"></div>
- {slot_legend}
- </div>
-</div>
-<script type="text/javascript">
-//<![CDATA[
- function updatePoolSlotVis(id, loadType) {
- var chart = cumin.getFlashChart(id);
- if (typeof loadType == "undefined")
- loadType = "load";
- if ((chart != null) && (typeof chart.src != "undefined")) {
- if ((loadType == "reload") && (typeof chart.reload != "undefined"))
- chart.reload(chart.src, false);
- else if ((loadType == "load") && (typeof chart.load != "undefined"))
- chart.load(chart.src, false);
- else
- wooly.log("load not defined for " + id);
- }
- }
- function vis_loaded(data) {
- if (data == "1") {
- $('PoolSlotFlashVis').style.visibility = "visible";
- }
- }
- function vis_ready(vis) {
- if (vis == "slots") {
- var chart = cumin.getFlashChart("{id}");
- chart.src = "{slots_href}";
- updatePoolSlotVis('{id}', "load");
- }
- }
- function vis_expand(parent) {
- if (parent == null) {
- parent = "None";
- }
- var chart = cumin.getFlashChart("{id}");
- var src = chart.src;
- var branch = wooly.session.branch(src);
- branch['expanded'] = parent;
- chart.src = branch.marshal();
- updatePoolSlotVis("{id}", "load");
- }
- function vis_back() {
- var chart = cumin.getFlashChart("{id}");
- var src = chart.src;
- var branch = wooly.session.branch(src);
- if (typeof branch.expanded != "undefined")
- delete branch.expanded;
- chart.src = branch.marshal();
- updatePoolSlotVis("{id}", "load");
- }
- function vis_treemap_over(type, value) {
- var chart = cumin.getFlashChart("{id}");
- if (chart) {
- if (typeof chart.highlight != "undefined")
- chart.highlight(type, value);
- }
- }
- function vis_treemap_out(type, value) {
- var chart = cumin.getFlashChart("{id}");
- if (chart) {
- if (typeof chart.lowlight != "undefined")
- chart.lowlight(type, value);
- }
- }
- function slot_vis(state, a, id, href) {
- var li = a.parentNode;
- var ul = li.parentNode;
- var as = ul.getElementsByTagName('a');
- for (var i=0; i < as.length; i++) {
- as[i].className = (as[i] == a) ? "selected" : "";
- }
-
- var branch = wooly.session.branch(href);
- if (state == "None") {
- if ("group" in branch)
- delete branch.group;
- } else {
- branch.group = state;
- }
- var src = branch.marshal();
- var chart = cumin.getFlashChart(id);
- chart.src = src
- updatePoolSlotVis(id, "load");
- return false;
- }
-
- function init_flash() {
- var flashversion = swfobject.getFlashPlayerVersion();
- if (flashversion.major >= 9) {
- var fsm = document.getElementById('flashSlotMap');
- if (fsm)
- fsm.style.display = "block";
-
- var params = {menu: "false", scale: "noScale", allowFullscreen: "true", allowScriptAccess: "always", bgcolor: "#FFFFFF"};
- var branch = wooly.session.branch();
- if (branch.formBackground) {
- var i = 1;
- params.wmode = "opaque";
- }
-
- swfobject.embedSWF("resource?name=slots.swf", "{id}_chart", "{slot_chart_width}", "{slot_chart_height}", "9.0.0", "", {vis:"slots"}, params);
-
- wooly.addPageUpdateListener(function () { updatePoolSlotVis('{id}', "reload"); });
- window.addEvent('domready',function () {
- cumin.setFullpageHandler('{id}', '{fullpage_href}');
- });
- }
- }
- window.addEvent('domready', init_flash);
-
-//]]>
-</script>
-
\ No newline at end of file
Added: trunk/cumin/python/cumin/grid/slotvis.py
===================================================================
--- trunk/cumin/python/cumin/grid/slotvis.py (rev 0)
+++ trunk/cumin/python/cumin/grid/slotvis.py 2011-03-15 19:38:54 UTC (rev 4619)
@@ -0,0 +1,140 @@
+import logging
+from wooly.util import StringCatalog
+from slot import SlotMap, SlotMapPage
+from wooly import Session
+from cumin.parameters import RosemaryObjectParameter
+from cumin.widgets import StateSwitch
+from cumin.stat import FlashFullPage
+
+strings = StringCatalog(__file__)
+log = logging.getLogger("cumin.slotvis")
+
+class PoolSlotMap(SlotMap):
+ def __init__(self, app, name, collector):
+ super(PoolSlotMap, self).__init__(app, name)
+
+ self.collector = collector
+
+ def do_process(self, session):
+ super(PoolSlotMap, self).do_process(session)
+
+ collector = self.collector.get(session)
+
+ self.slots.add_where_expr(session, "\"Pool\" = '%s'", collector.Pool)
+
+ def render_image_href(self, session):
+ collector = self.collector.get(session)
+
+ page = self.app.grid.pool_slots_page
+ sess = Session(page)
+
+ page.collector.set(sess, collector)
+
+ return sess.marshal()
+
+ def get_scheduler_select(self, session):
+ pass
+ #pool = self.pool.get(session)
+
+class PoolSlotMapPage(SlotMapPage):
+ def __init__(self, app, name):
+ cls = app.model.com_redhat_grid.Collector
+ self.collector = RosemaryObjectParameter(app, "id", cls)
+
+ super(PoolSlotMapPage, self).__init__(app, name, self.collector, "Pool")
+
+ self.add_parameter(self.collector)
+
+ def do_process(self, session):
+ super(PoolSlotMapPage, self).do_process(session)
+
+ collector = self.collector.get(session)
+
+ # XXX The conditional is necessary because this page is
+ # overloaded to generate little dots, in which case it has no
+ # pool
+
+ if collector:
+ self.slots.add_where_expr(session, "\"Pool\" = '%s'", collector.Pool)
+
+class PoolSlotFlashVis(PoolSlotMap):
+ def __init__(self, app, name, object):
+ super(PoolSlotFlashVis, self).__init__(app, name, object)
+
+ self.group_by = self.GroupBySwitch(app, "group_by")
+ self.add_child(self.group_by)
+
+ self.fullpageable = True
+
+ def render_slots_href(self, session):
+ collector = self.collector.get(session)
+
+ page = self.app.grid.pool_slots_page
+ sess = Session(page)
+
+ page.collector.set(sess, collector)
+ page.json.set(sess, "slots")
+ page.groups.set(sess, [self.group_by.get(session)])
+
+ return sess.marshal()
+
+ def render_image_href(self, session):
+ collector = self.collector.get(session)
+
+ page = self.app.grid.pool_slots_page
+ sess = Session(page)
+
+ page.collector.set(sess, collector)
+
+ return sess.marshal()
+
+ def render_slot_chart_width(self, session):
+ return self.render_slot_clip_size(session)
+
+ def render_slot_chart_height(self, session):
+ cursor = self.slots.execute(session)
+ data = cursor.fetchall()
+
+ # allow 44 px per machine up to 8100
+ return max(min((len(data) / 2) * 44, 8100), self.render_slot_clip_size(session))
+
+ def render_fullpageable(self, session):
+ return self.fullpageable and "fullpageable" or ""
+
+ def render_fullpage_href(self, session):
+ collector = self.collector.get(session)
+
+ page = self.app.grid.pool_slots_fullpage
+ sess = Session(page)
+
+ page.collector.set(sess, collector)
+
+ return sess.marshal()
+
+ class GroupBySwitch(StateSwitch):
+ def __init__(self, app, name):
+ super(PoolSlotFlashVis.GroupBySwitch, self).__init__(app, name)
+
+ self.add_state("System", "By system")
+ self.add_state("AccountingGroup", "By accounting group")
+ self.add_state("None", "No Grouping")
+
+ def get_click(self, session, state):
+ href = self.parent.render_slots_href(session)
+ return "return slot_vis('%s', this, '%s', '%s')" % \
+ (state, self.parent.path, href)
+
+class PoolSlotFullPage(FlashFullPage):
+ def __init__(self, app, name):
+ super(PoolSlotFullPage, self).__init__(app, name)
+
+ cls = app.model.com_redhat_grid.Collector
+ self.collector = RosemaryObjectParameter(app, "id", cls)
+ self.add_parameter(self.collector)
+
+ self.flash_chart = PoolSlotFlashVis(app, "chart", self.collector)
+ self.flash_chart.fullpageable = False
+ self.replace_child(self.flash_chart)
+
+ def render_content(self, session):
+ return self.flash_chart.render(session)
Added: trunk/cumin/python/cumin/grid/slotvis.strings
===================================================================
--- trunk/cumin/python/cumin/grid/slotvis.strings (rev 0)
+++ trunk/cumin/python/cumin/grid/slotvis.strings 2011-03-15 19:38:54 UTC (rev 4619)
@@ -0,0 +1,139 @@
+[PoolSlotFlashVis.css]
+div#PoolSlotFlashVis {
+ visibility: hidden;
+}
+
+div#PoolSlotFlashVis div.StatValueChart {
+ width: auto;
+}
+
+div#PoolSlotFlashVis div.slot_legend {
+ float: left;
+}
+div#PoolSlotFlashVis div.slot_visualization {
+ float: left;
+}
+
+[PoolSlotFlashVis.html]
+<div id="PoolSlotFlashVis">
+ <h2>Slots</h2>
+ <div class="StatValueChart {fullpageable}" id="{id}">
+ <h2>{title}</h2>
+ <div class="slot_visualization">
+ <div class="duration">{group_by}</div>
+ <div id="{id}_chart"></div>
+ <div>Click and drag up and down to scroll</div>
+ </div>
+ <div class="slot_legend">{slot_legend}</div><div style="clear:both;"></div>
+ </div>
+</div>
+<script type="text/javascript">
+//<![CDATA[
+ function updatePoolSlotVis(id, loadType) {
+ var chart = cumin.getFlashChart(id);
+ if (typeof loadType == "undefined")
+ loadType = "load";
+ if ((chart != null) && (typeof chart.src != "undefined")) {
+ if ((loadType == "reload") && (typeof chart.reload != "undefined"))
+ chart.reload(chart.src, false);
+ else if ((loadType == "load") && (typeof chart.load != "undefined"))
+ chart.load(chart.src, false);
+ else
+ wooly.log("load not defined for " + id);
+ }
+ }
+ function vis_loaded(data) {
+ if (data == "1") {
+ $('PoolSlotFlashVis').style.visibility = "visible";
+ }
+ }
+ function vis_ready(vis) {
+ if (vis == "slots") {
+ var chart = cumin.getFlashChart("{id}");
+ chart.src = "{slots_href}";
+ updatePoolSlotVis('{id}', "load");
+ }
+ }
+ function vis_expand(parent) {
+ if (parent == null) {
+ parent = "None";
+ }
+ var chart = cumin.getFlashChart("{id}");
+ var src = chart.src;
+ var branch = wooly.session.branch(src);
+ branch['expanded'] = parent;
+ chart.src = branch.marshal();
+ updatePoolSlotVis("{id}", "load");
+ }
+ function vis_back() {
+ var chart = cumin.getFlashChart("{id}");
+ var src = chart.src;
+ var branch = wooly.session.branch(src);
+ if (typeof branch.expanded != "undefined")
+ delete branch.expanded;
+ chart.src = branch.marshal();
+ updatePoolSlotVis("{id}", "load");
+ }
+ function vis_treemap_over(type, value) {
+ var chart = cumin.getFlashChart("{id}");
+ if (chart) {
+ if (typeof chart.highlight != "undefined")
+ chart.highlight(type, value);
+ }
+ }
+ function vis_treemap_out(type, value) {
+ var chart = cumin.getFlashChart("{id}");
+ if (chart) {
+ if (typeof chart.lowlight != "undefined")
+ chart.lowlight(type, value);
+ }
+ }
+ function slot_vis(state, a, id, href) {
+ var li = a.parentNode;
+ var ul = li.parentNode;
+ var as = ul.getElementsByTagName('a');
+ for (var i=0; i < as.length; i++) {
+ as[i].className = (as[i] == a) ? "selected" : "";
+ }
+
+ var branch = wooly.session.branch(href);
+ if (state == "None") {
+ if ("group" in branch)
+ delete branch.group;
+ } else {
+ branch.group = state;
+ }
+ var src = branch.marshal();
+ var chart = cumin.getFlashChart(id);
+ chart.src = src
+ updatePoolSlotVis(id, "load");
+ return false;
+ }
+
+ function init_flash() {
+ var flashversion = swfobject.getFlashPlayerVersion();
+ if (flashversion.major >= 9) {
+ var fsm = document.getElementById('flashSlotMap');
+ if (fsm)
+ fsm.style.display = "block";
+
+ var params = {menu: "false", scale: "noScale", allowFullscreen: "true", allowScriptAccess: "always", bgcolor: "#FFFFFF"};
+ var branch = wooly.session.branch();
+ if (branch.formBackground) {
+ var i = 1;
+ params.wmode = "opaque";
+ }
+
+ swfobject.embedSWF("resource?name=slots.swf", "{id}_chart", "{slot_chart_width}", "{slot_chart_height}", "9.0.0", "", {vis:"slots"}, params);
+
+ wooly.addPageUpdateListener(function () { updatePoolSlotVis('{id}', "reload"); });
+ window.addEvent('domready',function () {
+ cumin.setFullpageHandler('{id}', '{fullpage_href}');
+ });
+ }
+ }
+ window.addEvent('domready', init_flash);
+
+//]]>
+</script>
+
\ No newline at end of file
13 years, 2 months
r4618 - trunk/cumin/python/cumin
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:37:45 +0000 (Tue, 15 Mar 2011)
New Revision: 4618
Modified:
trunk/cumin/python/cumin/stat.py
Log:
Added a white color scheme to pie charts
Modified: trunk/cumin/python/cumin/stat.py
===================================================================
--- trunk/cumin/python/cumin/stat.py 2011-03-15 19:36:53 UTC (rev 4617)
+++ trunk/cumin/python/cumin/stat.py 2011-03-15 19:37:45 UTC (rev 4618)
@@ -239,6 +239,7 @@
GREENS = "greens"
BLUES = "blues"
GROUP2 = "group2"
+ BLANK = "blank"
color_schemes = {"rainbow": [(1,0,0), (0,1,0), (0,0,1), (1,1,0), (1,0,1), (0,1,1)],
"greens": [(0,1,0), (.9,1,.9), (.6,1,.6), (.3,.6,.3), (0,.5,0)],
"blues": [(0,0,1), (.9,.9,1), (.6,.6,1), (.3,.3,.6), (0,0,.5)],
@@ -247,7 +248,8 @@
(0,0,1), (.6,.6,1),
(1,1,0), (1,1,.6),
(1,0,1), (1,.6,1),
- (0,1,1), (.6,1,1)]}
+ (0,1,1), (.6,1,1)],
+ "blank": [(1,1,1), (1,1,1), (1,1,1), (1,1,1)]}
def __init__(self, app, name):
super(PieChartPage, self).__init__(app, name)
13 years, 2 months
r4617 - trunk/cumin/python/cumin
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:36:53 +0000 (Tue, 15 Mar 2011)
New Revision: 4617
Modified:
trunk/cumin/python/cumin/objectselector.py
Log:
More Initial caps goodness
Modified: trunk/cumin/python/cumin/objectselector.py
===================================================================
--- trunk/cumin/python/cumin/objectselector.py 2011-03-15 19:35:15 UTC (rev 4616)
+++ trunk/cumin/python/cumin/objectselector.py 2011-03-15 19:36:53 UTC (rev 4617)
@@ -514,7 +514,7 @@
title = self.field.get_title(session)
parts = title.split()
if len(parts) > 2:
- if parts[0] == "Monitor" and parts[1] == "Self":
+ if parts[0] == "Monitor" and parts[1] == "self":
return " ".join(parts[2:])
return title
13 years, 2 months
r4616 - trunk/cumin/resources
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:35:15 +0000 (Tue, 15 Mar 2011)
New Revision: 4616
Added:
trunk/cumin/resources/save.png
Log:
Smaller version of the csv save icon
Added: trunk/cumin/resources/save.png
===================================================================
(Binary files differ)
Property changes on: trunk/cumin/resources/save.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
13 years, 2 months
r4615 - trunk/cumin/model
by eallen@fedoraproject.org
Author: eallen
Date: 2011-03-15 19:34:01 +0000 (Tue, 15 Mar 2011)
New Revision: 4615
Modified:
trunk/cumin/model/rosemary.xml
Log:
Change the overridden titles to Initial caps
Modified: trunk/cumin/model/rosemary.xml
===================================================================
--- trunk/cumin/model/rosemary.xml 2011-03-15 19:33:23 UTC (rev 4614)
+++ trunk/cumin/model/rosemary.xml 2011-03-15 19:34:01 UTC (rev 4615)
@@ -8,7 +8,7 @@
<package name="com.redhat.cumin.grid">
<class name="JobSummary">
<property name="GlobalJobId">
- <title>Job Id</title>
+ <title>Job id</title>
</property>
<property name="Cmd">
@@ -16,7 +16,7 @@
</property>
<property name="JobStatus">
- <title>Job Status</title>
+ <title>Job status</title>
</property>
</class>
@@ -26,17 +26,17 @@
</property>
<property name="Quota">
- <title>Dynamic Quota</title>
+ <title>Dynamic quota</title>
</property>
</class>
<class name="Limit">
<property name="Usage">
- <title>Current Usage</title>
+ <title>Current usage</title>
</property>
<property name="Allowance">
- <title>Max Allowance</title>
+ <title>Max allowance</title>
</property>
</class>
</package>
@@ -44,7 +44,7 @@
<package name="org.apache.qpid.broker">
<class name="Binding">
<property name="bindingKey">
- <title>Binding Key</title>
+ <title>Binding key</title>
</property>
<property name="arguments">
@@ -56,7 +56,7 @@
</property>
<statistic name="msgMatched">
- <title>Messages Matched</title>
+ <title>Messages matched</title>
</statistic>
</class>
@@ -66,19 +66,19 @@
</object>
<property name="maxConns">
- <title>Max Connections</title>
+ <title>Max connections</title>
</property>
<property name="connBacklog">
- <title>Connection Backlog</title>
+ <title>Connection backlog</title>
</property>
<property name="mgmtPubInterval">
- <title>QMF Publish Interval</title>
+ <title>QMF publish interval</title>
</property>
<property name="dataDir">
- <title>Data Directory</title>
+ <title>Data directory</title>
</property>
</class>
@@ -112,11 +112,11 @@
</statistic>
<statistic name="msgRoutes">
- <title>Messages Routed</title>
+ <title>Messages routed</title>
</statistic>
<statistic name="byteRoutes">
- <title>Bytes Routed</title>
+ <title>Bytes routed</title>
</statistic>
</class>
@@ -134,7 +134,7 @@
</statistic>
<statistic name="msgDepth">
- <title>Queue Messages</title>
+ <title>Queue messages</title>
</statistic>
<statistic name="byteDepth">
@@ -142,43 +142,43 @@
</statistic>
<statistic name="msgPersistEnqueues">
- <title>Messages Enqueued</title>
+ <title>Messages enqueued</title>
</statistic>
<statistic name="msgPersistDequeues">
- <title>Messages Dequeued</title>
+ <title>Messages dequeued</title>
</statistic>
<statistic name="bytePersistEnqueues">
- <title>Bytes Enqueued</title>
+ <title>Bytes enqueued</title>
</statistic>
<statistic name="bytePersistDequeues">
- <title>Bytes Dequeued</title>
+ <title>Bytes dequeued</title>
</statistic>
<statistic name="msgTotalEnqueues">
- <title>Messages Enqueued</title>
+ <title>Messages enqueued</title>
</statistic>
<statistic name="msgTotalDequeues">
- <title>Messages Dequeued</title>
+ <title>Messages dequeued</title>
</statistic>
<statistic name="byteTotalEnqueues">
- <title>Bytes Enqueued</title>
+ <title>Bytes enqueued</title>
</statistic>
<statistic name="byteTotalDequeues">
- <title>Bytes Dequeued</title>
+ <title>Bytes dequeued</title>
</statistic>
<statistic name="unackedMessages">
- <title>Messages Unacked</title>
+ <title>Messages unacked</title>
</statistic>
<statistic name="messageLatency">
- <title>Message Latency</title>
+ <title>Message latency</title>
</statistic>
</class>
@@ -203,7 +203,7 @@
<package name="com.redhat.cumin">
<class name="BrokerGroup">
- <title>Broker Group</title>
+ <title>Broker group</title>
<property name="name">
<title>Name</title>
@@ -236,11 +236,11 @@
</property>
<property name="release">
- <title>Kernel Release</title>
+ <title>Kernel release</title>
</property>
<property name="version">
- <title>Kernel Version</title>
+ <title>Kernel version</title>
</property>
<property name="machine">
@@ -272,15 +272,15 @@
</statistic>
<statistic name="loadAverage1Min">
- <title>Load Average</title>
+ <title>Load average</title>
</statistic>
<statistic name="loadAverage5Min">
- <title>Load Average (5 Minutes)</title>
+ <title>Load average (5 minutes)</title>
</statistic>
<statistic name="loadAverage10Min">
- <title>Load Average (10 Minutes)</title>
+ <title>Load average (10 minutes)</title>
</statistic>
<statistic name="procTotal">
@@ -288,7 +288,7 @@
</statistic>
<statistic name="procRunning">
- <title>Running Processes</title>
+ <title>Running processes</title>
</statistic>
</class>
</package>
@@ -296,12 +296,20 @@
<package name="com.redhat.grid">
<class name="Scheduler">
<statistic name="MonitorSelfCPUUsage">
- <title>CPU Usage</title>
+ <title>CPU usage</title>
</statistic>
<statistic name="MonitorSelfResidentSetSize">
- <title>Memory Used</title>
+ <title>Memory used</title>
</statistic>
+
+ <statistic name="MonitorSelfAge">
+ <title>Up-time</title>
+ </statistic>
+
+ <statistic name="MonitorSelfImageSize">
+ <title>Image size</title>
+ </statistic>
</class>
<class name="Collector">
@@ -312,28 +320,40 @@
</object>
<statistic name="HostsClaimed">
- <title>Claimed Hosts</title>
+ <title>Claimed hosts</title>
</statistic>
<statistic name="HostsUnclaimed">
- <title>Unclaimed Hosts</title>
+ <title>Unclaimed hosts</title>
</statistic>
<statistic name="HostsOwner">
- <title>Unavailable Hosts</title>
+ <title>Unavailable hosts</title>
</statistic>
<statistic name="HostsTotal">
- <title>Total Hosts</title>
+ <title>Total hosts</title>
</statistic>
<statistic name="MonitorSelfCPUUsage">
- <title>CPU Usage</title>
+ <title>CPU usage</title>
</statistic>
<statistic name="MonitorSelfResidentSetSize">
- <title>Memory Used</title>
+ <title>Memory used</title>
</statistic>
+
+ <statistic name="MonitorSelfImageSize">
+ <title>Image size</title>
+ </statistic>
+
+ <statistic name="MonitorSelfRegisteredSocketCount">
+ <title>Registered socket count</title>
+ </statistic>
+
+ <statistic name="MonitorSelfAge">
+ <title>Up-time</title>
+ </statistic>
</class>
<class name="Slot">
@@ -346,11 +366,11 @@
</property>
<property name="GlobalJobId">
- <title>Global Job ID</title>
+ <title>Global job ID</title>
</property>
<property name="AccountingGroup">
- <title>Accounting Group</title>
+ <title>Accounting group</title>
</property>
<property name="Arch">
@@ -358,11 +378,11 @@
</property>
<property name="OpSys">
- <title>Operating System</title>
+ <title>Operating system</title>
</property>
<property name="ConcurrencyLimits">
- <title>Concurrency Limits</title>
+ <title>Concurrency limits</title>
</property>
<property name="Cpus">
@@ -374,12 +394,12 @@
</property>
<statistic name="CondorLoadAvg">
- <title>Condor Load Average</title>
+ <title>Condor load average</title>
<!-- "%2.02f" -->
</statistic>
<statistic name="LoadAvg">
- <title>Load Average</title>
+ <title>Load average</title>
<!-- "%2.02f" -->
</statistic>
</class>
@@ -392,16 +412,40 @@
<class name="Negotiator">
<statistic name="Duration">
- <title>Total Duration</title>
+ <title>Total duration</title>
</statistic>
<statistic name="MonitorSelfCPUUsage">
- <title>CPU Usage</title>
+ <title>CPU usage</title>
</statistic>
<statistic name="MonitorSelfResidentSetSize">
- <title>Memory Used</title>
+ <title>Memory used</title>
</statistic>
+
+ <statistic name="MonitorSelfImageSize">
+ <title>Image size</title>
+ </statistic>
+
+ <statistic name="MonitorSelfRegisteredSocketCount">
+ <title>Registered socket count</title>
+ </statistic>
+
+ <statistic name="CandidateSlots">
+ <title>Candidate slots</title>
+ </statistic>
+
+ <statistic name="Matches">
+ <title>Matched jobs</title>
+ </statistic>
+
+ <statistic name="NumJobsConsidered">
+ <title>Considered jobs</title>
+ </statistic>
+
+ <statistic name="MonitorSelfAge">
+ <title>Up-time</title>
+ </statistic>
</class>
</package>
</model>
13 years, 2 months