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 }