diff --git a/src/app/application_metrics.def b/src/app/application_metrics.def index fb01c6a1..6babf022 100644 --- a/src/app/application_metrics.def +++ b/src/app/application_metrics.def @@ -47,3 +47,5 @@ METRIC_GAUGE_LABELS( METRIC_GAUGE(app_process_start_time, "lean_process_start_time_seconds", "UNIX timestamp of the moment the process started") + +METRIC_GAUGE(connected_peer_count, "TODO_NAME_connected_peer_count", "TODO_HELP") diff --git a/src/loaders/impl/networking_loader.hpp b/src/loaders/impl/networking_loader.hpp index 3f57e900..4e45106b 100644 --- a/src/loaders/impl/networking_loader.hpp +++ b/src/loaders/impl/networking_loader.hpp @@ -37,6 +37,7 @@ namespace lean::loaders { public Loader, public modules::NetworkingLoader { log::Logger logger_; + qtils::SharedRef metrics_; qtils::SharedRef block_tree_; qtils::SharedRef fork_choice_store_; qtils::SharedRef chain_spec_; @@ -58,12 +59,14 @@ namespace lean::loaders { public: NetworkingLoader(std::shared_ptr logsys, std::shared_ptr se_manager, + qtils::SharedRef metrics, qtils::SharedRef block_tree, qtils::SharedRef fork_choice_store, qtils::SharedRef chain_spec, qtils::SharedRef app_config) : Loader(std::move(logsys), std::move(se_manager)), logger_(logsys_->getLogger("Networking", "networking_module")), + metrics_{std::move(metrics)}, block_tree_{std::move(block_tree)}, fork_choice_store_{std::move(fork_choice_store)}, chain_spec_{std::move(chain_spec)}, @@ -81,6 +84,7 @@ namespace lean::loaders { ->getFunctionFromLibrary, modules::NetworkingLoader &, std::shared_ptr, + qtils::SharedRef, qtils::SharedRef, qtils::SharedRef, qtils::SharedRef, @@ -93,6 +97,7 @@ namespace lean::loaders { auto module_internal = (*module_accessor)(*this, logsys_, + metrics_, block_tree_, fork_choice_store_, chain_spec_, diff --git a/src/modules/networking/module.cpp b/src/modules/networking/module.cpp index 6b352118..a9c9eab7 100644 --- a/src/modules/networking/module.cpp +++ b/src/modules/networking/module.cpp @@ -9,15 +9,19 @@ #define MODULE_C_API extern "C" __attribute__((visibility("default"))) #define MODULE_API __attribute__((visibility("default"))) -namespace lean::blockchain { - class BlockTree; -} // namespace lean::blockchain - namespace lean::app { class ChainSpec; class Configuration; } // namespace lean::app +namespace lean::blockchain { + class BlockTree; +} // namespace lean::blockchain + +namespace lean::metrics { + class Metrics; +} // namespace lean::metrics + MODULE_C_API const char *loader_id() { return "NetworkingLoader"; } @@ -34,6 +38,7 @@ static std::shared_ptr module_instance; MODULE_C_API std::weak_ptr query_module_instance( lean::modules::NetworkingLoader &loader, std::shared_ptr logsys, + qtils::SharedRef metrics, qtils::SharedRef block_tree, qtils::SharedRef fork_choice_store, qtils::SharedRef chain_spec, @@ -47,6 +52,7 @@ MODULE_C_API std::weak_ptr query_module_instance( module_instance = lean::modules::NetworkingImpl::create_shared(loader, std::move(logsys), + std::move(metrics), block_tree, fork_choice_store, chain_spec, diff --git a/src/modules/networking/networking.cpp b/src/modules/networking/networking.cpp index 4c3d0561..e1f9e2c8 100644 --- a/src/modules/networking/networking.cpp +++ b/src/modules/networking/networking.cpp @@ -33,6 +33,7 @@ #include "blockchain/block_tree.hpp" #include "blockchain/impl/fc_block_tree.hpp" +#include "metrics/metrics.hpp" #include "modules/networking/block_request_protocol.hpp" #include "modules/networking/ssz_snappy.hpp" #include "modules/networking/status_protocol.hpp" @@ -72,12 +73,14 @@ namespace lean::modules { NetworkingImpl::NetworkingImpl( NetworkingLoader &loader, qtils::SharedRef logging_system, + qtils::SharedRef metrics, qtils::SharedRef block_tree, qtils::SharedRef fork_choice_store, qtils::SharedRef chain_spec, qtils::SharedRef config) : loader_(loader), logger_(logging_system->getLogger("Networking", "networking_module")), + metrics_{std::move(metrics)}, block_tree_{std::move(block_tree)}, fork_choice_store_{std::move(fork_choice_store)}, chain_spec_{std::move(chain_spec)}, @@ -124,6 +127,7 @@ namespace lean::modules { io_context_ = injector->create>(); auto host = injector->create>(); + host_ = host; bool has_enr_listen_address = false; const auto &bootnodes = chain_spec_->getBootnodes(); @@ -253,6 +257,7 @@ namespace lean::modules { if (not self) { return; } + self->updateMetricConnectedPeerCount(); auto peer_id = connection->remotePeer(); self->loader_.dispatch_peer_connected( qtils::toSharedPtr(messages::PeerConnectedMessage{peer_id})); @@ -295,6 +300,7 @@ namespace lean::modules { if (not self) { return; } + self->updateMetricConnectedPeerCount(); self->loader_.dispatch_peer_disconnected( qtils::toSharedPtr(messages::PeerDisconnectedMessage{peer_id})); }; @@ -344,7 +350,8 @@ namespace lean::modules { gossip_blocks_topic_ = gossipSubscribe( "block", [weak_self{weak_from_this()}]( - SignedBlockWithAttestation &&signed_block_with_attestation, std::optional received_from) { + SignedBlockWithAttestation &&signed_block_with_attestation, + std::optional received_from) { auto self = weak_self.lock(); if (not self) { return; @@ -547,4 +554,8 @@ namespace lean::modules { } return slot_hash.slot > block_tree_->lastFinalized().slot; } + + void NetworkingImpl::updateMetricConnectedPeerCount() { + metrics_->connected_peer_count()->set(host_->getConnectedPeerCount()); + } } // namespace lean::modules diff --git a/src/modules/networking/networking.hpp b/src/modules/networking/networking.hpp index 94a71e6a..17506ab7 100644 --- a/src/modules/networking/networking.hpp +++ b/src/modules/networking/networking.hpp @@ -19,6 +19,10 @@ namespace boost::asio { class io_context; } // namespace boost::asio +namespace libp2p::host { + class BasicHost; +} // namespace libp2p::host + namespace libp2p::protocol { class Ping; class Identify; @@ -33,15 +37,19 @@ namespace lean { class ForkChoiceStore; } // namespace lean -namespace lean::blockchain { - class BlockTree; -} // namespace lean::blockchain - namespace lean::app { class ChainSpec; class Configuration; } // namespace lean::app +namespace lean::blockchain { + class BlockTree; +} // namespace lean::blockchain + +namespace lean::metrics { + class Metrics; +} // namespace lean::metrics + namespace lean::modules { class StatusProtocol; class BlockRequestProtocol; @@ -61,6 +69,7 @@ namespace lean::modules { class NetworkingImpl final : public Singleton, public Networking { NetworkingImpl(NetworkingLoader &loader, qtils::SharedRef logging_system, + qtils::SharedRef metrics, qtils::SharedRef block_tree, qtils::SharedRef fork_choice_store, qtils::SharedRef chain_spec, @@ -91,8 +100,11 @@ namespace lean::modules { SignedBlockWithAttestation &&block); bool statusFinalizedIsGood(const BlockIndex &slot_hash); + void updateMetricConnectedPeerCount(); + NetworkingLoader &loader_; log::Logger logger_; + qtils::SharedRef metrics_; qtils::SharedRef block_tree_; qtils::SharedRef fork_choice_store_; qtils::SharedRef chain_spec_; @@ -106,6 +118,7 @@ namespace lean::modules { std::shared_ptr block_request_protocol_; std::shared_ptr gossip_; std::shared_ptr ping_; + std::shared_ptr host_; std::shared_ptr identify_; std::shared_ptr gossip_blocks_topic_; std::shared_ptr gossip_votes_topic_; diff --git a/vcpkg-overlay/leanp2p/portfile.cmake b/vcpkg-overlay/leanp2p/portfile.cmake index 5da83a53..ea5cb3aa 100644 --- a/vcpkg-overlay/leanp2p/portfile.cmake +++ b/vcpkg-overlay/leanp2p/portfile.cmake @@ -2,8 +2,8 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO qdrvm/leanp2p - REF refs/tags/v0.0.4 - SHA512 9ab9ab55b08306198d2bdaf3b80086126b06b2ac04e6f795e22cb1ba7a44f4ae8d8505183622ba91abc1d0c4e65f3148939e5ccdbef7829b5b625a8bf87139fd + REF 3ae885f5b212c6d180b7a66226c812f228b9caf6 + SHA512 dfe5e27020d1ee559c8261ee17ba4fd3bd554b17b0da9b6a419d2b898bb4c4677d2e892fd798607c8afcba02df7f018264a76c2a25f5f3b876b9b8dbed5f4c3a ) vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}") vcpkg_cmake_install()