zmqrpc.cpp raw
1 // Copyright (c) 2018-present 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 <zmq/zmqrpc.h>
6
7 #include <rpc/server.h>
8 #include <rpc/util.h>
9 #include <univalue.h>
10 #include <zmq/zmqabstractnotifier.h>
11 #include <zmq/zmqnotificationinterface.h>
12
13 #include <list>
14 #include <memory>
15 #include <string>
16 #include <utility>
17 #include <vector>
18
19 class JSONRPCRequest;
20
21 namespace {
22
23 static RPCMethod getzmqnotifications()
24 {
25 return RPCMethod{
26 "getzmqnotifications",
27 "Returns information about the active ZeroMQ notifications.\n",
28 {},
29 RPCResult{
30 RPCResult::Type::ARR, "", "",
31 {
32 {RPCResult::Type::OBJ, "", "",
33 {
34 {RPCResult::Type::STR, "type", "Type of notification"},
35 {RPCResult::Type::STR, "address", "Address of the publisher"},
36 {RPCResult::Type::NUM, "hwm", "Outbound message high water mark"},
37 }},
38 }
39 },
40 RPCExamples{
41 HelpExampleCli("getzmqnotifications", "")
42 + HelpExampleRpc("getzmqnotifications", "")
43 },
44 [](const RPCMethod& self, const JSONRPCRequest& request) -> UniValue
45 {
46 UniValue result(UniValue::VARR);
47 if (g_zmq_notification_interface != nullptr) {
48 for (const auto* n : g_zmq_notification_interface->GetActiveNotifiers()) {
49 UniValue obj(UniValue::VOBJ);
50 obj.pushKV("type", n->GetType());
51 obj.pushKV("address", n->GetAddress());
52 obj.pushKV("hwm", n->GetOutboundMessageHighWaterMark());
53 result.push_back(std::move(obj));
54 }
55 }
56
57 return result;
58 },
59 };
60 }
61
62 const CRPCCommand commands[]{
63 {"zmq", &getzmqnotifications},
64 };
65
66 } // anonymous namespace
67
68 void RegisterZMQRPCCommands(CRPCTable& t)
69 {
70 for (const auto& c : commands) {
71 t.appendCommand(c.name, &c);
72 }
73 }
74