Author: eallen
Date: 2009-07-16 18:21:38 -0400 (Thu, 16 Jul 2009)
New Revision: 3506
Modified:
mgmt/trunk/cumin/python/cumin/stat.py
mgmt/trunk/cumin/python/cumin/stat.strings
mgmt/trunk/cumin/resources/app.js
Log:
Start to support pie charts
Modified: mgmt/trunk/cumin/python/cumin/stat.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/stat.py 2009-07-16 22:21:09 UTC (rev 3505)
+++ mgmt/trunk/cumin/python/cumin/stat.py 2009-07-16 22:21:38 UTC (rev 3506)
@@ -219,6 +219,10 @@
def render_height(self, session, object):
return 120
+class PieFlashChart(StatFlashChart):
+ def render_height(self, session, object):
+ return 200
+
class ImageCache(object):
def __init__(self):
self.__files = dict() # {name: {"time": time_created, "file":
file object, "cookie": (cookie values)}}
@@ -365,6 +369,30 @@
cookie = "|".join((str(x) for x in args))
session.set_cookie("slot_info", cookie)
+class PieChartPage(Page):
+ def __init__(self, app, name):
+ super(PieChartPage, self).__init__(app, name)
+
+ self.class_ = CuminClassParameter(app, "class")
+ self.add_parameter(self.class_)
+
+ self.id = IntegerParameter(app, "id")
+ self.add_parameter(self.id)
+
+ param = Parameter(app, "param")
+ self.add_parameter(param)
+
+ self.stats = ListParameter(app, "stat", param)
+ self.add_parameter(self.stats)
+
+ def get_cache_control(self, session):
+ return "no-cache"
+
+ def get_object(self, session):
+ cls = self.class_.get(session).mint_class
+ id = self.id.get(session)
+ return (cls.get(id),)
+
class StatChartPage(Page):
def __init__(self, app, name):
super(StatChartPage, self).__init__(app, name)
@@ -687,11 +715,59 @@
x_axis.labels = xlbls
return x_axis
-class FlashChart(Widget):
+class FlashPieChart(Widget):
+ def __init__(self, app, name, page):
+ super(FlashPieChart, self).__init__(app, name)
+ self.page = page
+ colors = ['#FF0000', '#0000FF', '#00FF00', '#FF00FF',
'#00FFFF', '#000000', '#666600']
+
+ def create(self, session, object):
+ #stat = self.page.stats.get(session)[0]
+ #action = self.app.model.negotiator.GetStats
+ #group_stats = action.do_invoke(negotiator, 'developer')
+ chart = Chart()
+ chart.title.text = ""
+ chart.bg_colour = "#FFFFFF"
+
+ chart.elements = list()
+ element = Element()
+ element.type = "pie"
+ element.alpha = 0.7
+ element.start_angle = 0
+ element.gradient_fill = True
+ element.radius = 90
+
+ element.animate = list()
+ animation = Element()
+ animation.type = "fade"
+ element.animate.append(animation)
+ animation = Element()
+ animation.type = "bounce"
+ animation.distance = 8
+ element.animate.append(animation)
+
+ element.tip = "#percent# (Click to modify)"
+ element.colours = self.colors
+ element.on_click = "ofc_change_priority"
+ id = self.page.chart_id.get(session)
+ element.on_click_text = "#val#|#label#|%s" % id
+ element.values = [
+ {"value": 2, "label": "fah"},
+ {"value": 4, "label": "Development"},
+ {"value": 7, "label": "Accounting"},
+ {"value": 70, "label": "Rendering"},
+ {"value": 6, "label": "Reporting"},
+ {"value": 9, "label": "Management"}
+ ]
+
+ chart.elements.append(element)
+ return chart.create()
+
+class FlashLineChart(Widget):
colors = ('#FF0000', '#0000FF', '#00FF00', '#FF00FF',
'#FFFF00', '#00FFFF', '#000000')
one_day = 24 * 60 * 60
def __init__(self, app, name, page):
- super(FlashChart, self).__init__(app, name)
+ super(FlashLineChart, self).__init__(app, name)
self.page = page
def pos_to_seconds(self, pos):
@@ -766,12 +842,13 @@
return None
return method
- def create(self, session, object, stats):
+ def create(self, session, object):
# get the page parameters
width = self.page.container_width.get(session)
height = self.page.container_height.get(session)
mode = self.page.mode.get(session)
method = self.page.method.get(session)
+ stats = self.page.get_stats(session)
time_span = self.get_time_span(session)
duration = self.get_duration(session)
@@ -870,7 +947,7 @@
def get_chart(self, session, object, stats, samples, duration, max_value, min_value,
append, end_secs):
return Chart()
-class AreaChart(FlashChart):
+class AreaChart(FlashLineChart):
def __init__(self, app, name, page):
super(AreaChart, self).__init__(app, name, page)
@@ -954,11 +1031,10 @@
width = self.page.container_width.get(session)
dot_size = 1
halo_size = 0
- line_width = 1
+ line_width = 0
if width > 400:
dot_size = 3
halo_size = 1
- line_width = 2
chart = Chart()
chart.id = self.page.chart_id.get(session);
@@ -1104,13 +1180,15 @@
def get_content_type(self, session):
return "text/plain"
+ def get_stats(self, session):
+ return [getattr(cls, x) for x in self.stats.get(session)]
+
def do_render(self, session):
object = self.get_object(session)[0]
cls = self.class_.get(session)
- stats = [getattr(cls, x) for x in self.stats.get(session)]
chart = self.chart_factory(self.chart_type.get(session))
- return chart.create(session, object, stats)
+ return chart.create(session, object)
def chart_factory(self, chart_type):
if chart_type == "area":
@@ -1118,6 +1196,8 @@
elif chart_type == "stacked":
chart_obj = StackedAreaChart(self.app, chart_type, self)
#chart_obj = StackedChart(self.app, chart_type, self)
+ elif chart_type == "pie":
+ chart_obj = FlashPieChart(self.app, chart_type, self)
return chart_obj
Modified: mgmt/trunk/cumin/python/cumin/stat.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/stat.strings 2009-07-16 22:21:09 UTC (rev 3505)
+++ mgmt/trunk/cumin/python/cumin/stat.strings 2009-07-16 22:21:38 UTC (rev 3506)
@@ -296,3 +296,22 @@
}
//]]>
</script>
+
+[PieFlashChart.html]
+<div>
+ <div class="StatValueChart" id="{id}">
+ <h2>{title}</h2>
+ <div id="{id}_chart">
+ </div>
+ </div>
+</div>
+<script type="text/javascript">
+//<![CDATA[
+ var flashversion = swfobject.getFlashPlayerVersion();
+ if (flashversion.major >= 9) {
+ swfobject.embedSWF("resource?name=open-flash-chart.swf",
"{id}_chart", "{width}", "{height}", "9.0.0",
"",
+ {"data-file":"{href}"});
+ }
+//]]>
+</script>
+
Modified: mgmt/trunk/cumin/resources/app.js
===================================================================
--- mgmt/trunk/cumin/resources/app.js 2009-07-16 22:21:09 UTC (rev 3505)
+++ mgmt/trunk/cumin/resources/app.js 2009-07-16 22:21:38 UTC (rev 3506)
@@ -453,4 +453,15 @@
href = branch.marshal();
chart.reload(href, true);
}
+}
+
+function ofc_change_priority() {
+ var args = "(";
+ var sep = "";
+ for (var i=0; i<arguments.length; i++) {
+ args += sep+arguments[i];
+ sep = ", ";
+ }
+ args += ")";
+ alert("change priority " + args);
}
\ No newline at end of file