diff options
author | Josh Blum | 2013-03-24 23:08:30 -0500 |
---|---|---|
committer | Josh Blum | 2013-03-24 23:08:30 -0500 |
commit | 74b41e15aff63a279d8c1b040d70c7493f104432 (patch) | |
tree | 8fd25e167f47528a7d4155d4627f7e97e3997fb1 /python/gras | |
parent | 979e008dec30fb94aee648fa61d7ca7ede28579d (diff) | |
download | sandhi-74b41e15aff63a279d8c1b040d70c7493f104432.tar.gz sandhi-74b41e15aff63a279d8c1b040d70c7493f104432.tar.bz2 sandhi-74b41e15aff63a279d8c1b040d70c7493f104432.zip |
gras: load/save for chart settings
Diffstat (limited to 'python/gras')
-rw-r--r-- | python/gras/stats/chart_factory.js | 98 | ||||
-rw-r--r-- | python/gras/stats/main.js | 13 |
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); }); } |