Report RPC counts in server_info (#72)

This commit is contained in:
Nathan Nichols
2022-01-05 11:58:17 -06:00
committed by GitHub
parent 2f0b3235ee
commit 41e412302b
13 changed files with 240 additions and 18 deletions

76
src/rpc/Counters.cpp Normal file
View File

@@ -0,0 +1,76 @@
#include <rpc/Counters.h>
namespace RPC
{
void
Counters::initializeCounter(std::string const& method)
{
std::shared_lock lk(mutex_);
if(methodInfo_.count(method) == 0)
{
lk.unlock();
std::unique_lock ulk(mutex_);
// This calls the default constructor for methodInfo of the method.
methodInfo_[method];
}
}
void
Counters::rpcErrored(std::string const& method)
{
initializeCounter(method);
std::shared_lock lk(mutex_);
MethodInfo& counters = methodInfo_[method];
counters.started++;
counters.errored++;
}
void
Counters::rpcComplete(
std::string const& method,
std::chrono::microseconds const& rpcDuration)
{
initializeCounter(method);
std::shared_lock lk(mutex_);
MethodInfo& counters = methodInfo_[method];
counters.started++;
counters.finished++;
counters.duration += rpcDuration.count();
}
void
Counters::rpcForwarded(std::string const& method)
{
initializeCounter(method);
std::shared_lock lk(mutex_);
MethodInfo& counters = methodInfo_[method];
counters.forwarded++;
}
boost::json::object
Counters::report()
{
std::shared_lock lk(mutex_);
boost::json::object obj = {};
for (auto const& [method, info] : methodInfo_)
{
boost::json::object counters = {};
counters["started"] = std::to_string(info.started);
counters["finished"] = std::to_string(info.finished);
counters["errored"] = std::to_string(info.errored);
counters["forwarded"] = std::to_string(info.forwarded);
counters["duration_us"] = std::to_string(info.duration);
obj[method] = std::move(counters);
}
return obj;
}
} // namespace RPC