Skip to content

Commit

Permalink
protocols/gossipsub: Add mesh metrics (#2316)
Browse files Browse the repository at this point in the history
Enable instrumenting mesh through metrics and add gossipsub to
misc/metrics.

Co-authored-by: Max Inden <mail@max-inden.de>
  • Loading branch information
divagant-martian and mxinden committed Nov 16, 2021
1 parent c4f7877 commit 2066a19
Show file tree
Hide file tree
Showing 12 changed files with 529 additions and 27 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ dns-tokio = ["libp2p-dns", "libp2p-dns/tokio"]
floodsub = ["libp2p-floodsub"]
identify = ["libp2p-identify", "libp2p-metrics/identify"]
kad = ["libp2p-kad", "libp2p-metrics/kad"]
gossipsub = ["libp2p-gossipsub"]
gossipsub = ["libp2p-gossipsub", "libp2p-metrics/gossipsub"]
metrics = ["libp2p-metrics"]
mdns = ["libp2p-mdns"]
mplex = ["libp2p-mplex"]
Expand Down
10 changes: 7 additions & 3 deletions misc/metrics/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
## Version 0.2.0 [unreleased]
# 0.2.0 [unreleased]

- Include gossipsub metrics (see [PR 2316]).

- Update dependencies.

## Version 0.1.0 [2021-11-01]
[PR 2316]: https://github.com/libp2p/rust-libp2p/pull/2316

# 0.1.0 [2021-11-01]

- Add initial version.
- Add initial version.
2 changes: 2 additions & 0 deletions misc/metrics/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ keywords = ["peer-to-peer", "libp2p", "networking"]
categories = ["network-programming", "asynchronous"]

[features]
gossipsub = ["libp2p-gossipsub"]
identify = ["libp2p-identify"]
kad = ["libp2p-kad"]
ping = ["libp2p-ping"]

[dependencies]
libp2p-core = { version = "0.30.0", path = "../../core" }
libp2p-gossipsub = { version = "0.34.0", path = "../../protocols/gossipsub", optional = true }
libp2p-identify = { version = "0.32.0", path = "../../protocols/identify", optional = true }
libp2p-kad = { version = "0.33.0", path = "../../protocols/kad", optional = true }
libp2p-ping = { version = "0.32.0", path = "../../protocols/ping", optional = true }
Expand Down
52 changes: 52 additions & 0 deletions misc/metrics/src/gossipsub.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright 2021 Protocol Labs.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.

use open_metrics_client::metrics::counter::Counter;
use open_metrics_client::registry::Registry;

pub struct Metrics {
messages: Counter,
}

impl Metrics {
pub fn new(registry: &mut Registry) -> Self {
let sub_registry = registry.sub_registry_with_prefix("gossipsub");

let messages = Counter::default();
sub_registry.register(
"messages",
"Number of messages received",
Box::new(messages.clone()),
);

Self { messages }
}
}

impl super::Recorder<libp2p_gossipsub::GossipsubEvent> for super::Metrics {
fn record(&self, event: &libp2p_gossipsub::GossipsubEvent) {
match event {
libp2p_gossipsub::GossipsubEvent::Message { .. } => {
self.gossipsub.messages.inc();
}
_ => {}
}
}
}
6 changes: 6 additions & 0 deletions misc/metrics/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
//!
//! See `examples` directory for more.

#[cfg(feature = "gossipsub")]
mod gossipsub;
#[cfg(feature = "identify")]
mod identify;
#[cfg(feature = "kad")]
Expand All @@ -37,6 +39,8 @@ use open_metrics_client::registry::Registry;

/// Set of Swarm and protocol metrics derived from emitted events.
pub struct Metrics {
#[cfg(feature = "gossipsub")]
gossipsub: gossipsub::Metrics,
#[cfg(feature = "identify")]
identify: identify::Metrics,
#[cfg(feature = "kad")]
Expand All @@ -58,6 +62,8 @@ impl Metrics {
pub fn new(registry: &mut Registry) -> Self {
let sub_registry = registry.sub_registry_with_prefix("libp2p");
Self {
#[cfg(feature = "gossipsub")]
gossipsub: gossipsub::Metrics::new(sub_registry),
#[cfg(feature = "identify")]
identify: identify::Metrics::new(sub_registry),
#[cfg(feature = "kad")]
Expand Down
3 changes: 3 additions & 0 deletions protocols/gossipsub/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# 0.34.0 [unreleased]

- Add topic and mesh metrics (see [PR 2316]).

- Fix bug in internal peer's topics tracking (see [PR 2325]).

- Use `instant` and `futures-timer` instead of `wasm-timer` (see [PR 2245]).
Expand All @@ -8,6 +10,7 @@

[PR 2245]: https://github.com/libp2p/rust-libp2p/pull/2245
[PR 2325]: https://github.com/libp2p/rust-libp2p/pull/2325
[PR 2316]: https://github.com/libp2p/rust-libp2p/pull/2316

# 0.33.0 [2021-11-01]

Expand Down
2 changes: 2 additions & 0 deletions protocols/gossipsub/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ regex = "1.4.0"
futures-timer = "3.0.2"
pin-project = "1.0.8"
instant = "0.1.11"
# Metrics dependencies
open-metrics-client = "0.12"

[dev-dependencies]
async-std = "1.6.3"
Expand Down

0 comments on commit 2066a19

Please sign in to comment.