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