r4695 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-07 18:28:52 +0000 (Thu, 07 Apr 2011)
New Revision: 4695
Modified:
trunk/cumin/python/cumin/grid/scheduler.py
Log:
Remove unused text stats from the scheduler performance page
Modified: trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.py 2011-04-07 18:06:31 UTC (rev 4694)
+++ trunk/cumin/python/cumin/grid/scheduler.py 2011-04-07 18:28:52 UTC (rev 4695)
@@ -154,16 +154,6 @@
def __init__(self, app, name, scheduler):
super(SchedulerOverviewCycle, self).__init__(app, name)
- stats = StatSet(app, "stats", scheduler)
- stats.attrs = ("JobsStarted", "JobStartRate", "JobsStartedCum",
- "JobsSubmitted", "JobSubmissionRate", "JobsSubmittedCum",
- "JobsCompleted", "JobCompletionRate", "JobsCompletedCum",
- "JobsExited", "JobsExitedCum",
- "ShadowExceptions", "ShadowExceptionsCum",
- "MeanTimeToStart", "MeanTimeToStartCum", "SumTimeToStartCum",
- "MeanRunningTime", "MeanRunningTimeCum", "SumRunningTimeCum")
- self.add_child(stats)
-
charts = WidgetSet(app, "charts")
self.add_child(charts)
13 years
r4694 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-07 18:06:31 +0000 (Thu, 07 Apr 2011)
New Revision: 4694
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Add a footnote to the scheduler stats that shows the WindowedStartWidth
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-04-06 20:40:22 UTC (rev 4693)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-04-07 18:06:31 UTC (rev 4694)
@@ -48,8 +48,11 @@
super(DashboardSummary, self).__init__(app, name)
cls = app.model.com_redhat_grid.Scheduler
- columns = (cls.JobSubmissionRate, cls.JobStartRate, cls.JobCompletionRate)
- stats = DashboardSummaryStats(app, "rates", collector, cls, columns, "Scheduler.Jobs")
+ # tell the DashboardSummaryStats to average this column
+ setattr(cls.MeanTimeToStart, "average", True)
+
+ columns = (cls.JobSubmissionRate, cls.JobStartRate, cls.JobCompletionRate, cls.MeanTimeToStart)
+ stats = FootnoteDashboardSummaryStats(app, "rates", collector, cls, columns, "Scheduler.Jobs")
stats.title = "Job scheduler info"
self.add_child(stats)
@@ -78,7 +81,7 @@
n = MonitorSelfStats(app, "ms_n", collector, cls, "Negotiator performance", frame)
self.add_child(n)
- s = MonitorSelfSchedulerTable(app, "ms_s", collector)
+ s = SchedulerPerformance(app, "ms_s", collector)
self.add_child(s)
def render_title(self, session):
@@ -394,8 +397,18 @@
def get_item_value(self, session, item):
record = self.get_record(session)
- return record[self.get_item_index(item)] or 0
+ value = record[self.get_item_index(item)] or 0
+ # if we want to show an average instead of an aggregate
+ if getattr(item, "average", None):
+ # the count of records is tucked away past the end of the normal fields
+ total = record[len(self.columns)]
+ if total:
+ value = value / total
+ else:
+ value = 0
+ return value
+
def get_item_index(self, item):
return self.sum_columns.index(item.name)
@@ -407,6 +420,21 @@
return record
+class FootnoteDashboardSummaryStats(DashboardSummaryStats):
+ def __init__(self, app, name, collector, cls, columns, title):
+ super(FootnoteDashboardSummaryStats, self).__init__(app, name, collector, cls, columns, title)
+
+ self.footnote_data = DashboardSumData(app, [cls.WindowedStatWidth.name], collector, cls)
+
+ def render_footnote_value(self, session):
+ # get the average WindowedStarWidth for all schedulers
+ data = self.footnote_data.get_record(session)
+ try:
+ value = data[0] / data[1]
+ except:
+ value = 0
+ return value
+
class DashboardPieSummarySet(PieStatSet):
def __init__(self, app, name, collector, cls, columns, title):
super(DashboardPieSummarySet, self).__init__(app, name, collector, title)
@@ -825,14 +853,43 @@
def render_title(self, session, *args):
return "Slots Precessed"
-class MonitorSelfSchedulerTable(Widget):
+
+class MonitorSelfSchedulerTable(ObjectSelector):
+ def __init__(self, app, name, pool, cls, frame):
+ super(MonitorSelfSchedulerTable, self).__init__(app, name, cls)
+
+ self.pool = pool
+ self.add_filter(self.pool, cls.Pool)
+
+ col = ObjectLinkColumn(app, "name", cls.Name, cls._id, frame)
+ self.add_column(col)
+
+ self.add_attribute_column(cls.MonitorSelfAge)
+
+ self.add_attribute_column(cls.JobSubmissionRate)
+ self.add_attribute_column(cls.JobStartRate)
+ self.add_attribute_column(cls.JobCompletionRate)
+
+ stat = MonitorSelfStatColumn(app, cls.MonitorSelfCPUUsage.name, cls.MonitorSelfCPUUsage)
+ self.add_column(stat)
+
+ stat = MonitorSelfStatColumn(app, cls.MonitorSelfImageSize.name, cls.MonitorSelfImageSize)
+ self.add_column(stat)
+
+ self.enable_csv_export(pool)
+
+ def create_table(self, app, name, cls):
+ # avoid the checkboxes
+ return MinimalTable(app, name, cls)
+
+class SchedulerPerformance(Widget):
def __init__(self, app, name, collector):
- super(MonitorSelfSchedulerTable, self).__init__(app, name)
+ super(SchedulerPerformance, self).__init__(app, name)
cls = app.model.com_redhat_grid.Scheduler
frame = "main.grid.scheduler"
- self.table = MonitorSelfTable(app, "current", collector, cls, frame, False)
+ self.table = MonitorSelfSchedulerTable(app, "current", collector, cls, frame)
self.add_child(self.table)
rates = WidgetSet(app, "rate_widgets")
@@ -867,6 +924,17 @@
stats.title = "Aggregate job shadow exceptions stats"
others.add_child(stats)
+ self.footnote_data = DashboardSumData(app, [cls.WindowedStatWidth.name], collector, cls)
+
+ def render_footnote_value(self, session):
+ # get the average WindowedStarWidth for all schedulers
+ data = self.footnote_data.get_record(session)
+ try:
+ value = data[0] / data[1]
+ except:
+ value = 0
+ return value
+
def render_title(self, session):
return "Scheduler performance"
@@ -915,19 +983,19 @@
self.add_column(col)
stat = ObjectTableColumn(app, cls.MonitorSelfAge.name, cls.MonitorSelfAge)
- stat.static_header = True
+ stat.static_header = static
self.add_column(stat)
stat = MonitorSelfStatColumn(app, cls.MonitorSelfRegisteredSocketCount.name, cls.MonitorSelfRegisteredSocketCount)
- stat.static_header = True
+ stat.static_header = static
self.add_column(stat)
stat = MonitorSelfStatColumn(app, cls.MonitorSelfCPUUsage.name, cls.MonitorSelfCPUUsage)
- stat.static_header = True
+ stat.static_header = static
self.add_column(stat)
stat = MonitorSelfStatColumn(app, cls.MonitorSelfImageSize.name, cls.MonitorSelfImageSize)
- stat.static_header = True
+ stat.static_header = static
self.add_column(stat)
self.enable_csv_export(pool)
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-06 20:40:22 UTC (rev 4693)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-07 18:06:31 UTC (rev 4694)
@@ -30,33 +30,35 @@
[MonitorSelfTitle.html]
<h3>{title}</h3>
-[MonitorSelfSchedulerTable.css]
-div.MonitorSelfSchedulerTable {
+[SchedulerPerformance.css]
+div.SchedulerPerformance {
margin-bottom: 3em;
}
-div.MonitorSelfSchedulerTable h2.title {
+div.SchedulerPerformance h2.title {
margin: 1em 0;
padding: 0.5em;
background-color: #E7E7F7;
}
-div.MonitorSelfSchedulerTable ul.WidgetSet {
+div.SchedulerPerformance ul.WidgetSet {
padding: 0;
margin: 0;
list-style: none;
}
-div.MonitorSelfSchedulerTable ul.WidgetSet li {
+div.SchedulerPerformance ul.WidgetSet li {
display: inline;
}
-div.MonitorSelfSchedulerTable div.aggregates {
- margin-top: 2em;
+div.SchedulerPerformance div.footnote {
+ font-style: italic;
+ font-size: 80%;
}
-[MonitorSelfSchedulerTable.html]
+[SchedulerPerformance.html]
<div id="{id}" class="{class}">
<h2 class="title">{title}</h2>
+ <div class="footnote">Average scheduler sampling window is {footnote_value} seconds</div>
<div class="aggregates">
{rate_widgets}
<div style="clear: left;"></div>
@@ -276,3 +278,20 @@
<dt title="{html_title}">{item_title}</dt>
<dd><span>{item_value}</span></dd>
+[FootnoteDashboardSummaryStats.css]
+div.FootnoteDashboardSummaryStats div.footnote {
+ font-style: italic;
+ font-size: 80%;
+}
+
+[FootnoteDashboardSummaryStats.html]
+<div id="{id}" class="{class}">
+ <h3>{title}</h3>
+ <dl>
+ {items}
+ </dl>
+ <div class="footnote">Averaged over a {footnote_value} second sampling window</div>
+ <div class="icons">
+ {export}
+ </div>
+</div>
13 years
r4692 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-06 20:27:47 +0000 (Wed, 06 Apr 2011)
New Revision: 4692
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Move the scheduler aggregates to performance radio button
Add a table to the summary radio button for the scheduler rates
Remove the word summary from the tables on the summary page
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-04-06 19:24:43 UTC (rev 4691)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-04-06 20:27:47 UTC (rev 4692)
@@ -24,9 +24,6 @@
self.collector = collector
- scheduler_stats = DashboardSchedulerStats(app, "s", collector)
- self.add_tab(scheduler_stats)
-
dashboard = DashboardSummary(app, "d", collector)
self.add_tab(dashboard)
@@ -43,38 +40,6 @@
def __init__(self, app, name, collector):
super(DashboardSchedulerStats, self).__init__(app, name)
- rates = WidgetSet(app, "rate_widgets")
- self.add_child(rates)
-
- others = WidgetSet(app, "other_widgets")
- self.add_child(others)
-
- 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"
- rates.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"
- rates.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"
- rates.add_child(stats)
-
- columns = (cls.JobsExited, cls.JobsExitedCum)
- stats = DashboardSummaryStats(app, "exited", collector, cls, columns, "Jobs.Exited")
- stats.title = "Aggregate job exited stats"
- others.add_child(stats)
-
- columns = (cls.ShadowExceptions, cls.ShadowExceptionsCum)
- stats = DashboardSummaryStats(app, "exceptions", collector, cls, columns, "Jobs.Exceptions")
- stats.title = "Aggregate job shadow exceptions stats"
- others.add_child(stats)
-
def render_title(self, session):
return "Scheuler Stats"
@@ -82,12 +47,18 @@
def __init__(self, app, name, collector):
super(DashboardSummary, self).__init__(app, name)
- slot_data = GridSlotsSummary(app, "slots_summary", collector)
- self.add_child(slot_data)
+ cls = app.model.com_redhat_grid.Scheduler
+ columns = (cls.JobSubmissionRate, cls.JobStartRate, cls.JobCompletionRate)
+ stats = DashboardSummaryStats(app, "rates", collector, cls, columns, "Scheduler.Jobs")
+ stats.title = "Job scheduler info"
+ self.add_child(stats)
job_data = DashboardOverviewJobSummary(app, "jobs_summary", collector)
self.add_child(job_data)
+ slot_data = GridSlotsSummary(app, "slots_summary", collector)
+ self.add_child(slot_data)
+
neg_through = NegotiatorJobThroughput(app, "negotiator_throughput", collector)
self.add_child(neg_through)
@@ -495,7 +466,7 @@
self.color_scheme = PieChartPage.GREENS
def render_title(self, session):
- return "Job summary info"
+ return "Job info"
class DashboardCapacitySlotSummary(DashboardPieSummarySet):
PERCENT_COLUMN = "% Memory used"
@@ -608,7 +579,7 @@
self.add_child(self.chart_link)
def render_title(self, session):
- return "Host summary info"
+ return "Host info"
def is_total(self, item):
index = self.attrs.index(item[0].name)
@@ -855,15 +826,47 @@
return "Slots Precessed"
class MonitorSelfSchedulerTable(Widget):
- def __init__(self, app, name, pool):
+ def __init__(self, app, name, collector):
super(MonitorSelfSchedulerTable, self).__init__(app, name)
cls = app.model.com_redhat_grid.Scheduler
frame = "main.grid.scheduler"
- self.table = MonitorSelfTable(app, "current", pool, cls, frame, False)
+ self.table = MonitorSelfTable(app, "current", collector, cls, frame, False)
self.add_child(self.table)
+ rates = WidgetSet(app, "rate_widgets")
+ self.add_child(rates)
+
+ others = WidgetSet(app, "other_widgets")
+ self.add_child(others)
+
+ 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"
+ rates.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"
+ rates.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"
+ rates.add_child(stats)
+
+ columns = (cls.JobsExited, cls.JobsExitedCum)
+ stats = DashboardSummaryStats(app, "exited", collector, cls, columns, "Jobs.Exited")
+ stats.title = "Aggregate job exited stats"
+ others.add_child(stats)
+
+ columns = (cls.ShadowExceptions, cls.ShadowExceptionsCum)
+ stats = DashboardSummaryStats(app, "exceptions", collector, cls, columns, "Jobs.Exceptions")
+ stats.title = "Aggregate job shadow exceptions stats"
+ others.add_child(stats)
+
def render_title(self, session):
return "Scheduler performance"
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-06 19:24:43 UTC (rev 4691)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-06 20:27:47 UTC (rev 4692)
@@ -1,10 +1,7 @@
-[DashboardSummary.css]
-div.DashboardSummary {
- width: 950px;
-}
-
[DashboardSummary.html]
-<div id="{id}" class="{class}">{widgets}</div>
+<div id="{id}" class="{class}">
+ {widgets}
+</div>
<div style="clear:both;"></div>
[DashboardSummary.widget_html]
@@ -43,9 +40,29 @@
background-color: #E7E7F7;
}
+div.MonitorSelfSchedulerTable ul.WidgetSet {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+div.MonitorSelfSchedulerTable ul.WidgetSet li {
+ display: inline;
+}
+
+div.MonitorSelfSchedulerTable div.aggregates {
+ margin-top: 2em;
+}
+
[MonitorSelfSchedulerTable.html]
<div id="{id}" class="{class}">
<h2 class="title">{title}</h2>
+ <div class="aggregates">
+ {rate_widgets}
+ <div style="clear: left;"></div>
+ {other_widgets}
+ <div style="clear: left;"></div>
+ </div>
{table}
</div>
@@ -195,23 +212,19 @@
[NegotiatorJobThroughput.css]
div.NegotiatorJobThroughput {
clear: both;
+ padding-top: 2em;
}
-div.NegotiatorJobThroughput div.timeseries,
-div.NegotiatorJobThroughput div.stats {
- float: right;
+div.NegotiatorJobThroughput div.timeseries {
+ float: left;
}
-div.NegotiatorJobThroughput div.stats {
- margin-right: 5.3em;
-}
-
[NegotiatorJobThroughput.html]
<div class="{class}">
- <div class="timeseries">{timeseries}</div>
<div class="stats">{stats}</div>
+ <div class="timeseries">{timeseries}</div>
+ <div style="clear:both;"></div>
</div>
-<div style="clear:both;"></div>
[MinimalTableHeader.html]
<thead>
@@ -248,25 +261,6 @@
<div id="pngSlotMap">{slot_png}</div>
</div>
-[DashboardSchedulerStats.css]
-div.DashboardSchedulerStats ul.WidgetSet {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-div.DashboardSchedulerStats ul.WidgetSet li {
- display: inline;
-}
-
-[DashboardSchedulerStats.html]
-<div id="{id}" class="{class}">
- {rate_widgets}
- <div style="clear: left;"></div>
- {other_widgets}
-</div>
-<div style="clear:both;"></div>
-
[DashboardSummaryStats.html]
<div id="{id}" class="{class}">
<h3>{title}</h3>
13 years
r4691 - trunk/cumin/model
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-06 19:24:43 +0000 (Wed, 06 Apr 2011)
New Revision: 4691
Modified:
trunk/cumin/model/rosemary.xml
Log:
Translate some scheduler statistics names
Modified: trunk/cumin/model/rosemary.xml
===================================================================
--- trunk/cumin/model/rosemary.xml 2011-04-06 19:10:26 UTC (rev 4690)
+++ trunk/cumin/model/rosemary.xml 2011-04-06 19:24:43 UTC (rev 4691)
@@ -314,6 +314,35 @@
<statistic name="MonitorSelfRegisteredSocketCount">
<title>Registered socket count</title>
</statistic>
+
+ <statistic name="JobsSubmittedCum">"
+ <title>Jobs submitted cumulative</title>
+ </statistic>
+ <statistic name="JobsCompletedCum">
+ <title>Jobs completed cumulative</title>
+ </statistic>
+ <statistic name="JobsExitedCum">
+ <title>Jobs exited cumulative</title>
+ </statistic>
+ <statistic name="ShadowExceptionsCum">
+ <title>Shadow exceptions cumulative</title>
+ </statistic>
+ <statistic name="JobsStartedCum">
+ <title>Jobs started cumulative</title>
+ </statistic>
+ <statistic name="MeanTimeToStartCum">
+ <title>Mean time to start cumulative</title>
+ </statistic>
+ <statistic name="MeanRunningTimeCum">
+ <title>Mean running time cumulative</title>
+ </statistic>
+ <statistic name="SumTimeToStartCum">
+ <title>Sum time to start cumulative</title>
+ </statistic>
+ <statistic name="SumRunningTimeCum">
+ <title>Sum running time cumulative</title>
+ </statistic>
+
</class>
<class name="Collector">
13 years
r4690 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-06 19:10:26 +0000 (Wed, 06 Apr 2011)
New Revision: 4690
Modified:
trunk/cumin/python/cumin/grid/scheduler.py
trunk/cumin/python/cumin/grid/scheduler.strings
Log:
Rename radio button to Performance
Remove the text stats
Put rates in separate graph
Modified: trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.py 2011-04-05 19:44:12 UTC (rev 4689)
+++ trunk/cumin/python/cumin/grid/scheduler.py 2011-04-06 19:10:26 UTC (rev 4690)
@@ -168,18 +168,18 @@
self.add_child(charts)
chart = self.TitledChart(app, "submitted", scheduler)
- chart.title = "Submitted"
- chart.stats = ("JobsSubmitted", "JobSubmissionRate", "JobsSubmittedCum")
+ chart.title = "Submitted/started/completed"
+ chart.stats = ("JobsSubmitted", "JobsStarted", "JobsCompleted")
charts.add_child(chart)
chart = self.TitledChart(app, "started", scheduler)
- chart.title = "Started"
- chart.stats = ("JobsStarted", "JobStartRate", "JobsStartedCum")
+ chart.title = "Rates"
+ chart.stats = ("JobSubmissionRate", "JobStartRate", "JobCompletionRate")
charts.add_child(chart)
chart = self.TitledChart(app, "completed", scheduler)
- chart.title = "Completed"
- chart.stats = ("JobsCompleted", "JobCompletionRate", "JobsCompletedCum")
+ chart.title = "Cumulative"
+ chart.stats = ("JobsSubmittedCum", "JobsStartedCum", "JobsCompletedCum")
charts.add_child(chart)
chart = self.TitledChart(app, "exited", scheduler)
@@ -203,7 +203,7 @@
charts.add_child(chart)
def render_title(self, session):
- return "Job start stats"
+ return "Performance"
class TitledChart(StatFlashChart):
def __init__(self, app, name, scheduler):
Modified: trunk/cumin/python/cumin/grid/scheduler.strings
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.strings 2011-04-05 19:44:12 UTC (rev 4689)
+++ trunk/cumin/python/cumin/grid/scheduler.strings 2011-04-06 19:10:26 UTC (rev 4690)
@@ -14,27 +14,19 @@
</table>
[SchedulerOverviewCycle.css]
-table.SchedulerOverviewCycle ul.WidgetSet {
+div.SchedulerOverviewCycle ul.WidgetSet {
padding: 0;
margin: 0;
list-style: none;
}
-table.SchedulerOverviewCycle ul.WidgetSet li {
+div.SchedulerOverviewCycle ul.WidgetSet li {
display: inline;
+ float: left;
}
[SchedulerOverviewCycle.html]
-<table class="SchedulerOverviewCycle twocol">
- <tbody>
- <tr>
- <td>
- {stats}
- </td>
- <td>
- {charts}
- </td>
- </tr>
- </tbody>
-</table>
-
+<div class="{class}">
+ {charts}
+</div>
+<div style="clear:both;"></div>
13 years
r4689 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-05 19:44:12 +0000 (Tue, 05 Apr 2011)
New Revision: 4689
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/grid/dashboard.strings
Log:
Tweak the layout for the scheduler stats
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-04-05 19:22:50 UTC (rev 4688)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-04-05 19:44:12 UTC (rev 4689)
@@ -39,35 +39,41 @@
def render_title(self, session):
return "Overview"
-class DashboardSchedulerStats(WidgetSet):
+class DashboardSchedulerStats(Widget):
def __init__(self, app, name, collector):
super(DashboardSchedulerStats, self).__init__(app, name)
+ rates = WidgetSet(app, "rate_widgets")
+ self.add_child(rates)
+
+ others = WidgetSet(app, "other_widgets")
+ self.add_child(others)
+
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)
+ rates.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)
+ rates.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)
+ rates.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)
+ others.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)
+ others.add_child(stats)
def render_title(self, session):
return "Scheuler Stats"
Modified: trunk/cumin/python/cumin/grid/dashboard.strings
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-05 19:22:50 UTC (rev 4688)
+++ trunk/cumin/python/cumin/grid/dashboard.strings 2011-04-05 19:44:12 UTC (rev 4689)
@@ -248,13 +248,25 @@
<div id="pngSlotMap">{slot_png}</div>
</div>
+[DashboardSchedulerStats.css]
+div.DashboardSchedulerStats ul.WidgetSet {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+div.DashboardSchedulerStats ul.WidgetSet li {
+ display: inline;
+}
+
[DashboardSchedulerStats.html]
-<div id="{id}" class="{class}">{widgets}</div>
+<div id="{id}" class="{class}">
+ {rate_widgets}
+ <div style="clear: left;"></div>
+ {other_widgets}
+</div>
<div style="clear:both;"></div>
-[DashboardSchedulerStats.widget_html]
-{widget}
-
[DashboardSummaryStats.html]
<div id="{id}" class="{class}">
<h3>{title}</h3>
13 years, 1 month
r4688 - trunk/cumin/model
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-05 19:22:50 +0000 (Tue, 05 Apr 2011)
New Revision: 4688
Modified:
trunk/cumin/model/condor.xml
Log:
Fix description for scheduler JobsStarted
Modified: trunk/cumin/model/condor.xml
===================================================================
--- trunk/cumin/model/condor.xml 2011-04-05 19:21:56 UTC (rev 4687)
+++ trunk/cumin/model/condor.xml 2011-04-05 19:22:50 UTC (rev 4688)
@@ -536,7 +536,7 @@
<statistic name="JobsStartedCum" type="uint32"
desc="Number of jobs started over the lifetime of the Scheduler"/>
<statistic name="JobsStarted" type="uint32"
- desc="Number of jobs started over the lifetime of the Scheduler"/>
+ desc="Number of jobs started over most recent sampling window"/>
<statistic name="JobStartRate" type="double"
desc="Rate of job starts (jobs per second) over the most recent sampling window"/>
<statistic name="MeanTimeToStartCum" type="double" unit="seconds"
13 years, 1 month
r4687 - trunk/cumin/python/cumin/grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-05 19:21:56 +0000 (Tue, 05 Apr 2011)
New Revision: 4687
Modified:
trunk/cumin/python/cumin/grid/scheduler.py
trunk/cumin/python/cumin/grid/scheduler.strings
Log:
Add the new stats and a boat load of charts to scheduler
Modified: trunk/cumin/python/cumin/grid/scheduler.py
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.py 2011-04-05 18:44:20 UTC (rev 4686)
+++ trunk/cumin/python/cumin/grid/scheduler.py 2011-04-05 19:21:56 UTC (rev 4687)
@@ -1,23 +1,16 @@
-from wooly import *
-from wooly.widgets import *
-from wooly.forms import *
-from wooly.resources import *
-from wooly.tables import *
+import logging
-from cumin.objectframe import *
-from cumin.objectselector import *
-from cumin.formats import *
-from cumin.model import *
-from cumin.parameters import *
+from wooly import Widget
+from wooly.util import StringCatalog
+from wooly.widgets import RadioModeSet, WidgetSet
+
from cumin.stat import *
-from cumin.util import *
-from cumin.widgets import *
+from cumin.objectframe import ObjectFrame
+from submitter import SubmitterFrame, SubmitterSelector
+from submission import PoolSubmissionSelector
+from cumin.objectselector import ObjectSelectorTable, ObjectSelector,\
+ ObjectLinkColumn, MonitorSelfStatColumn, ObjectTable
-from daemon import *
-from job import *
-from submitter import *
-from submission import *
-
strings = StringCatalog(__file__)
log = logging.getLogger("cumin.grid.scheduler")
@@ -108,6 +101,16 @@
# avoid the checkboxes
return ObjectTable(app, name, cls)
+class SchedulerOverview(RadioModeSet):
+ def __init__(self, app, name, scheduler):
+ super(SchedulerOverview, self).__init__(app, name)
+
+ self.add_tab(SchedulerOverviewGeneral(app, "general", scheduler))
+ self.add_tab(SchedulerOverviewCycle(app, "cycle", scheduler))
+
+ def render_title(self, session):
+ return "Overview"
+
class SchedulerGeneralStatSet(StatSet):
def __init__(self, app, name, object):
super(SchedulerGeneralStatSet, self).__init__(app, name, object)
@@ -119,9 +122,9 @@
"MonitorSelfImageSize","MonitorSelfRegisteredSocketCount",
"MonitorSelfResidentSetSize","MonitorSelfTime")
-class SchedulerOverview(Widget):
+class SchedulerOverviewGeneral(Widget):
def __init__(self, app, name, scheduler):
- super(SchedulerOverview, self).__init__(app, name)
+ super(SchedulerOverviewGeneral, self).__init__(app, name)
stats = SchedulerGeneralStatSet(app, "general", scheduler)
self.add_child(stats)
@@ -137,7 +140,7 @@
self.add_child(chart)
def render_title(self, session):
- return "Overview"
+ return "General stats"
class UsersChart(StatFlashChart):
def render_title(self, session):
@@ -146,3 +149,68 @@
class JobsChart(StatFlashChart):
def render_title(self, session):
return "Jobs"
+
+class SchedulerOverviewCycle(Widget):
+ def __init__(self, app, name, scheduler):
+ super(SchedulerOverviewCycle, self).__init__(app, name)
+
+ stats = StatSet(app, "stats", scheduler)
+ stats.attrs = ("JobsStarted", "JobStartRate", "JobsStartedCum",
+ "JobsSubmitted", "JobSubmissionRate", "JobsSubmittedCum",
+ "JobsCompleted", "JobCompletionRate", "JobsCompletedCum",
+ "JobsExited", "JobsExitedCum",
+ "ShadowExceptions", "ShadowExceptionsCum",
+ "MeanTimeToStart", "MeanTimeToStartCum", "SumTimeToStartCum",
+ "MeanRunningTime", "MeanRunningTimeCum", "SumRunningTimeCum")
+ self.add_child(stats)
+
+ charts = WidgetSet(app, "charts")
+ self.add_child(charts)
+
+ chart = self.TitledChart(app, "submitted", scheduler)
+ chart.title = "Submitted"
+ chart.stats = ("JobsSubmitted", "JobSubmissionRate", "JobsSubmittedCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "started", scheduler)
+ chart.title = "Started"
+ chart.stats = ("JobsStarted", "JobStartRate", "JobsStartedCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "completed", scheduler)
+ chart.title = "Completed"
+ chart.stats = ("JobsCompleted", "JobCompletionRate", "JobsCompletedCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "exited", scheduler)
+ chart.title = "Exited"
+ chart.stats = ("JobsExited", "JobsExitedCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "exception", scheduler)
+ chart.title = "Shadow exceptions"
+ chart.stats = ("ShadowExceptions", "ShadowExceptionsCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "start_time", scheduler)
+ chart.title = "Mean start times"
+ chart.stats = ("MeanTimeToStart", "MeanTimeToStartCum", "SumTimeToStartCum")
+ charts.add_child(chart)
+
+ chart = self.TitledChart(app, "running_time", scheduler)
+ chart.title = "Mean running times"
+ chart.stats = ("MeanRunningTime", "MeanRunningTimeCum", "SumRunningTimeCum")
+ charts.add_child(chart)
+
+ def render_title(self, session):
+ return "Job start stats"
+
+ class TitledChart(StatFlashChart):
+ def __init__(self, app, name, scheduler):
+ super(SchedulerOverviewCycle.TitledChart, self).__init__(app, name, scheduler)
+
+ self.title = None
+ self.duration.param.default = "3600"
+
+ def render_title(self, session):
+ return self.title
Modified: trunk/cumin/python/cumin/grid/scheduler.strings
===================================================================
--- trunk/cumin/python/cumin/grid/scheduler.strings 2011-04-05 18:44:20 UTC (rev 4686)
+++ trunk/cumin/python/cumin/grid/scheduler.strings 2011-04-05 19:21:56 UTC (rev 4687)
@@ -1,9 +1,8 @@
-[SchedulerOverview.html]
+[SchedulerOverviewGeneral.html]
<table class="twocol">
<tbody>
<tr>
<td>
- <h2>General</h2>
{general}
</td>
<td>
@@ -13,3 +12,29 @@
</tr>
</tbody>
</table>
+
+[SchedulerOverviewCycle.css]
+table.SchedulerOverviewCycle ul.WidgetSet {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+table.SchedulerOverviewCycle ul.WidgetSet li {
+ display: inline;
+}
+
+[SchedulerOverviewCycle.html]
+<table class="SchedulerOverviewCycle twocol">
+ <tbody>
+ <tr>
+ <td>
+ {stats}
+ </td>
+ <td>
+ {charts}
+ </td>
+ </tr>
+ </tbody>
+</table>
+
13 years, 1 month
r4686 - in trunk: cumin/python/cumin mint/python/mint
by tmckay@fedoraproject.org
Author: tmckay
Date: 2011-04-05 18:44:20 +0000 (Tue, 05 Apr 2011)
New Revision: 4686
Modified:
trunk/cumin/python/cumin/main.py
trunk/mint/python/mint/main.py
Log:
Make values for sasl-mech-list case insensitive
BZ692169 (tweak)
Modified: trunk/cumin/python/cumin/main.py
===================================================================
--- trunk/cumin/python/cumin/main.py 2011-04-05 17:56:33 UTC (rev 4685)
+++ trunk/cumin/python/cumin/main.py 2011-04-05 18:44:20 UTC (rev 4686)
@@ -179,7 +179,8 @@
# Late binding. sasl_mech_list is not needed until
# session is started.
- self.session.sasl_mech_list = self.sasl_mech_list
+ if type(self.sasl_mech_list) == str:
+ self.session.sasl_mech_list = self.sasl_mech_list.upper()
self.session.start()
self.server.start()
Modified: trunk/mint/python/mint/main.py
===================================================================
--- trunk/mint/python/mint/main.py 2011-04-05 17:56:33 UTC (rev 4685)
+++ trunk/mint/python/mint/main.py 2011-04-05 18:44:20 UTC (rev 4686)
@@ -62,7 +62,8 @@
# Late binding. sasl_mech_list is not needed until
# session is started.
- self.session.sasl_mech_list = self.sasl_mech_list
+ if type(self.sasl_mech_list) == str:
+ self.session.sasl_mech_list = self.sasl_mech_list.upper()
self.session.start()
if self.expire_enabled:
13 years, 1 month
r4685 - in trunk/cumin/python/cumin: . grid
by eallen@fedoraproject.org
Author: eallen
Date: 2011-04-05 17:56:33 +0000 (Tue, 05 Apr 2011)
New Revision: 4685
Modified:
trunk/cumin/python/cumin/grid/dashboard.py
trunk/cumin/python/cumin/stat.py
Log:
Fix problem with stats. The unit from the schema wasn't properly being used when formatting the value.
Modified: trunk/cumin/python/cumin/grid/dashboard.py
===================================================================
--- trunk/cumin/python/cumin/grid/dashboard.py 2011-04-05 17:36:52 UTC (rev 4684)
+++ trunk/cumin/python/cumin/grid/dashboard.py 2011-04-05 17:56:33 UTC (rev 4685)
@@ -537,6 +537,9 @@
return super(DashboardCapacitySlotSummary, self).get_item_value(session, item)
+ def get_item_unit(self, session, item):
+ return item.unit
+
def render_formatted_value(self, session, item, value):
if item is self.PERCENT_COLUMN:
return "%0.02f%%" % value
Modified: trunk/cumin/python/cumin/stat.py
===================================================================
--- trunk/cumin/python/cumin/stat.py 2011-04-05 17:36:52 UTC (rev 4684)
+++ trunk/cumin/python/cumin/stat.py 2011-04-05 17:56:33 UTC (rev 4685)
@@ -55,6 +55,10 @@
value = self.get_item_value(session, item)
return self.render_formatted_value(session, item, value)
+ def get_item_unit(self, session, item):
+ stat, _ = item
+ return stat.unit
+
def get_item_value(self, session, item):
_, value = item
return value
@@ -70,7 +74,7 @@
return value is not None and fmt_bytes(value * 1024 * 1024) or None
try:
- format = item.unit
+ format = self.get_item_unit(session, item)
if format:
if format == "MiB":
return fmt_mb(value)
13 years, 1 month