diff options
author | Josh Blum | 2013-02-13 01:18:31 -0800 |
---|---|---|
committer | Josh Blum | 2013-02-17 20:53:28 -0600 |
commit | 67e0e06f155f4a2eeecafabd4c63b840b41b0709 (patch) | |
tree | 126978cbb26297286153c492ff2f5e9d6c5fe8f8 /lib/top_block.cpp | |
parent | 9191fbce9f4d161e4f871231469ef009c86f177f (diff) | |
download | sandhi-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.cpp | 36 |
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) |