summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gras_impl/stats.hpp2
-rw-r--r--lib/top_block_stats.cpp1
-rw-r--r--python/gras/stats/CMakeLists.txt1
-rw-r--r--python/gras/stats/chart_factory.js1
-rw-r--r--python/gras/stats/chart_handler_breakdown.js2
-rw-r--r--python/gras/stats/chart_overall_throughput.js2
-rw-r--r--python/gras/stats/chart_overhead_compare.js2
-rw-r--r--python/gras/stats/chart_total_io_counts.js62
-rw-r--r--python/gras/stats/main.css15
-rw-r--r--python/gras/stats/main.html1
-rw-r--r--python/gras/stats/main.js5
11 files changed, 88 insertions, 6 deletions
diff --git a/lib/gras_impl/stats.hpp b/lib/gras_impl/stats.hpp
index b7b4553..3f78b8d 100644
--- a/lib/gras_impl/stats.hpp
+++ b/lib/gras_impl/stats.hpp
@@ -13,6 +13,7 @@ struct BlockStats
{
BlockStats(void)
{
+ init_time = time_now();
start_time = 0;
stop_time = 0;
work_count = 0;
@@ -24,6 +25,7 @@ struct BlockStats
total_time_output = 0;
}
+ time_ticks_t init_time;
time_ticks_t start_time;
time_ticks_t stop_time;
diff --git a/lib/top_block_stats.cpp b/lib/top_block_stats.cpp
index e5fd96d..04fc7ae 100644
--- a/lib/top_block_stats.cpp
+++ b/lib/top_block_stats.cpp
@@ -45,6 +45,7 @@ std::string TopBlock::get_stats(const std::string &)
std::string block_xml;
block_xml += str(boost::format(" <tps>%llu</tps>\n") % time_tps());
block_xml += str(boost::format(" <stats_time>%llu</stats_time>\n") % message.stats_time);
+ block_xml += str(boost::format(" <init_time>%llu</init_time>\n") % stats.init_time);
block_xml += str(boost::format(" <start_time>%llu</start_time>\n") % stats.start_time);
block_xml += str(boost::format(" <stop_time>%llu</stop_time>\n") % stats.stop_time);
block_xml += str(boost::format(" <work_count>%llu</work_count>\n") % stats.work_count);
diff --git a/python/gras/stats/CMakeLists.txt b/python/gras/stats/CMakeLists.txt
index 0b91cee..54502a5 100644
--- a/python/gras/stats/CMakeLists.txt
+++ b/python/gras/stats/CMakeLists.txt
@@ -19,6 +19,7 @@ INSTALL(
chart_overhead_compare.js
chart_overall_throughput.js
chart_handler_breakdown.js
+ chart_total_io_counts.js
main.css
DESTINATION ${GR_PYTHON_DIR}/gras/stats
COMPONENT ${GRAS_COMP_PYTHON}
diff --git a/python/gras/stats/chart_factory.js b/python/gras/stats/chart_factory.js
index ac75d30..e0a7dbb 100644
--- a/python/gras/stats/chart_factory.js
+++ b/python/gras/stats/chart_factory.js
@@ -7,6 +7,7 @@ var gras_chart_get_registry = function()
{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:'total_io_counts', name:'Total IO Counts', factory:GrasChartTotalIoCounts},
];
}
diff --git a/python/gras/stats/chart_handler_breakdown.js b/python/gras/stats/chart_handler_breakdown.js
index cd7e048..8e90fc3 100644
--- a/python/gras/stats/chart_handler_breakdown.js
+++ b/python/gras/stats/chart_handler_breakdown.js
@@ -29,7 +29,7 @@ GrasChartHandlerBreakdown.prototype.update = function(point)
]);
var options = {
- width:$('#page').width()/5,
+ width:GRAS_CHARTS_STD_WIDTH,
chartArea:{left:5,top:0,right:5,bottom:0,width:"100%",height:"100%"},
};
diff --git a/python/gras/stats/chart_overall_throughput.js b/python/gras/stats/chart_overall_throughput.js
index 7e049d2..4947479 100644
--- a/python/gras/stats/chart_overall_throughput.js
+++ b/python/gras/stats/chart_overall_throughput.js
@@ -38,7 +38,7 @@ GrasChartOverallThroughput.prototype.update = function(point)
var chart_data = google.visualization.arrayToDataTable(data_set);
var options = {
- width:$('#page').width()*0.4,
+ width:GRAS_CHARTS_STD_WIDTH*2,
chartArea:{left:0,top:0,right:0,bottom:0,width:"100%",height:"85%"},
legend: {'position': 'bottom'},
};
diff --git a/python/gras/stats/chart_overhead_compare.js b/python/gras/stats/chart_overhead_compare.js
index 37a1350..c373142 100644
--- a/python/gras/stats/chart_overhead_compare.js
+++ b/python/gras/stats/chart_overhead_compare.js
@@ -29,7 +29,7 @@ GrasChartOverheadCompare.prototype.update = function(point)
var data = google.visualization.arrayToDataTable(data_set)
var options = {
- width:$('#page').width()/5,
+ width:GRAS_CHARTS_STD_WIDTH,
chartArea:{left:5,top:0,right:5,bottom:0,width:"100%",height:"100%"},
};
diff --git a/python/gras/stats/chart_total_io_counts.js b/python/gras/stats/chart_total_io_counts.js
new file mode 100644
index 0000000..6280733
--- /dev/null
+++ b/python/gras/stats/chart_total_io_counts.js
@@ -0,0 +1,62 @@
+function GrasChartTotalIoCounts(args)
+{
+ //input checking
+ if (args.block_ids.length != 1) throw gras_error_dialog(
+ "GrasChartTotalIoCounts",
+ "Error making total IO counts chart.\n"+
+ "Specify only one block for this chart."
+ );
+
+ //settings
+ this.block_id = args.block_ids[0];
+ this.div = $('<div />').attr({class:'chart_total_io_counts'});
+ $(args.panel).append(this.div);
+ this.title = "IO Totals - " + this.block_id;
+}
+
+GrasChartTotalIoCounts.prototype.update = function(point)
+{
+ var block_data = $('block[id="' + this.block_id + '"]', point);
+ var ul = $('<ul />');
+ $('ul', this.div).remove(); //clear old lists
+ this.div.append(ul);
+
+ {
+ var init_time = parseInt($('init_time', block_data).text());
+ var stats_time = parseInt($('stats_time', block_data).text());
+ var tps = parseInt($('tps', block_data).text());
+ var duration = (stats_time - init_time)/tps;
+ var li = $('<li />');
+ var strong = $('<strong />').text('Elapsed' + ': ');
+ var span = $('<span />').text(duration.toFixed(2).toString() + ' secs');
+ li.append(strong);
+ li.append(span);
+ ul.append(li);
+ }
+
+ var stuff = [
+ ['Input', 'items', 'items_consumed'],
+ ['Input', 'tags', 'tags_consumed'],
+ ['Input', 'msgs', 'msgs_consumed'],
+ ['Output', 'items', 'items_produced'],
+ ['Output', 'tags', 'tags_produced'],
+ ['Output', 'msgs', 'msgs_produced'],
+ ];
+
+ $.each(stuff, function(contents_i, contents)
+ {
+ var dir = contents[0];
+ var units = contents[1];
+ var key = contents[2];
+ $(key, block_data).each(function(index, elem)
+ {
+ var count = parseInt($(elem).text());
+ var li = $('<li />');
+ var strong = $('<strong />').text(dir + index.toString() + ': ');
+ var span = $('<span />').text(count.toString() + ' ' + units);
+ li.append(strong);
+ li.append(span);
+ if (count > 0) ul.append(li);
+ });
+ });
+}
diff --git a/python/gras/stats/main.css b/python/gras/stats/main.css
index 617a400..b5f62f1 100644
--- a/python/gras/stats/main.css
+++ b/python/gras/stats/main.css
@@ -27,8 +27,17 @@ text-decoration:underline;
#chart_designer_blocks input
{
-margin-right:7px;
-margin-left:3px;
+margin-right:10px;
+margin-left:2px;
+}
+
+.chart_total_io_counts li
+{
+list-style-type:none;
+text-align: left;
+padding: 0px;
+margin: 0px;
+font-size:90%;
}
.chart_container
@@ -39,7 +48,7 @@ float:left;
#page{
padding:10px;
color:inherit;
-/*background-color:#F0FFF0;*/
+background-color:inherit;
}
#page h1{
diff --git a/python/gras/stats/main.html b/python/gras/stats/main.html
index 0dcd1af..eeb221d 100644
--- a/python/gras/stats/main.html
+++ b/python/gras/stats/main.html
@@ -14,6 +14,7 @@
<script type="text/javascript" src="/chart_overhead_compare.js"></script>
<script type="text/javascript" src="/chart_overall_throughput.js"></script>
<script type="text/javascript" src="/chart_handler_breakdown.js"></script>
+ <script type="text/javascript" src="/chart_total_io_counts.js"></script>
<script type="text/javascript" src="/main.js"></script>
<script type="text/javascript">
google.load('visualization', '1.0', {'packages':['corechart']});
diff --git a/python/gras/stats/main.js b/python/gras/stats/main.js
index 4d9f8c7..577f4dc 100644
--- a/python/gras/stats/main.js
+++ b/python/gras/stats/main.js
@@ -1,4 +1,9 @@
/***********************************************************************
+ * Some constants
+ **********************************************************************/
+var GRAS_CHARTS_STD_WIDTH = 250;
+
+/***********************************************************************
* Stats registry data structure
**********************************************************************/
var GrasStatsRegistry = function()