Author: eallen Date: 2011-03-03 16:26:02 +0000 (Thu, 03 Mar 2011) New Revision: 4571
Modified: trunk/cumin/python/cumin/grid/dashboard.py trunk/cumin/python/cumin/stat.py Log: Breakdown OS by used vs unused on grid dashboard
Modified: trunk/cumin/python/cumin/grid/dashboard.py =================================================================== --- trunk/cumin/python/cumin/grid/dashboard.py 2011-03-03 15:20:16 UTC (rev 4570) +++ trunk/cumin/python/cumin/grid/dashboard.py 2011-03-03 16:26:02 UTC (rev 4571) @@ -94,10 +94,8 @@ return self.radius * 2
def render_pie_src(self, session): - items = list(self.do_get_items(session)) - if self.has_total and len(items): - del items[len(items)-1] - slices = [self.render_item_value(session, x) for x in items] + items = self.do_get_items(session) + slices = [self.render_item_value(session, x) for x in items if not self.is_total(x)] return PieChartPage.get_href(slices, self.color_scheme, self.radius)
def render_legend_styles(self, session): @@ -112,6 +110,9 @@ cls = super(DefinitionSet, self).render_class(session) return "%s%s" % (cls, self.has_total and " hastotal" or "")
+ def is_total(self, item): + return False + class AliasSqlColumn(object): def __init__(self, identifier, alias): self.identifier = identifier @@ -344,15 +345,19 @@ self.has_total = True self.color_scheme = PieChartPage.BLUES
- def do_get_items(self, session): - return self.columns - def do_process(self, session): record = self.data.get_record(session) self.record.set(session, record)
super(DashboardSummarySet, self).do_process(session)
+ def do_get_items(self, session): + return self.columns + + def is_total(self, item): + index = self.sum_columns.index(item.name) + return index == len(self.sum_columns) - 1 + def render_item_title(self, session, item): return item.title
@@ -361,9 +366,9 @@ return record[self.sum_columns.index(item.name)]
def render_legend_class(self, session, item): + if self.is_total(item): + return "blank" index = self.sum_columns.index(item.name) - if index == len(self.sum_columns) - 1: - return "blank" return "legend%s" % rgb_to_string(*(PieChartPage.color_schemes[self.color_scheme][index]))
class DashboardOverviewJobSummary(DashboardSummarySet): @@ -422,10 +427,14 @@ def render_title(self, session): return "Host Summary Info"
+ def is_total(self, item): + index = self.attrs.index(item[0].name) + return index == len(self.attrs) - 1 + def render_legend_class(self, session, item): + if self.is_total(item): + return "blank" index = self.attrs.index(item[0].name) - if index == len(self.attrs) - 1: - return "blank" return "legend%s" % rgb_to_string(*(PieChartPage.color_schemes[self.color_scheme][index]))
class DashboardOSData(ObjectSqlAdapter): @@ -437,11 +446,13 @@
self.sum_column = ""OpSys""
- self.columns = list() col = "count(%s)" % self.sum_column self.columns.append(self.sum_column) self.columns.append(col)
+ self.act_state_column = AliasSqlColumn(""Activity"||"State"", "actstate") + self.columns.append(self.act_state_column) + def get_records(self, session): values = dict() obj = self.collector.get(session) @@ -449,15 +460,38 @@
options = SqlQueryOptions() options.sort_column = self.sum_column - options.group_column = self.sum_column + options.group_column = ",".join((self.sum_column, self.act_state_column.identifier))
records = self.get_data(values, options)
+ # accumulate records by os/used|unused manually + recs_by_os = dict() + for record in records: + os, count, act_state = record + if os not in recs_by_os: + recs_by_os[os] = dict() + recs_by_os[os]["total"] = 0 + recs_by_os[os]["used"] = 0 + recs_by_os[os]["unused"] = 0 + recs_by_os[os]["total"] += count + if act_state == "IdleUnclaimed": + recs_by_os[os]["unused"] += count + else: + recs_by_os[os]["used"] += count + + 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"])) return records
def get_sql_options(self, options): return options
+ def get_id_field(self, cls): + return None + class GridOSBreakdown(DefinitionSet): def __init__(self, app, name, collector): super(GridOSBreakdown, self).__init__(app, name, collector) @@ -467,19 +501,25 @@
self.os_data = DashboardOSData(app, collector)
+ self.color_scheme = PieChartPage.GROUP2 + self.has_total = True + + def do_process(self, session): + os_records = self.os_data.get_records(session) + self.os_records.set(session, os_records) + + super(GridOSBreakdown, self).do_process(session) + def render_title(self, session): return "Slot Breakdown by OS"
def do_get_items(self, session): return [(i, x) for i, x in enumerate(self.os_records.get(session))] - return self.os_records.get(session)
- def do_process(self, session): - os_records = self.os_data.get_records(session) - self.os_records.set(session, os_records) + def is_total(self, item): + _, record = item + return "Total" in record[0]
- super(GridOSBreakdown, self).do_process(session) - def render_item_title(self, session, item): _, record = item return record[0] @@ -489,5 +529,8 @@ return record[1]
def render_legend_class(self, session, item): + if self.is_total(item): + return "blank" index, _ = item return "legend%s" % rgb_to_string(*(PieChartPage.color_schemes[self.color_scheme][index])) +
Modified: trunk/cumin/python/cumin/stat.py =================================================================== --- trunk/cumin/python/cumin/stat.py 2011-03-03 15:20:16 UTC (rev 4570) +++ trunk/cumin/python/cumin/stat.py 2011-03-03 16:26:02 UTC (rev 4571) @@ -232,9 +232,16 @@ RAINBOW = "rainbow" GREENS = "greens" BLUES = "blues" + GROUP2 = "group2" 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,1,.3), (0,.5,0)], - "blues": [(0,0,1), (.9,.9,1), (.6,.6,1), (.3,.3,1), (0,0,.5)]} + "blues": [(0,0,1), (.9,.9,1), (.6,.6,1), (.3,.3,1), (0,0,.5)], + "group2": [(1,0,0), (1,.6,.6), + (0,1,0), (.6,1,.6), + (0,0,1), (.6,.6,1), + (1,1,0), (1,1,.6), + (1,0,1), (1,.6,1), + (0,1,1), (.6,1,1)]}
def __init__(self, app, name): super(PieChartPage, self).__init__(app, name)
cumin-developers@lists.fedorahosted.org