Author: croberts Date: 2011-11-09 21:21:29 +0000 (Wed, 09 Nov 2011) New Revision: 5128
Modified: branches/noflash/cumin/python/cumin/main.py branches/noflash/cumin/python/cumin/stat.py Log: Removing unused code that was used to render the png charts.
Modified: branches/noflash/cumin/python/cumin/main.py =================================================================== --- branches/noflash/cumin/python/cumin/main.py 2011-11-09 20:30:18 UTC (rev 5127) +++ branches/noflash/cumin/python/cumin/main.py 2011-11-09 21:21:29 UTC (rev 5128) @@ -4,8 +4,7 @@
from mint import * from parsley.loggingex import * -from stat import StatChartPage, StatStackedPage, \ - StatFlashPage, FlashFullPage +from stat import StatFlashPage, FlashFullPage from wooly import Application, Session, Page from wooly.pages import ResourcePage from wooly.parameters import IntegerParameter @@ -25,7 +24,6 @@ from sage.qmfoperations import QmfOperations from sage.aviaryoperations import AviaryOperations from wooly import Session -from cumin.stat import PieChartPage from cumin.widgets import AboutPage
strings = StringCatalog(__file__) @@ -182,9 +180,6 @@ self.form_page = CuminFormPage(self, "form.html") self.add_page(self.form_page)
- self.add_page(StatChartPage(self, "stats.png")) - self.add_page(StatStackedPage(self, "stacked.png")) - self.add_page(PieChartPage(self, PieChartPage.PAGE_NAME)) self.add_page(StatFlashPage(self, "chart.json")) self.add_page(FlashFullPage(self, "flashpage.html"))
Modified: branches/noflash/cumin/python/cumin/stat.py =================================================================== --- branches/noflash/cumin/python/cumin/stat.py 2011-11-09 20:30:18 UTC (rev 5127) +++ branches/noflash/cumin/python/cumin/stat.py 2011-11-09 21:21:29 UTC (rev 5128) @@ -14,7 +14,6 @@ from cumin.model import CuminStatistic, SamplesSqlAdapter from cumin.widgets import StateSwitch from wooly.template import WidgetTemplate -from cumin.charts import CuminPieChart, TimeSeriesChart, StackedValueChart from cumin.util import calc_rate, secs, nvl from cumin.OpenFlashChart import Element, Chart
@@ -276,8 +275,7 @@ self.__files[name] = {"time": datetime.now(), "file": file, "cookie": args} return file
-class PieChartPage(Page): - # handles pie.png request +class PieChartPage(object): PAGE_NAME = "pie.png" RAINBOW = "rainbow" GREENS = "greens" @@ -295,51 +293,6 @@ (0,1,0), (.6,1,.6)], "blank": [(1,1,1), (1,1,1), (1,1,1), (1,1,1)]}
- def __init__(self, app, name): - super(PieChartPage, self).__init__(app, name) - - param = IntegerParameter(app, "param") - self.slices = ListParameter(app, "slice", param) - self.add_parameter(self.slices) - - self.color_scheme = Parameter(app, "cs") - self.add_parameter(self.color_scheme) - - self.radius = IntegerParameter(app, "r") - self.add_parameter(self.radius) - - # used to keep all the parameter names and the page name in one class - @classmethod - def get_href(cls, items, scheme, radius): - page = cls.PAGE_NAME - - tokens = ["slice=%d" % x for x in items] - - tokens.append("r=%s" % radius) - - assert scheme in cls.color_schemes.keys() - tokens.append("cs=%s" % scheme) - - src = "%s?%s" % (page, ";".join(tokens)) - return src - - def do_render(self, session): - radius = self.radius.get(session) - - slices = self.slices.get(session) - color_scheme = self.color_scheme.get(session) - colors = self.color_schemes[color_scheme] - - pie = CuminPieChart(radius) - surface = pie.plot_pie(slices, colors) - - writer = Writer() - surface.write_to_png(writer) - return writer.to_string() - - def get_content_type(self, session): - return "image/png" - class StatChartPage(Page): # handles stats.png request def __init__(self, app, name): @@ -465,151 +418,6 @@ max_samples = int(width * 1.5) return max(int(duration / max_samples), 1)
- def render_samples(self, session, recent): - c = {(1,0,0): "red", (0,0,1): "blue", (0,1,0): "green"} - cached_samples, title_xy = self.get_cached_samples(session, recent) - if cached_samples: - rets = dict() - for stat in cached_samples: - ret = dict() - ret["color"] = c[cached_samples[stat][1]] - ret["points"] = cached_samples[stat][0] - ret["xy"] = title_xy[cached_samples[stat][1]] - rets[stat.name] = ret - return str(rets) - - def do_render(self, session): - adapter, stats = self.get_adapter_stats(session) - colors = ((1,0,0), (0,0,1), (0,1,0)) - - recent = None - if len(stats): - recent = adapter.recent() - else: - return - - # mouseover event wants the points returned in a array - if self.samples.get(session): - return self.render_samples(session, recent) - - #if recent: - # cached_png = self.get_cached(session, recent) - # if cached_png: - # return cached_png - - samples = dict() - values = dict() - - width = self.container_width.get(session) - height = self.container_height.get(session) - mode = self.mode.get(session) - duration = self.duration.get(session) - interval = self.get_interval(session, duration, width) - - chart = TimeSeriesChart(width, height, interval=interval) - - if mode == "rate": - #method = None # don't do averaging - method = self.method.get(session) - for stat in stats: - os = adapter.samples(stat, duration, interval, method) - ns = list() - prev = None - - for sample in reversed(os): - if prev is not None: - rate = calc_rate(float(sample[1]), float(prev[1]), - secs(sample[0]), secs(prev[0])) - - ns.insert(0, (sample[0], rate, None)) - - prev = sample - - samples[stat] = ns - else: - method = self.method.get(session) - for stat in stats: - samples[stat] = adapter.samples(stat, duration, interval, method) - - type = self.type.get(session) - if type == "percent": - total_property = self.total_property.get(session) - total = self.get_object_property(session, total_property) - total = total and float(total) or 1.0 - - for stat in stats: - percents = [(x[0], (float(x[1]) / total) * 100.0, x[2]) - for x in samples[stat] if x[1] is not None] - samples[stat] = percents - - # take stddev into account for max and min y values - deviated_values = list() - for stat in stats: - for x in samples[stat]: - d1 = float(nvl(x[1], 0)) - d2 = float(nvl(x[2], 0) / 2) - dv = (d1 + d2, d1 - d2) - deviated_values.append(dv) - - max_value = deviated_values and max(max(deviated_values)) or 1 - min_value = deviated_values and min(min(deviated_values)) or 0 - - # convert from decimal to float to avoid exceptions - max_value = float(max_value) - min_value = float(min_value) - - max_value = round(max_value * 1.1 + 1) - if type == "percent" and max_value > 100: - # since none of our percentage graphs go above 100% - # we limit it here to match the flash graph - max_value = 100 - - if min_value < 0: - min_value = round(min_value * 1.1 - 1) - - chart.x_max = duration - chart.x_min = 0 - chart.y_max = max_value - chart.y_min = min_value - - x_intervals = 8 - x_step = 2 - - if chart.x_max == 600: - x_intervals = 10 - - y_intervals = 6 - y_step = 2 - - if chart.y_max < 3: - y_step = 3 - - chart.plot_x_axis(x_intervals, x_step) - chart.plot_y_axis(y_intervals, y_step) - - points = dict() - for stat, color in zip(stats, colors): - points[stat] = (chart.plot_values(samples[stat], color=color), color) - - for stat, color in zip(stats, colors): - chart.plot_ticks(samples[stat], color=color) - - chart.plot_frame() - chart.plot_interval(interval) - - if mode == "rate": - titles = ["%s / sec" % x.title for x in stats] - else: - titles = ["%s%s" % ((type == "percent") and "Percent " or "", x.short_title and x.short_title or x.title) for x in stats] - - title_xy = chart.plot_legend(titles, colors) - - self.cache_it(session, chart, {'recent': recent, 'samples': points, "title_xy": title_xy}) - - writer = Writer() - chart.write(writer) - return writer.to_string() - class ModifiedAgentIdParameter(StringParameter): def get(self, session): agent = super(ModifiedAgentIdParameter, self).get(session) @@ -1318,140 +1126,6 @@ def chart_factory(self, chart_type): if chart_type == "area": chart_obj = AreaChart(self.app, chart_type, self) - elif chart_type == "stacked": - chart_obj = StackedAreaChart(self.app, chart_type, self) - #chart_obj = StackedChart(self.app, chart_type, self) - elif chart_type == "percent": - chart_obj = PercentAreaChart(self.app, chart_type, self) elif chart_type == "pie": chart_obj = FlashPieChart(self.app, chart_type, self) - return chart_obj - -class PercentAreaChart(AreaChart): - def get_max_min(self, session, stats, samples, time_span, end_seconds_ago): - max_val, min_val = super(PercentAreaChart, self).get_max_min(session, stats, samples, time_span, end_seconds_ago) - - percent = self.page.percent_property.get(session) - total = self.page.get_object_property(session, percent) - total = total and float(total) or 1.0 - - max_val = (max_val / total) * 100.0 - min_val = (min_val / total) * 100.0 - - max_val = round(max_val * 1.1 + 1) - # cap at 100 - max_val = min(max_val, 100.0) - - if min_val < 0: - min_val = round(min_val * 1.1 - 1) - - return max_val, min_val - - def get_vals(self, session, samples, stat, text, duration, end_secs): - tnow = time() - vals = list() - percent = self.page.percent_property.get(session) - total = self.page.get_object_property(session, percent) - - min_dt = tnow - duration - end_secs - for dt, value, dev in samples[stat]: - if value is not None: - if total is None or total == 0.0: - vals.append({"dt": secs(dt), "y": 0.0}) - else: - vals.append({"dt": secs(dt), "y": (float(value) / float(total)) * 100.0}) - if secs(dt) < min_dt: - break - - vals.reverse() - return vals - - def get_line_title(self, stat): - return "Percent %s" % stat.title - -class StatStackedPage(StatChartPage): - # handles stacked.png requests - def do_render(self, session): - adapter, stats = self.get_adapter_stats(session) - - if len(stats): - recent = adapter.recent() - if recent: - cached_png = self.get_cached(session, recent) - if cached_png: - return cached_png - - legend_height = len(stats) * 16 + 16 - - width = self.container_width.get(session) - height = self.container_height.get(session) - chart = StackedValueChart(width, height, legend_height) - - duration = self.duration.get(session) - method = self.method.get(session) - interval = self.get_interval(session, duration, width) - - max_value = 1 - min_value = 999999 - - points = dict() - samples = dict() - collapsed = dict() - values = dict() - for stat in stats: - samples[stat] = adapter.samples(stat, duration, interval, method) - # we sometimes get multiple samples for the same qmf_update_time - for sample in samples[stat]: - collapsed[sample[0]] = sample[1] - - for t in collapsed: - if not t in points: - points[t] = list() - values[t] = 0 - points[t].append(collapsed[t]) - values[t] = values[t] + collapsed[t] - max_value = max(values[t], max_value) - min_value = min(values[t], min_value) - - max_value = round(max_value * 1.1 + 1) - - if min_value < 0: - min_value = round(min_value * 1.1 - 1) - - chart.x_max = duration - chart.x_min = 0 - chart.y_max = max_value - chart.y_min = min_value - - x_intervals = 8 - x_step = 2 - - if chart.x_max == 600: - x_intervals = 10 - - y_intervals = 6 - y_step = 2 - - if chart.y_max < 3: - y_step = 3 - - chart.plot_x_axis(x_intervals, x_step) - chart.plot_y_axis(y_intervals, y_step) - - colors = ((1,0,0), (0,0,1), (0,1,0), (1,0,1), (1,1,0), (0,1,1), (0,0,0)) - - for t in points: - chart.plot_values(t, points[t], colors) - - chart.plot_frame() - - titles = [x.title for x in stats] - - chart.plot_legend(reversed(titles), reversed(colors[:len(titles)])) - - self.cache_it(session, chart, {'recent': recent, 'samples': None, "title_xy": None}) - - writer = Writer() - chart.write(writer) - return writer.to_string()
cumin-developers@lists.fedorahosted.org