Changeset View
Changeset View
Standalone View
Standalone View
src/rpc/avalanche.cpp
Show First 20 Lines • Show All 469 Lines • ▼ Show 20 Lines | RPCHelpMan{ | ||||
"", | "", | ||||
"", | "", | ||||
{{ | {{ | ||||
{RPCResult::Type::NUM, "peerid", "The peer id"}, | {RPCResult::Type::NUM, "peerid", "The peer id"}, | ||||
{RPCResult::Type::STR_HEX, "proof", | {RPCResult::Type::STR_HEX, "proof", | ||||
"The avalanche proof used by this peer"}, | "The avalanche proof used by this peer"}, | ||||
{RPCResult::Type::NUM, "nodecount", | {RPCResult::Type::NUM, "nodecount", | ||||
"The number of nodes for this peer"}, | "The number of nodes for this peer"}, | ||||
{RPCResult::Type::ARR, | { | ||||
RPCResult::Type::ARR, | |||||
"nodes", | "nodes", | ||||
"", | "", | ||||
{ | {{ | ||||
RPCResult::Type::OBJ, | |||||
"", | |||||
"", | |||||
{{ | |||||
{RPCResult::Type::NUM, "nodeid", | {RPCResult::Type::NUM, "nodeid", | ||||
"Node id, as returned by getpeerinfo"}, | "Node id, as returned by getpeerinfo"}, | ||||
{RPCResult::Type::NUM, "activityScore", | |||||
"Activity score of this node"}, | |||||
}}, | }}, | ||||
}}, | }}, | ||||
}, | |||||
}}, | |||||
}}, | }}, | ||||
}, | }, | ||||
RPCExamples{HelpExampleCli("getavalanchepeerinfo", "") + | RPCExamples{HelpExampleCli("getavalanchepeerinfo", "") + | ||||
HelpExampleRpc("getavalanchepeerinfo", "")}, | HelpExampleRpc("getavalanchepeerinfo", "")}, | ||||
} | } | ||||
.Check(request); | .Check(request); | ||||
if (!g_avalanche) { | if (!g_avalanche) { | ||||
throw JSONRPCError(RPC_INTERNAL_ERROR, "Avalanche is not initialized"); | throw JSONRPCError(RPC_INTERNAL_ERROR, "Avalanche is not initialized"); | ||||
} | } | ||||
UniValue ret(UniValue::VARR); | UniValue ret(UniValue::VARR); | ||||
NodeContext &nodeContext = EnsureNodeContext(request.context); | |||||
g_avalanche->withPeerManager([&](const avalanche::PeerManager &pm) { | g_avalanche->withPeerManager([&](const avalanche::PeerManager &pm) { | ||||
pm.forEachPeer([&](const avalanche::Peer &peer) { | pm.forEachPeer([&](const avalanche::Peer &peer) { | ||||
UniValue obj(UniValue::VOBJ); | UniValue obj(UniValue::VOBJ); | ||||
CDataStream serproof(SER_NETWORK, PROTOCOL_VERSION); | CDataStream serproof(SER_NETWORK, PROTOCOL_VERSION); | ||||
serproof << *peer.proof; | serproof << *peer.proof; | ||||
obj.pushKV("peerid", uint64_t(peer.peerid)); | obj.pushKV("peerid", uint64_t(peer.peerid)); | ||||
obj.pushKV("proof", HexStr(serproof)); | obj.pushKV("proof", HexStr(serproof)); | ||||
UniValue nodes(UniValue::VARR); | UniValue nodes(UniValue::VARR); | ||||
pm.forEachNode(peer, [&](const avalanche::Node &n) { | pm.forEachNode(peer, [&](const avalanche::Node &n) { | ||||
nodes.push_back(n.nodeid); | UniValue node(UniValue::VOBJ); | ||||
node.pushKV("nodeid", n.nodeid); | |||||
nodeContext.connman->ForNode(n.nodeid, [&](CNode *pnode) { | |||||
if (pnode->m_avalanche_state) { | |||||
node.pushKV("availabilityScore", | |||||
pnode->m_avalanche_state->statistics | |||||
.getAvailabilityScore()); | |||||
} | |||||
return true; | |||||
}); | |||||
nodes.push_back(node); | |||||
}); | }); | ||||
obj.pushKV("nodecount", uint64_t(peer.node_count)); | obj.pushKV("nodecount", uint64_t(peer.node_count)); | ||||
obj.pushKV("nodes", nodes); | obj.pushKV("nodes", nodes); | ||||
ret.push_back(obj); | ret.push_back(obj); | ||||
}); | }); | ||||
}); | }); | ||||
▲ Show 20 Lines • Show All 149 Lines • Show Last 20 Lines |