xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
overlay
detail
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
14
namespace
xrpl::metrics
{
15
16
void
17
TxMetrics::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
46
void
47
TxMetrics::addMetrics
(
std::uint32_t
selected,
std::uint32_t
suppressed,
std::uint32_t
notenabled)
48
{
49
std::scoped_lock
const
lock(
mutex
);
50
selectedPeers
.addMetrics(selected);
51
suppressedPeers
.addMetrics(suppressed);
52
notEnabled
.addMetrics(notenabled);
53
}
54
55
void
56
TxMetrics::addMetrics
(
std::uint32_t
missing)
57
{
58
std::scoped_lock
const
lock(
mutex
);
59
missingTx
.addMetrics(missing);
60
}
61
62
void
63
MultipleMetrics::addMetrics
(
std::uint32_t
val2)
64
{
65
addMetrics
(1, val2);
66
}
67
68
void
69
MultipleMetrics::addMetrics
(
std::uint32_t
val1,
std::uint32_t
val2)
70
{
71
m1
.addMetrics(val1);
72
m2
.addMetrics(val2);
73
}
74
75
void
76
SingleMetrics::addMetrics
(
std::uint32_t
val)
77
{
78
using namespace
std::chrono_literals;
79
accum
+= val;
80
n
++;
81
auto
const
timeElapsed =
ClockType::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 =
90
std::accumulate
(
rollingAvgAggregate
.begin(),
rollingAvgAggregate
.end(), 0ull);
91
rollingAvg
= total /
rollingAvgAggregate
.size();
92
93
intervalStart
=
ClockType::now
();
94
accum
= 0;
95
n
= 0;
96
}
97
}
98
99
json::Value
100
TxMetrics::json
()
const
101
{
102
std::scoped_lock
const
l(
mutex
);
103
104
json::Value
ret(
json::ValueType::Object
);
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
std::accumulate
T accumulate(T... args)
chrono
json::Value
Represents a JSON value.
Definition
json_value.h:117
cstdint
std::chrono::duration_cast
T duration_cast(T... args)
std::uint32_t
mutex
json::ValueType::Object
@ Object
object value (collection of name/value pairs).
Definition
json_value.h:29
xrpl::metrics
Definition
TxMetrics.cpp:14
std::chrono::steady_clock::now
T now(T... args)
numeric
std::scoped_lock
string
xrpl::metrics::MultipleMetrics::m1
SingleMetrics m1
Definition
TxMetrics.h:57
xrpl::metrics::MultipleMetrics::m2
SingleMetrics m2
Definition
TxMetrics.h:58
xrpl::metrics::MultipleMetrics::addMetrics
void addMetrics(std::uint32_t val2)
Add metrics to m2.
Definition
TxMetrics.cpp:63
xrpl::metrics::SingleMetrics::perTimeUnit
bool perTimeUnit
Definition
TxMetrics.h:37
xrpl::metrics::SingleMetrics::accum
std::uint64_t accum
Definition
TxMetrics.h:34
xrpl::metrics::SingleMetrics::addMetrics
void addMetrics(std::uint32_t val)
Add metrics value.
Definition
TxMetrics.cpp:76
xrpl::metrics::SingleMetrics::rollingAvgAggregate
boost::circular_buffer< std::uint64_t > rollingAvgAggregate
Definition
TxMetrics.h:38
xrpl::metrics::SingleMetrics::rollingAvg
std::uint64_t rollingAvg
Definition
TxMetrics.h:35
xrpl::metrics::SingleMetrics::intervalStart
ClockType::time_point intervalStart
Definition
TxMetrics.h:33
xrpl::metrics::SingleMetrics::n
std::uint32_t n
Definition
TxMetrics.h:36
xrpl::metrics::TxMetrics::addMetrics
void addMetrics(protocol::MessageType type, std::uint32_t val)
Add protocol message metrics.
Definition
TxMetrics.cpp:17
xrpl::metrics::TxMetrics::suppressedPeers
SingleMetrics suppressedPeers
Definition
TxMetrics.h:93
xrpl::metrics::TxMetrics::notEnabled
SingleMetrics notEnabled
Definition
TxMetrics.h:95
xrpl::metrics::TxMetrics::missingTx
SingleMetrics missingTx
Definition
TxMetrics.h:97
xrpl::metrics::TxMetrics::getLedger
MultipleMetrics getLedger
Definition
TxMetrics.h:85
xrpl::metrics::TxMetrics::tx
MultipleMetrics tx
Definition
TxMetrics.h:81
xrpl::metrics::TxMetrics::transactions
MultipleMetrics transactions
Definition
TxMetrics.h:89
xrpl::metrics::TxMetrics::ledgerData
MultipleMetrics ledgerData
Definition
TxMetrics.h:87
xrpl::metrics::TxMetrics::haveTx
MultipleMetrics haveTx
Definition
TxMetrics.h:83
xrpl::metrics::TxMetrics::mutex
std::mutex mutex
Definition
TxMetrics.h:79
xrpl::metrics::TxMetrics::json
json::Value json() const
Get json representation of the metrics.
Definition
TxMetrics.cpp:100
xrpl::metrics::TxMetrics::selectedPeers
SingleMetrics selectedPeers
Definition
TxMetrics.h:91
std::to_string
T to_string(T... args)
Generated by
1.17.0