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