summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorJosh Blum2013-03-24 23:08:30 -0500
committerJosh Blum2013-03-24 23:08:30 -0500
commit74b41e15aff63a279d8c1b040d70c7493f104432 (patch)
tree8fd25e167f47528a7d4155d4627f7e97e3997fb1 /python
parent979e008dec30fb94aee648fa61d7ca7ede28579d (diff)
downloadsandhi-74b41e15aff63a279d8c1b040d70c7493f104432.tar.gz
sandhi-74b41e15aff63a279d8c1b040d70c7493f104432.tar.bz2
sandhi-74b41e15aff63a279d8c1b040d70c7493f104432.zip
gras: load/save for chart settings
Diffstat (limited to 'python')
-rw-r--r--python/gras/stats/chart_factory.js98
-rw-r--r--python/gras/stats/main.js13
2 files changed, 85 insertions, 26 deletions
diff --git a/python/gras/stats/chart_factory.js b/python/gras/stats/chart_factory.js
index 1c01b24..ac75d30 100644
--- a/python/gras/stats/chart_factory.js
+++ b/python/gras/stats/chart_factory.js
@@ -1,13 +1,27 @@
/***********************************************************************
+ * Chart registry for now chart types
+ **********************************************************************/
+var gras_chart_get_registry = function()
+{
+ return [
+ {key:'overhead_compare', name:'Overhead Compare', factory:GrasChartOverheadCompare},
+ {key:'overall_throughput', name:'Overall Throughput', factory:GrasChartOverallThroughput},
+ {key:'handler_breakdown', name:'Handler Breakdown', factory:GrasChartHandlerBreakdown},
+ ];
+}
+
+/***********************************************************************
* One time setup
**********************************************************************/
-function gras_chart_factory_setup(point)
+function gras_chart_factory_setup(registry, point)
{
var id = $('gras_stats:first', point).attr('id');
+ registry.top_id = id;
$('#top_name').append(' - ' + id);
$('block', point).each(function(index, block)
{
var id = $(block).attr('id');
+ registry.block_ids.push(id);
var container = $('#chart_designer_blocks');
var div = $('<div />');
$(div).append('<label>' + id + '</label>');
@@ -22,9 +36,9 @@ function gras_chart_factory_setup(point)
}
/***********************************************************************
- * chart factory dispatcher
+ * chart factory input handler
**********************************************************************/
-function gras_chart_factory_dispatcher(registry)
+function gras_chart_factory_handle_input(registry)
{
//get a list of the selected blocks
var selected_blocks = new Array();
@@ -40,6 +54,55 @@ function gras_chart_factory_dispatcher(registry)
//get the type of chart to create
var chart_type = $('#chart_type_selector').val();
+ //create args for the factory make
+ var args = {
+ block_ids:selected_blocks,
+ chart_type:chart_type,
+ };
+
+ //call into the factory with args
+ gras_chart_factory_make(registry, args);
+}
+
+/***********************************************************************
+ * save/load to/from local storage
+ **********************************************************************/
+function gras_chart_save(registry)
+{
+ if (typeof(Storage) === "undefined") return;
+ var all_args = new Array();
+ $.each(registry.active_charts, function(index, info)
+ {
+ all_args.push(info.args);
+ });
+ localStorage.setItem(registry.top_id, JSON.stringify(all_args));
+}
+
+function gras_chart_load(registry)
+{
+ if (typeof(Storage) === "undefined") return;
+ var chart_args = JSON.parse(localStorage.getItem(registry.top_id));
+ if (!chart_args) return;
+ $.each(chart_args, function(args_i, args)
+ {
+ //check that the blocks saved in the args actually exist
+ var do_make = true;
+ $.each(args.block_ids, function(block_id_i, block_id)
+ {
+ if ($.inArray(block_id, registry.block_ids) < 0)
+ {
+ do_make = false;
+ }
+ });
+ if (do_make) gras_chart_factory_make(registry, args);
+ });
+}
+
+/***********************************************************************
+ * chart factory make routine
+ **********************************************************************/
+function gras_chart_factory_make(registry, args)
+{
//create containers
var chart_box = $('<table />').attr({class:'chart_container'});
var tr = $('<tr />');
@@ -47,12 +110,10 @@ function gras_chart_factory_dispatcher(registry)
tr.append(td);
//call into the factory
+ args.panel = td.get(0);
try
{
- var chart = new registry.chart_factories[chart_type]({
- block_ids:selected_blocks,
- panel:td.get(0),
- });
+ var chart = new registry.chart_factories[args.chart_type](args);
}
catch(err)
{
@@ -66,7 +127,8 @@ function gras_chart_factory_dispatcher(registry)
th_title.text(chart.title);
//register the chart
- registry.active_charts.push(chart);
+ var chart_info = {chart:chart,args:args};
+ registry.active_charts.push(chart_info);
$('#charts_panel').append(chart_box);
//close button
@@ -78,10 +140,12 @@ function gras_chart_factory_dispatcher(registry)
th_title.append(close_div);
$(close_href).click(function()
{
- var index = $.inArray(chart, registry.active_charts);
+ var index = $.inArray(chart_info, registry.active_charts);
registry.active_charts.splice(index, 1);
chart_box.remove();
+ gras_chart_save(registry);
});
+ gras_chart_save(registry);
//finish gui building
chart_box.append(tr_title);
@@ -93,22 +157,18 @@ function gras_chart_factory_dispatcher(registry)
**********************************************************************/
function gras_chart_factory_init(registry)
{
+ //init registry containers
+ registry.active_charts = new Array();
+ registry.chart_factories = new Array();
+
//install callback for chart factory
$('#chart_factory_button').click(function()
{
- gras_chart_factory_dispatcher(registry);
+ gras_chart_factory_handle_input(registry);
});
- //list of all known chart types
- var chart_options = [
- {key:'overhead_compare', name:'Overhead Compare', factory:GrasChartOverheadCompare},
- {key:'overall_throughput', name:'Overall Throughput', factory:GrasChartOverallThroughput},
- {key:'handler_breakdown', name:'Handler Breakdown', factory:GrasChartHandlerBreakdown},
- ];
-
//init the chart selection input
- registry.chart_factories = new Array();
- $.each(chart_options, function(index, options)
+ $.each(gras_chart_get_registry(), function(index, options)
{
registry.chart_factories[options.key] = options.factory;
var option = $('<option />').attr({value: options.key});
diff --git a/python/gras/stats/main.js b/python/gras/stats/main.js
index 6587dbf..4d9f8c7 100644
--- a/python/gras/stats/main.js
+++ b/python/gras/stats/main.js
@@ -4,12 +4,10 @@
var GrasStatsRegistry = function()
{
this.init = false;
- this.ids = new Array();
- this.enables = new Array();
- this.block_enables = new Array();
this.overall_rate = 2.0;
this.overall_active = true;
- this.active_charts = new Array();
+ this.block_ids = new Array();
+ this.top_id = 'top';
}
/***********************************************************************
@@ -30,12 +28,13 @@ var gras_query_stats = function(registry)
{
if (!registry.init)
{
- gras_chart_factory_setup(xml);
+ gras_chart_factory_setup(registry, xml);
+ try{gras_chart_load(registry);}catch(e){}
registry.init = true;
}
- $.each(registry.active_charts, function(index, chart)
+ $.each(registry.active_charts, function(index, chart_info)
{
- chart.update(xml);
+ chart_info.chart.update(xml);
});
}