rippled
Loading...
Searching...
No Matches
TxMetrics.cpp
1//------------------------------------------------------------------------------
2/*
3 This file is part of rippled: https://github.com/ripple/rippled
4 Copyright (c) 2012, 2020 Ripple Labs Inc.
5
6 Permission to use, copy, modify, and/or distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
9
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*/
18//==============================================================================
19
20#include <xrpld/overlay/detail/TxMetrics.h>
21
22#include <xrpl/protocol/jss.h>
23
24#include <numeric>
25
26namespace ripple {
27
28namespace metrics {
29
30void
31TxMetrics::addMetrics(protocol::MessageType type, std::uint32_t val)
32{
33 auto add = [&](auto& m, std::uint32_t val) {
35 m.addMetrics(val);
36 };
37
38 switch (type)
39 {
40 case protocol::MessageType::mtTRANSACTION:
41 add(tx, val);
42 break;
43 case protocol::MessageType::mtHAVE_TRANSACTIONS:
44 add(haveTx, val);
45 break;
46 case protocol::MessageType::mtGET_LEDGER:
47 add(getLedger, val);
48 break;
49 case protocol::MessageType::mtLEDGER_DATA:
50 add(ledgerData, val);
51 break;
52 case protocol::MessageType::mtTRANSACTIONS:
53 add(transactions, val);
54 break;
55 default:
56 return;
57 }
58}
59
60void
62 std::uint32_t selected,
63 std::uint32_t suppressed,
64 std::uint32_t notenabled)
65{
67 selectedPeers.addMetrics(selected);
68 suppressedPeers.addMetrics(suppressed);
69 notEnabled.addMetrics(notenabled);
70}
71
72void
78
79void
84
85void
91
92void
94{
95 using namespace std::chrono_literals;
96 accum += val;
97 N++;
98 auto const timeElapsed = clock_type::now() - intervalStart;
99 auto const timeElapsedInSecs =
100 std::chrono::duration_cast<std::chrono::seconds>(timeElapsed);
101
102 if (timeElapsedInSecs >= 1s)
103 {
104 auto const avg = accum / (perTimeUnit ? timeElapsedInSecs.count() : N);
105 rollingAvgAggreg.push_back(avg);
106
107 auto const total = std::accumulate(
108 rollingAvgAggreg.begin(), rollingAvgAggreg.end(), 0ull);
109 rollingAvg = total / rollingAvgAggreg.size();
110
112 accum = 0;
113 N = 0;
114 }
115}
116
119{
121
123
124 ret[jss::txr_tx_cnt] = std::to_string(tx.m1.rollingAvg);
125 ret[jss::txr_tx_sz] = std::to_string(tx.m2.rollingAvg);
126
127 ret[jss::txr_have_txs_cnt] = std::to_string(haveTx.m1.rollingAvg);
128 ret[jss::txr_have_txs_sz] = std::to_string(haveTx.m2.rollingAvg);
129
130 ret[jss::txr_get_ledger_cnt] = std::to_string(getLedger.m1.rollingAvg);
131 ret[jss::txr_get_ledger_sz] = std::to_string(getLedger.m2.rollingAvg);
132
133 ret[jss::txr_ledger_data_cnt] = std::to_string(ledgerData.m1.rollingAvg);
134 ret[jss::txr_ledger_data_sz] = std::to_string(ledgerData.m2.rollingAvg);
135
136 ret[jss::txr_transactions_cnt] = std::to_string(transactions.m1.rollingAvg);
137 ret[jss::txr_transactions_sz] = std::to_string(transactions.m2.rollingAvg);
138
139 ret[jss::txr_selected_cnt] = std::to_string(selectedPeers.rollingAvg);
140
141 ret[jss::txr_suppressed_cnt] = std::to_string(suppressedPeers.rollingAvg);
142
143 ret[jss::txr_not_enabled_cnt] = std::to_string(notEnabled.rollingAvg);
144
145 ret[jss::txr_missing_tx_freq] = std::to_string(missingTx.rollingAvg);
146
147 return ret;
148}
149
150} // namespace metrics
151
152} // namespace ripple
T accumulate(T... args)
Represents a JSON value.
Definition json_value.h:149
@ objectValue
object value (collection of name/value pairs).
Definition json_value.h:45
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:25
void addMetrics(std::uint32_t val2)
Add metrics to m2.
Definition TxMetrics.cpp:80
boost::circular_buffer< std::uint64_t > rollingAvgAggreg
Definition TxMetrics.h:56
clock_type::time_point intervalStart
Definition TxMetrics.h:51
void addMetrics(std::uint32_t val)
Add metrics value.
Definition TxMetrics.cpp:93
SingleMetrics suppressedPeers
Definition TxMetrics.h:104
MultipleMetrics haveTx
Definition TxMetrics.h:94
MultipleMetrics transactions
Definition TxMetrics.h:100
MultipleMetrics getLedger
Definition TxMetrics.h:96
void addMetrics(protocol::MessageType type, std::uint32_t val)
Add protocol message metrics.
Definition TxMetrics.cpp:31
SingleMetrics selectedPeers
Definition TxMetrics.h:102
MultipleMetrics ledgerData
Definition TxMetrics.h:98
Json::Value json() const
Get json representation of the metrics.
T to_string(T... args)