From 9e9308df1599bd13e808cacc6b3cea5a5c697df3 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Sat, 11 May 2013 19:56:48 -0700 Subject: gras: moved query app to top level --- CMakeLists.txt | 1 + benchmark/.gitignore | 2 + python/gras/CMakeLists.txt | 5 - python/gras/query/CMakeLists.txt | 28 --- python/gras/query/__init__.py | 81 -------- python/gras/query/chart_factory.js | 281 -------------------------- python/gras/query/chart_global_counters.js | 58 ------ python/gras/query/chart_handler_breakdown.js | 39 ---- python/gras/query/chart_overall_throughput.js | 47 ----- python/gras/query/chart_overhead_compare.js | 39 ---- python/gras/query/chart_port_counters.js | 76 ------- python/gras/query/chart_port_downtime.js | 47 ----- python/gras/query/main.css | 167 --------------- python/gras/query/main.html | 54 ----- python/gras/query/main.js | 79 -------- python/gras/query/utils.js | 88 -------- query/CMakeLists.txt | 28 +++ query/__init__.py | 81 ++++++++ query/chart_factory.js | 281 ++++++++++++++++++++++++++ query/chart_global_counters.js | 58 ++++++ query/chart_handler_breakdown.js | 39 ++++ query/chart_overall_throughput.js | 47 +++++ query/chart_overhead_compare.js | 39 ++++ query/chart_port_counters.js | 76 +++++++ query/chart_port_downtime.js | 47 +++++ query/main.css | 167 +++++++++++++++ query/main.html | 54 +++++ query/main.js | 79 ++++++++ query/utils.js | 88 ++++++++ 29 files changed, 1087 insertions(+), 1089 deletions(-) delete mode 100644 python/gras/query/CMakeLists.txt delete mode 100644 python/gras/query/__init__.py delete mode 100644 python/gras/query/chart_factory.js delete mode 100644 python/gras/query/chart_global_counters.js delete mode 100644 python/gras/query/chart_handler_breakdown.js delete mode 100644 python/gras/query/chart_overall_throughput.js delete mode 100644 python/gras/query/chart_overhead_compare.js delete mode 100644 python/gras/query/chart_port_counters.js delete mode 100644 python/gras/query/chart_port_downtime.js delete mode 100644 python/gras/query/main.css delete mode 100644 python/gras/query/main.html delete mode 100644 python/gras/query/main.js delete mode 100644 python/gras/query/utils.js create mode 100644 query/CMakeLists.txt create mode 100644 query/__init__.py create mode 100644 query/chart_factory.js create mode 100644 query/chart_global_counters.js create mode 100644 query/chart_handler_breakdown.js create mode 100644 query/chart_overall_throughput.js create mode 100644 query/chart_overhead_compare.js create mode 100644 query/chart_port_counters.js create mode 100644 query/chart_port_downtime.js create mode 100644 query/main.css create mode 100644 query/main.html create mode 100644 query/main.js create mode 100644 query/utils.js diff --git a/CMakeLists.txt b/CMakeLists.txt index ee09b26..21f1909 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,7 @@ add_subdirectory(lib) add_subdirectory(PMC) add_subdirectory(python/gras) add_subdirectory(tests) +add_subdirectory(query) ######################################################################## # add gnuradio as sub-project diff --git a/benchmark/.gitignore b/benchmark/.gitignore index a74b07a..e9a5d35 100644 --- a/benchmark/.gitignore +++ b/benchmark/.gitignore @@ -1 +1,3 @@ /*.pyc +/*.png +/*.pdf diff --git a/python/gras/CMakeLists.txt b/python/gras/CMakeLists.txt index e91d8df..8171e7f 100644 --- a/python/gras/CMakeLists.txt +++ b/python/gras/CMakeLists.txt @@ -1,8 +1,3 @@ -######################################################################## -# add subdirs -######################################################################## -add_subdirectory(query) - ######################################################################## # Include swig generation macros ######################################################################## diff --git a/python/gras/query/CMakeLists.txt b/python/gras/query/CMakeLists.txt deleted file mode 100644 index f9a855e..0000000 --- a/python/gras/query/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -######################################################################## -# Install rules -######################################################################## -include(GrPython) - -GR_PYTHON_INSTALL( - FILES - __init__.py - DESTINATION ${GR_PYTHON_DIR}/gras/query - COMPONENT ${GRAS_COMP_PYTHON} -) - -INSTALL( - FILES - main.html - main.js - utils.js - chart_factory.js - chart_overhead_compare.js - chart_overall_throughput.js - chart_handler_breakdown.js - chart_port_counters.js - chart_global_counters.js - chart_port_downtime.js - main.css - DESTINATION ${GR_PYTHON_DIR}/gras/query - COMPONENT ${GRAS_COMP_PYTHON} -) diff --git a/python/gras/query/__init__.py b/python/gras/query/__init__.py deleted file mode 100644 index c72222b..0000000 --- a/python/gras/query/__init__.py +++ /dev/null @@ -1,81 +0,0 @@ -import time -import BaseHTTPServer -import urlparse -import json -import os - -__path__ = os.path.abspath(os.path.dirname(__file__)) - -server_registry = dict() - -class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): - - #hide log messages to stdout by default - def log_message(self, format, *args): pass - - def do_HEAD(s): - s.send_response(200) - s.send_header("Content-type", "text/html") - s.end_headers() - - def do_GET(s): - """Respond to a GET request.""" - - #extract the path and set default - o = urlparse.urlparse(s.path) - args = server_registry[s.server] - path = o.path - - #handle json requests - if path.endswith('.json'): - s.send_response(200) - s.send_header("Content-type", "application/json") - s.end_headers() - if path == '/args.json': - arg_strs = dict((str(k), str(v)) for k, v in args.iteritems()) - s.wfile.write(json.dumps(arg_strs)) - else: - #why the fuck does no OS ever patch boost when there is a bug - #https://svn.boost.org/trac/boost/ticket/6785 - #serialize the path args into xml -- but I just wanted json - def xml_from_qs(k, v): - if not isinstance(v, list): v = [v] - return ''.join(['<%s>%s'%(k, v_i, k) for v_i in v]) - query_args = [xml_from_qs(k,v) for k,v in urlparse.parse_qs(o.query).iteritems()] - query_args.append(xml_from_qs('path', path)) - xml_args = xml_from_qs('args', ''.join(query_args)) - s.wfile.write(args['top_block'].query(xml_args)) - return - - #clean up path for filesystem - if path.startswith('/'): path = path[1:] - if not path: path = 'main.html' - target = os.path.join(__path__, path) - - #get files from the local file system - if os.path.exists(target): - s.send_response(200) - if target.endswith('.js'): s.send_header("Content-type", "text/javascript") - elif target.endswith('.css'): s.send_header("Content-type", "text/css") - else: s.send_header("Content-type", "text") - s.end_headers() - s.wfile.write(open(target).read()) - #otherwise not found do 404 - else: - s.send_response(404) - s.send_header("Content-type", "text/html") - s.end_headers() - s.wfile.write("

