summaryrefslogtreecommitdiff
path: root/lib/top_block.cpp
diff options
context:
space:
mode:
authorJosh Blum2013-02-13 01:18:31 -0800
committerJosh Blum2013-02-17 20:53:28 -0600
commit67e0e06f155f4a2eeecafabd4c63b840b41b0709 (patch)
tree126978cbb26297286153c492ff2f5e9d6c5fe8f8 /lib/top_block.cpp
parent9191fbce9f4d161e4f871231469ef009c86f177f (diff)
downloadsandhi-67e0e06f155f4a2eeecafabd4c63b840b41b0709.tar.gz
sandhi-67e0e06f155f4a2eeecafabd4c63b840b41b0709.tar.bz2
sandhi-67e0e06f155f4a2eeecafabd4c63b840b41b0709.zip
gras: work on stats messages and xml formatting
Diffstat (limited to 'lib/top_block.cpp')
-rw-r--r--lib/top_block.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/top_block.cpp b/lib/top_block.cpp
index 4d2f956..0898e50 100644
--- a/lib/top_block.cpp
+++ b/lib/top_block.cpp
@@ -3,6 +3,8 @@
#include "element_impl.hpp"
#include <gras/top_block.hpp>
#include <boost/thread/thread.hpp> //sleep
+#include <boost/foreach.hpp>
+#include <boost/format.hpp>
using namespace gras;
@@ -137,6 +139,40 @@ bool TopBlock::wait(const double timeout)
return (*this)->token.unique();
}
+///////////////////////// Stats gathering interface ////////////////////////
+
+struct GetStatsReceiver : Theron::Receiver
+{
+ GetStatsReceiver(void)
+ {
+ this->RegisterHandler(this, &GetStatsReceiver::handle_get_stats);
+ }
+
+ void handle_get_stats(const GetStatsMessage &message, const Theron::Address)
+ {
+ this->messages.push_back(message);
+ }
+
+ std::vector<GetStatsMessage> messages;
+};
+
+std::string TopBlock::get_stats_xml(void)
+{
+ GetStatsReceiver receiver;
+ (*this)->executor->post_all(GetStatsMessage(), receiver);
+ std::string xml;
+ BOOST_FOREACH(const GetStatsMessage &message, receiver.messages)
+ {
+ std::string block_xml;
+ block_xml += str(boost::format(" <id>%s</id>\n") % message.block_id);
+ block_xml += str(boost::format(" <tps>%ull</tps>\n") % time_tps());
+ block_xml += str(boost::format(" <start_time>%llu</start_time>\n") % message.stats.start_time);
+ block_xml += str(boost::format(" <stop_time>%llu</stop_time>\n") % message.stats.stop_time);
+ xml += str(boost::format("<block>\n%s</block>\n") % block_xml);
+ }
+ return str(boost::format("<gras_stats>\n%s</gras_stats>") % xml);
+}
+
///////////////////////// Deprecated interfaces ////////////////////////
void TopBlock::start(const size_t max_items)