Author: eallen
Date: 2011-04-05 17:36:52 +0000 (Tue, 05 Apr 2011)
New Revision: 4684
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Added aggregates scheduler stats to grid overview
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-04-04 19:17:33 UTC (rev 4683)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-04-05 17:36:52 UTC (rev 4684)
@@ -24,7 +24,10 @@
self.collector = collector
- dashboard = Dashboard(app, "d", collector)
+ scheduler_stats = DashboardSchedulerStats(app, "s", collector)
+ self.add_tab(scheduler_stats)
+
+ dashboard = DashboardSummary(app, "d", collector)
self.add_tab(dashboard)
performance = DashboardPerformance(app, "p", collector)
@@ -36,10 +39,43 @@
def render_title(self, session):
return "Overview"
-class Dashboard(WidgetSet):
+class DashboardSchedulerStats(WidgetSet):
def __init__(self, app, name, collector):
- super(Dashboard, self).__init__(app, name)
+ super(DashboardSchedulerStats, self).__init__(app, name)
+ cls = app.model.com_redhat_grid.Scheduler
+ columns = (cls.JobsSubmitted, cls.JobSubmissionRate, cls.JobsSubmittedCum)
+ stats = DashboardSummaryStats(app, "submitted", collector, cls,
columns, "Jobs.Submitted")
+ stats.title = "Aggregate job submission stats"
+ self.add_child(stats)
+
+ columns = (cls.JobsStarted, cls.JobStartRate, cls.JobsStartedCum)
+ stats = DashboardSummaryStats(app, "started", collector, cls, columns,
"Jobs.Started")
+ stats.title = "Aggregate job started stats"
+ self.add_child(stats)
+
+ columns = (cls.JobsCompleted, cls.JobCompletionRate, cls.JobsCompletedCum)
+ stats = DashboardSummaryStats(app, "completed", collector, cls,
columns, "Jobs.Completed")
+ stats.title = "Aggregate job completion stats"
+ self.add_child(stats)
+
+ columns = (cls.JobsExited, cls.JobsExitedCum)
+ stats = DashboardSummaryStats(app, "exited", collector, cls, columns,
"Jobs.Exited")
+ stats.title = "Aggregate job exited stats"
+ self.add_child(stats)
+
+ columns = (cls.ShadowExceptions, cls.ShadowExceptionsCum)
+ stats = DashboardSummaryStats(app, "exceptions", collector, cls,
columns, "Jobs.Exceptions")
+ stats.title = "Aggregate job shadow exceptions stats"
+ self.add_child(stats)
+
+ def render_title(self, session):
+ return "Scheuler Stats"
+
+class DashboardSummary(WidgetSet):
+ def __init__(self, app, name, collector):
+ super(DashboardSummary, self).__init__(app, name)
+
slot_data = GridSlotsSummary(app, "slots_summary", collector)
self.add_child(slot_data)
@@ -353,13 +389,54 @@
return records[0]
-class DashboardSummarySet(PieStatSet):
+class DashboardSummaryStats(DefinitionSet):
def __init__(self, app, name, collector, cls, columns, title):
- super(DashboardSummarySet, self).__init__(app, name, collector, title)
+ super(DashboardSummaryStats, self).__init__(app, name, collector, title)
self.record = Attribute(app, "totals")
self.add_attribute(self.record)
+ self.columns = columns
+ self.sum_columns = [x.name for x in columns]
+ self.sum_cls = cls
+ self.data = DashboardSumData(app, self.sum_columns, collector, self.sum_cls)
+
+ self.title = None
+
+ def render_title(self, session):
+ return self.title
+
+ def do_get_items(self, session):
+ return self.columns
+
+ def render_item_title(self, session, item):
+ return item.title
+
+ def render_html_title(self, session, item):
+ return item.description
+
+ def get_item_value(self, session, item):
+ record = self.get_record(session)
+ return record[self.get_item_index(item)] or 0
+
+ def get_item_index(self, item):
+ return self.sum_columns.index(item.name)
+
+ def get_record(self, session):
+ record = self.record.get(session)
+ if not record:
+ record = self.data.get_record(session)
+ self.record.set(session, record)
+
+ return record
+
+class DashboardPieSummarySet(PieStatSet):
+ def __init__(self, app, name, collector, cls, columns, title):
+ super(DashboardPieSummarySet, self).__init__(app, name, collector, title)
+
+ self.record = Attribute(app, "totals")
+ self.add_attribute(self.record)
+
# XXX - consider using an ObjectSelector with SumSqlColumns as the data source
self.columns = columns
self.sum_columns = [x.name for x in columns]
@@ -401,7 +478,7 @@
return record
-class DashboardOverviewJobSummary(DashboardSummarySet):
+class DashboardOverviewJobSummary(DashboardPieSummarySet):
def __init__(self, app, name, collector):
cls = app.model.com_redhat_grid.Scheduler
columns = [cls.TotalRunningJobs, cls.TotalHeldJobs, cls.TotalIdleJobs,
@@ -414,7 +491,7 @@
def render_title(self, session):
return "Job summary info"
-class DashboardCapacitySlotSummary(DashboardSummarySet):
+class DashboardCapacitySlotSummary(DashboardPieSummarySet):
PERCENT_COLUMN = "% Memory used"
def __init__(self, app, name, collector):
self.cls = app.model.com_redhat_grid.Slot
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-04 19:17:33 UTC (rev 4683)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-05 17:36:52 UTC (rev 4684)
@@ -1,13 +1,13 @@
-[Dashboard.css]
-div.Dashboard {
+[DashboardSummary.css]
+div.DashboardSummary {
width: 950px;
}
-[Dashboard.html]
+[DashboardSummary.html]
<div id="{id}" class="{class}">{widgets}</div>
<div style="clear:both;"></div>
-[Dashboard.widget_html]
+[DashboardSummary.widget_html]
{widget}
[MonitorSelfStats.css]
@@ -247,3 +247,26 @@
<div id="flashSlotMap">{slot_map}</div>
<div id="pngSlotMap">{slot_png}</div>
</div>
+
+[DashboardSchedulerStats.html]
+<div id="{id}" class="{class}">{widgets}</div>
+<div style="clear:both;"></div>
+
+[DashboardSchedulerStats.widget_html]
+{widget}
+
+[DashboardSummaryStats.html]
+<div id="{id}" class="{class}">
+ <h3>{title}</h3>
+ <dl>
+ {items}
+ </dl>
+ <div class="icons">
+ {export}
+ </div>
+</div>
+
+[DashboardSummaryStats.item_html]
+ <dt title="{html_title}">{item_title}</dt>
+ <dd><span>{item_value}</span></dd>
+