aboutsummaryrefslogtreecommitdiff
path: root/statsd/stats.cpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2016-12-05 16:34:37 +0100
committerDennis Brentjes <d.brentjes@gmail.com>2016-12-05 17:16:45 +0100
commitb5688d16b0920aeed3d945fd136a51fe31dfbe24 (patch)
tree7287878892af7dab66b63085859e55d7bc6b9453 /statsd/stats.cpp
parent16c28db384adbe61034eb8a2267cd6a886ffd72f (diff)
downloadcmix-b5688d16b0920aeed3d945fd136a51fe31dfbe24.tar.gz
cmix-b5688d16b0920aeed3d945fd136a51fe31dfbe24.tar.bz2
cmix-b5688d16b0920aeed3d945fd136a51fe31dfbe24.zip
added (untested) statsd for the cmake network.
Diffstat (limited to 'statsd/stats.cpp')
-rw-r--r--statsd/stats.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/statsd/stats.cpp b/statsd/stats.cpp
new file mode 100644
index 0000000..9eeb140
--- /dev/null
+++ b/statsd/stats.cpp
@@ -0,0 +1,49 @@
+#include "stats.hpp"
+
+void Stats::accept_connection(std::unique_ptr<boost::asio::ip::tcp::socket>&& socket) {
+ auto it = connections.emplace(connections.end(), std::move(socket));
+ it->on_done([this, it](){
+ connections.erase(it);
+ });
+ it->async_receive([it, this](cmix_proto::CMixMessage const& message) {
+ handle_message(it, message);
+ });
+}
+
+void Stats::handle_performance(std::list<Receiver>::iterator it, const cmix_proto::Performance& perf) {
+ data[perf.node()][perf.column() + "wall_time"].push_back(std::stol(perf.wall_time()));
+ data[perf.node()][perf.column() + "system_time"].push_back(std::stol(perf.system_time()));
+ data[perf.node()][perf.column() + "user_time"].push_back(std::stol(perf.user_time()));
+
+ it->async_receive([it, this](cmix_proto::CMixMessage const& message) {
+ handle_message(it, message);
+ });
+}
+
+void Stats::handle_message(std::list<Receiver>::iterator it, cmix_proto::CMixMessage message) {
+ switch(message.contents_case()) {
+ case cmix_proto::CMixMessage::ContentsCase::kPerformance: {
+ BOOST_LOG_TRIVIAL(trace) << "Handling performance";
+ handle_performance(it, message.performance());
+ break;
+ }
+ case cmix_proto::CMixMessage::ContentsCase::kBye: {
+ BOOST_LOG_TRIVIAL(trace) << "Handling Bye";
+
+ break;
+ }
+ default: {
+ BOOST_LOG_TRIVIAL(error) << "handle_message: CMixMessage contains unknown contents.";
+ connections.erase(it);
+ }
+ }
+}
+
+Stats::Stats(ListenSettings lsettings)
+: io_service()
+, server(io_service, lsettings, [this](std::unique_ptr<boost::asio::ip::tcp::socket>&& socket){accept_connection(std::move(socket));})
+{}
+
+void Stats::run() {
+ io_service.run();
+}