Skip to content
Bitcoin Roots

v30.3-roots.1 · Commit 2: [PATCH 02/68] feat(runtime): preserve Roots operator controls on Core 30.3

src/stats/rpc_stats.cpp

Before: /dev/null · After: src/stats/rpc_stats.cpp

File metadata
new file mode 100644
index 0000000000000000000000000000000000000000..08c1926726fc4fa8d2bc4f093acb7e4bf0cf18f5

Download original patch · Release notes

Diff rows 1–79 of 79. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

src/stats/rpc_stats.cpp ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Copyright (c) 2016 The Bitcoin Core developers
2
+ // Distributed under the MIT software license, see the accompanying
3
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
+
5
+ #include <rpc/server.h>
6
+ #include <rpc/util.h>
7
+ #include <stats/stats.h>
8
+ #include <util/strencodings.h>
9
+
10
+ #include <stdint.h>
11
+
12
+ #include <univalue.h>
13
+
14
+ static RPCHelpMan getmempoolstats()
15
+ {
16
+ return RPCHelpMan{"getmempoolstats",
17
+ "\nReturns the collected mempool statistics (non-linear non-interpolated samples).\n",
18
+ {},
19
+ RPCResult{
20
+ RPCResult::Type::OBJ, "", "",
21
+ {
22
+ {RPCResult::Type::NUM_TIME, "time_from", "Timestamp, first sample"},
23
+ {RPCResult::Type::NUM_TIME, "time_to", "Timestamp, last sample"},
24
+ {RPCResult::Type::ARR, "samples", "",
25
+ {
26
+ {RPCResult::Type::ARR_FIXED, "", "",
27
+ {
28
+ {RPCResult::Type::NUM, "", "Sample time in seconds (relative to other sample times only)"},
29
+ {RPCResult::Type::NUM, "", "Number of transactions in the memory pool"},
30
+ {RPCResult::Type::NUM, "", "Memory usage by memory pool"},
31
+ {RPCResult::Type::NUM, "", "Minimum fee per kB"},
32
+ }},
33
+ }},
34
+ }},
35
+ RPCExamples{
36
+ HelpExampleCli("getmempoolstats", "")
37
+ + HelpExampleRpc("getmempoolstats", "")
38
+ },
39
+ [&](const RPCHelpMan& self, const JSONRPCRequest& request) -> UniValue
40
+ {
41
+ // get stats from the core stats model
42
+ uint64_t timeFrom = 0;
43
+ uint64_t timeTo = 0;
44
+ mempoolSamples_t samples = CStats::DefaultStats()->mempoolGetValuesInRange(timeFrom, timeTo);
45
+
46
+ // use "flat" json encoding for performance reasons
47
+ UniValue samplesObj(UniValue::VARR);
48
+ for (struct CStatsMempoolSample& sample : samples) {
49
+ UniValue singleSample(UniValue::VARR);
50
+ singleSample.push_back(UniValue((uint64_t)sample.m_time_delta));
51
+ singleSample.push_back(UniValue(sample.m_tx_count));
52
+ singleSample.push_back(UniValue(sample.m_dyn_mem_usage));
53
+ singleSample.push_back(UniValue(sample.m_min_fee_per_k));
54
+ samplesObj.push_back(singleSample);
55
+ }
56
+
57
+ UniValue result(UniValue::VOBJ);
58
+ result.pushKV("time_from", timeFrom);
59
+ result.pushKV("time_to", timeTo);
60
+ result.pushKV("samples", samplesObj);
61
+
62
+ return result;
63
+ },
64
+ };
65
+ }
66
+
67
+ void RegisterStatsRPCCommands(CRPCTable& t)
68
+ {
69
+ // clang-format off
70
+ static const CRPCCommand commands[] =
71
+ { // category actor (function)
72
+ // --------------------- ------------------------
73
+ { "stats", &getmempoolstats, },
74
+ };
75
+ // clang-format on
76
+ for (const auto& c : commands) {
77
+ t.appendCommand(c.name, &c);
78
+ }
79
+ }