TARAXA
Loading...
Searching...
No Matches
jsonrpc_metrics.hpp
Go to the documentation of this file.
1#pragma once
2
4
5namespace taraxa::metrics {
7 public:
8 inline static const std::string group_name = "jsonrpc";
9 JsonRpcMetrics(std::shared_ptr<prometheus::Registry> registry) : MetricsGroup(std::move(registry)) {}
10 const std::vector<double> buckets = {1000, 10000, 100000, 1000000, 10000000};
11
12 ADD_HISTOGRAM_METRIC(setJsonRpcRequestDuration, "request_duration", "RPC request duration", buckets)
13
14 // Extracting methods using string manipulation instead of JSON parsing for speed
15 void report(const std::string &request, const std::string &ip, const std::string &connection,
16 uint64_t request_duration) {
17 std::vector<std::string_view> methods;
18 std::string_view req_view(request);
19 size_t start = 0;
20 std::string_view method_key = "\"method\":";
21 size_t method_pos = req_view.find(method_key, start);
22
23 while (method_pos != std::string_view::npos) {
24 start = method_pos + method_key.size();
25 // Skip whitespace and quotes
26 while (start < req_view.size() && (req_view[start] == ' ' || req_view[start] == '"')) {
27 start++;
28 }
29 size_t end = req_view.find('"', start);
30 if (end != std::string_view::npos) {
31 methods.push_back(req_view.substr(start, end - start));
32 start = end + 1; // move past the closing quote
33 } else {
34 // Handle error: missing closing quote
35 break;
36 }
37 method_pos = req_view.find(method_key, start);
38 }
39
40 // Convert string_view to std::string if needed by setJsonRpcRequestDuration
41 for (const auto &method : methods) {
42 setJsonRpcRequestDuration(request_duration,
43 {{"method", std::string(method)}, {"ip", ip}, {"connection", connection}});
44 }
45 }
46};
47
48} // namespace taraxa::metrics
Definition jsonrpc_metrics.hpp:6
void report(const std::string &request, const std::string &ip, const std::string &connection, uint64_t request_duration)
Definition jsonrpc_metrics.hpp:15
const std::vector< double > buckets
Definition jsonrpc_metrics.hpp:10
JsonRpcMetrics(std::shared_ptr< prometheus::Registry > registry)
Definition jsonrpc_metrics.hpp:9
static const std::string group_name
Definition jsonrpc_metrics.hpp:8
Definition metrics_group.hpp:44
#define ADD_HISTOGRAM_METRIC(method, name, description, buckets)
add method that is setting specific histogram metric.
Definition metrics_group.hpp:21
std::hash for asio::adress
Definition FixedHash.h:483
Definition app_base.hpp:29