xrpld
Loading...
Searching...
No Matches
TxMetrics.cpp
1#include <xrpld/overlay/detail/TxMetrics.h>
2
3#include <xrpl/json/json_value.h>
4#include <xrpl/protocol/jss.h>
5
6#include <xrpl.pb.h>
7
8#include <chrono>
9#include <cstdint>
10#include <mutex>
11#include <numeric>
12#include <string>
13
14namespace xrpl::metrics {
15
16void
17TxMetrics::addMetrics(protocol::MessageType type, std::uint32_t val)
18{
19 auto add = [&](auto& m, std::uint32_t val) {
20 std::scoped_lock const lock(mutex);
21 m.addMetrics(val);
22 };
23
24 switch (type)
25 {
26 case protocol::MessageType::mtTRANSACTION:
27 add(tx, val);
28 break;
29 case protocol::MessageType::mtHAVE_TRANSACTIONS:
30 add(haveTx, val);
31 break;
32 case protocol::MessageType::mtGET_LEDGER:
33 add(getLedger, val);
34 break;
35 case protocol::MessageType::mtLEDGER_DATA:
36 add(ledgerData, val);
37 break;
38 case protocol::MessageType::mtTRANSACTIONS:
39 add(transactions, val);
40 break;
41 default:
42 return;
43 }
44}
45
46void
48{
49 std::scoped_lock const lock(mutex);
50 selectedPeers.addMetrics(selected);
51 suppressedPeers.addMetrics(suppressed);
52 notEnabled.addMetrics(notenabled);
53}
54
55void
57{
58 std::scoped_lock const lock(mutex);
59 missingTx.addMetrics(missing);
60}
61
62void
67
68void
70{
71 m1.addMetrics(val1);
72 m2.addMetrics(val2);
73}
74
75void
77{
78 using namespace std::chrono_literals;
79 accum += val;
80 n++;
81 auto const timeElapsed = clock_type::now() - intervalStart;
82 auto const timeElapsedInSecs = std::chrono::duration_cast<std::chrono::seconds>(timeElapsed);
83
84 if (timeElapsedInSecs >= 1s)
85 {
86 auto const avg = accum / (perTimeUnit ? timeElapsedInSecs.count() : n);
87 rollingAvgAggregate.push_back(avg);
88
89 auto const total =
91 rollingAvg = total / rollingAvgAggregate.size();
92
94 accum = 0;
95 n = 0;
96 }
97}
98
101{
102 std::scoped_lock const l(mutex);
103
105
106 ret[jss::txr_tx_cnt] = std::to_string(tx.m1.rollingAvg);
107 ret[jss::txr_tx_sz] = std::to_string(tx.m2.rollingAvg);
108
109 ret[jss::txr_have_txs_cnt] = std::to_string(haveTx.m1.rollingAvg);
110 ret[jss::txr_have_txs_sz] = std::to_string(haveTx.m2.rollingAvg);
111
112 ret[jss::txr_get_ledger_cnt] = std::to_string(getLedger.m1.rollingAvg);
113 ret[jss::txr_get_ledger_sz] = std::to_string(getLedger.m2.rollingAvg);
114
115 ret[jss::txr_ledger_data_cnt] = std::to_string(ledgerData.m1.rollingAvg);
116 ret[jss::txr_ledger_data_sz] = std::to_string(ledgerData.m2.rollingAvg);
117
118 ret[jss::txr_transactions_cnt] = std::to_string(transactions.m1.rollingAvg);
119 ret[jss::txr_transactions_sz] = std::to_string(transactions.m2.rollingAvg);
120
121 ret[jss::txr_selected_cnt] = std::to_string(selectedPeers.rollingAvg);
122
123 ret[jss::txr_suppressed_cnt] = std::to_string(suppressedPeers.rollingAvg);
124
125 ret[jss::txr_not_enabled_cnt] = std::to_string(notEnabled.rollingAvg);
126
127 ret[jss::txr_missing_tx_freq] = std::to_string(missingTx.rollingAvg);
128
129 return ret;
130}
131
132} // namespace xrpl::metrics
T accumulate(T... args)
Represents a JSON value.
Definition json_value.h:130
T duration_cast(T... args)
@ Object
object value (collection of name/value pairs).
Definition json_value.h:26
void addMetrics(std::uint32_t val2)
Add metrics to m2.
Definition TxMetrics.cpp:63
void addMetrics(std::uint32_t val)
Add metrics value.
Definition TxMetrics.cpp:76
boost::circular_buffer< std::uint64_t > rollingAvgAggregate
Definition TxMetrics.h:34
clock_type::time_point intervalStart
Definition TxMetrics.h:29
void addMetrics(protocol::MessageType type, std::uint32_t val)
Add protocol message metrics.
Definition TxMetrics.cpp:17
SingleMetrics suppressedPeers
Definition TxMetrics.h:82
SingleMetrics notEnabled
Definition TxMetrics.h:84
SingleMetrics missingTx
Definition TxMetrics.h:86
MultipleMetrics getLedger
Definition TxMetrics.h:74
MultipleMetrics tx
Definition TxMetrics.h:70
MultipleMetrics transactions
Definition TxMetrics.h:78
MultipleMetrics ledgerData
Definition TxMetrics.h:76
MultipleMetrics haveTx
Definition TxMetrics.h:72
json::Value json() const
Get json representation of the metrics.
SingleMetrics selectedPeers
Definition TxMetrics.h:80
T to_string(T... args)