memgraph/tools/tests/statsd/mg_statsd_client.cpp
Marko Budiselic d9153921b8 Add distributed Id Cypher function
Reviewers: msantl, vkasljevic, teon.banek, ipaljak

Reviewed By: msantl, teon.banek

Subscribers: pullbot, teon.banek

Differential Revision: https://phabricator.memgraph.io/D1477
2018-09-03 13:04:03 +02:00

64 lines
1.5 KiB
C++

#include "gflags/gflags.h"
#include "glog/logging.h"
#include "communication/rpc/client.hpp"
#include "stats/stats.hpp"
#include "stats/stats_rpc_messages.hpp"
#include "utils/string.hpp"
// TODO (buda): Move this logic to a unit test.
bool parse_input(const std::string &s, std::string &metric_path,
std::vector<std::pair<std::string, std::string>> &tags,
double &value) {
auto words = utils::Split(s, " ");
if (words.size() < 2) {
return false;
}
metric_path = words[0];
try {
value = std::stod(words.back());
} catch (std::exception &e) {
return false;
}
tags.clear();
for (size_t i = 1; i < words.size() - 1; ++i) {
auto tag_value = utils::Split(words[i], "=", 1);
if (tag_value.size() != 2) {
return false;
}
// TODO(mtomic): tags probably need to be escaped before sending to graphite
tags.emplace_back(tag_value[0], tag_value[1]);
}
return true;
}
int main(int argc, char *argv[]) {
gflags::ParseCommandLineFlags(&argc, &argv, true);
LOG(INFO) << "Usage: metric_path tag1=value1 ... tagn=valuen "
"metric_value";
stats::InitStatsLogging();
std::string line;
std::string metric_path;
std::vector<std::pair<std::string, std::string>> tags;
double value;
while (true) {
std::getline(std::cin, line);
if (!parse_input(line, metric_path, tags, value)) {
LOG(ERROR) << "Invalid input";
continue;
}
stats::LogStat(metric_path, value, tags);
}
return 0;
}