zmqrpc.cpp raw

   1  // Copyright (c) 2018-2022 The Limenka 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(std::move(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  }
  71