not found

") - -import select - -class http_server(object): - def __init__(self, args, **kwargs): - server_class = BaseHTTPServer.HTTPServer - self._httpd = server_class(args, MyHandler) - server_registry[self._httpd] = kwargs - - def serve_forever(self): - while True: - try: self._httpd.serve_forever() - except select.error: pass diff --git a/python/gras/query/chart_factory.js b/python/gras/query/chart_factory.js deleted file mode 100644 index 8b9656a..0000000 --- a/python/gras/query/chart_factory.js +++ /dev/null @@ -1,281 +0,0 @@ -/*********************************************************************** - * Some constants - **********************************************************************/ -var GRAS_CHARTS_STD_WIDTH = 250; - -/*********************************************************************** - * 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}, - {key:'port_counters', name:'Port Counters', factory:GrasChartPortCounts}, - {key:'global_counters', name:'Global Counters', factory:GrasChartGlobalCounts}, - {key:'port_downtime', name:'Port downtime', factory:GrasChartPortDowntime}, - ]; -} - -/*********************************************************************** - * get blocks that need active querying - **********************************************************************/ -function gras_chart_factory_active_blocks(registry) -{ - var block_ids = new Array(); - $.each(registry.active_charts, function(index, chart_info) - { - $.merge(block_ids, chart_info.args.block_ids); - }); - return $.unique(block_ids); -} - -/*********************************************************************** - * update after new query event - **********************************************************************/ -function gras_chart_factory_update(registry, point) -{ - registry.point = point; //store last data point - $.each(registry.active_charts, function(index, chart_info) - { - chart_info.chart.update(point); - }); -} - -/*********************************************************************** - * chart factory input handler - **********************************************************************/ -function gras_chart_factory_handle_input(registry) -{ - //get a list of the selected blocks - var selected_blocks = new Array(); - $.each($('#chart_designer_blocks input'), function(index, input) - { - var input = $(input); - if (input.is(':checked')) - { - selected_blocks.push(input.attr('name')); - } - }); - - //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({ - chart_args: all_args, - overall_rate: registry.overall_rate, - overall_active: registry.overall_active, - })); -} - -function gras_chart_load(registry) -{ - if (typeof(Storage) === "undefined") return; - var storage = JSON.parse(localStorage.getItem(registry.top_id)); - if (!storage) return; - - //restore misc settings in storage - registry.overall_rate = storage.overall_rate; - registry.overall_active = storage.overall_active; - - //rebuild all charts from args - $.each(storage.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 = $('').attr({class:'chart_container'}); - var tr = $(''); - var td = $(''); - var th_title = $('
'); - tr.append(td); - - //call into the factory - try - { - var chart = new registry.chart_factories[args.chart_type](args, td.get(0)); - } - catch(err) - { - return; - } - - //setup the title - var tr_title = $('
'); - tr_title.append(th_title); - th_title.text(chart.title); - - //register the chart - var chart_info = {chart:chart,args:args,panel:chart_box}; - registry.active_charts.push(chart_info); - $('#charts_panel').append(chart_box); - - //close button - var close_div = $('
').attr({class:'chart_designer_block_close'}); - var close_href = $('').attr({href:'#', class:"ui-dialog-titlebar-close ui-corner-all", role:"button"}); - var close_span = $('').attr({class:"ui-icon ui-icon-closethick"}).text('close'); - close_div.append(close_href); - close_href.append(close_span); - th_title.append(close_div); - $(close_href).click(function() - { - 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); - chart_box.append(tr); - - //implement draggable and resizable from jquery ui - var handle_stop = function(event, ui) - { - args['width'] = chart_box.width(); - args['height'] = chart_box.height(); - args['position'] = chart_box.offset(); - chart.gc_resize = false; - chart.update(registry.point); - gras_chart_save(registry); - }; - - if ('default_width' in chart) chart_box.width(chart.default_width); - chart_box.resizable({stop: handle_stop, create: function(event, ui) - { - if ('width' in args) chart_box.width(args.width); - if ('height' in args) chart_box.height(args.height); - }, - start: function(event, ui) - { - chart.gc_resize = true; - chart.update(registry.point); - }}); - - chart_box.css('position', 'absolute'); - chart_box.draggable({stop: handle_stop, create: function(event, ui) - { - if ('position' in args) chart_box.offset(args.position); - }, cursor: "move"}); - - //set the cursor on the title bar so its obvious - tr_title.hover( - function(){$(this).css('cursor','move'); close_div.show();}, - function(){$(this).css('cursor','auto'); close_div.hide();} - ); - close_div.hide(); -} - -/*********************************************************************** - * chart factory init - **********************************************************************/ -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_handle_input(registry); - }); - - //init the chart selection input - $.each(gras_chart_get_registry(), function(index, options) - { - registry.chart_factories[options.key] = options.factory; - var option = $('