Index: tools/deep_memory_profiler/graph.py |
diff --git a/tools/deep_memory_profiler/graph.py b/tools/deep_memory_profiler/graph.py |
index 4d5d3fe7cc244dad9229c2f08a647707d13b1046..543aaf90b4afe0d2acaa82844a9e92b1c0bafa83 100755 |
--- a/tools/deep_memory_profiler/graph.py |
+++ b/tools/deep_memory_profiler/graph.py |
@@ -9,60 +9,86 @@ import sys |
from string import Template |
-_HTML_TEMPLATE = """ |
-<html> |
- <head> |
- <script type='text/javascript' src='https://www.google.com/jsapi'></script> |
- <script type='text/javascript'> |
- google.load('visualization', '1', {packages:['corechart', 'table']}); |
- google.setOnLoadCallback(drawVisualization); |
- function drawVisualization() { |
- var data = google.visualization.arrayToDataTable( |
- $JSON_ARRAY |
- ); |
+_HTML_TEMPLATE = """<!DOCTYPE html> |
+<script src="https://www.google.com/jsapi"></script> |
+<script> |
+var all_data = $ALL_DATA; |
+google.load('visualization', '1', {packages:['corechart', 'table']}); |
+google.setOnLoadCallback(drawVisualization); |
+function drawVisualization() { |
+ // Apply policy 'l2' by default. |
+ var default_policy = 'l2'; |
+ document.getElementById(default_policy).style.fontWeight = 'bold'; |
+ turnOn(default_policy); |
+} |
- var charOptions = { |
- title: 'DMP Graph', |
- vAxis: {title: 'Timestamp', titleTextStyle: {color: 'red'}}, |
- isStacked : true |
- }; |
+function turnOn(policy) { |
+ var data = google.visualization.arrayToDataTable(all_data[policy]); |
+ var charOptions = { |
+ title: 'DMP Graph (Policy: ' + policy + ')', |
+ vAxis: {title: 'Timestamp', titleTextStyle: {color: 'red'}}, |
+ isStacked : true |
+ }; |
+ var chart = new google.visualization.AreaChart( |
+ document.getElementById('chart_div')); |
+ chart.draw(data, charOptions); |
+ var table = new google.visualization.Table( |
+ document.getElementById('table_div')); |
+ table.draw(data); |
+} |
- var chart = new google.visualization.BarChart( |
- document.getElementById('chart_div')); |
- chart.draw(data, charOptions); |
- |
- var table = new google.visualization.Table( |
- document.getElementById('table_div')); |
- table.draw(data); |
+window.onload = function() { |
+ var ul = document.getElementById('policies'); |
+ for (var i = 0; i < ul.children.length; ++i) { |
+ var li = ul.children[i]; |
+ li.onclick = function() { |
+ for (var j = 0; j < ul.children.length; ++j) { |
+ var my_li = ul.children[j]; |
+ my_li.style.fontWeight = 'normal'; |
} |
- </script> |
- </head> |
- <body> |
- <div id='chart_div' style="width: 1024px; height: 800px;"></div> |
- <div id='table_div' style="width: 1024px; height: 640px;"></div> |
- </body> |
-</html> |
+ this.style.fontWeight = 'bold'; |
+ turnOn(this.id); |
+ } |
+ } |
+}; |
+</script> |
+<style> |
+#policies li { |
+ display: inline-block; |
+ padding: 5px 10px; |
+} |
+</style> |
+Click to change an applied policy. |
+<ul id="policies">$POLICIES</ul> |
+<div id="chart_div" style="width: 1024px; height: 640px;"></div> |
+<div id="table_div" style="width: 1024px; height: 640px;"></div> |
""" |
-def _GenerateGraph(json_data, policy): |
- legends = list(json_data['policies'][policy]['legends']) |
- legends = ['second'] + legends[legends.index('FROM_HERE_FOR_TOTAL') + 1: |
- legends.index('UNTIL_HERE_FOR_TOTAL')] |
- data = [] |
- for snapshot in json_data['policies'][policy]['snapshots']: |
- data.append([0] * len(legends)) |
- for k, v in snapshot.iteritems(): |
- if k in legends: |
- data[-1][legends.index(k)] = v |
+def _GenerateGraph(json_data): |
+ policies = list(json_data['policies']) |
+ policies = "".join(map(lambda x: '<li id="'+x+'">'+x+'</li>', policies)) |
+ |
+ all_data = {} |
+ for policy in json_data['policies']: |
+ legends = list(json_data['policies'][policy]['legends']) |
+ legends = ['second'] + legends[legends.index('FROM_HERE_FOR_TOTAL') + 1: |
+ legends.index('UNTIL_HERE_FOR_TOTAL')] |
+ data = [] |
+ for snapshot in json_data['policies'][policy]['snapshots']: |
+ data.append([0] * len(legends)) |
+ for k, v in snapshot.iteritems(): |
+ if k in legends: |
+ data[-1][legends.index(k)] = v |
+ all_data[policy] = [legends] + data |
+ |
print Template(_HTML_TEMPLATE).safe_substitute( |
- {'JSON_ARRAY': json.dumps([legends] + data)}) |
+ {'POLICIES': policies, |
+ 'ALL_DATA': json.dumps(all_data)}) |
def main(argv): |
- _GenerateGraph(json.load(file(argv[1], 'r')), argv[2]) |
+ _GenerateGraph(json.load(file(argv[1], 'r'))) |
if __name__ == '__main__': |
sys.exit(main(sys.argv)) |
- |
- |