From 700e5acf9078bbe055e17fb8e6eb1172283e3e0f Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Tue, 16 Apr 2019 13:35:04 +0200 Subject: [PATCH] add fn debug_info to peerset (#2258) --- substrate/core/peerset/src/lib.rs | 13 +++++- substrate/core/peerset/src/slots.rs | 69 +++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/substrate/core/peerset/src/lib.rs b/substrate/core/peerset/src/lib.rs index 10677b859a..570dcf5f86 100644 --- a/substrate/core/peerset/src/lib.rs +++ b/substrate/core/peerset/src/lib.rs @@ -25,7 +25,7 @@ use libp2p::PeerId; use log::trace; use lru_cache::LruCache; use slots::{SlotType, SlotState, Slots}; -pub use serde_json::Value; +use serde_json::json; const PEERSET_SCORES_CACHE_SIZE: usize = 1000; const DISCOVERED_NODES_LIMIT: u32 = 1000; @@ -407,7 +407,16 @@ impl Peerset { /// Produces a JSON object containing the state of the peerset manager, for debugging purposes. pub fn debug_info(&self) -> serde_json::Value { - serde_json::Value::Null + json!({ + "data": { + // add scores + "discovered": self.data.discovered.debug_info(), + "reserved_only": self.data.reserved_only, + "out_slots": self.data.out_slots.debug_info(), + "in_slots": self.data.in_slots.debug_info() + }, + "message_queue": self.message_queue.len(), + }) } } diff --git a/substrate/core/peerset/src/slots.rs b/substrate/core/peerset/src/slots.rs index 4c6d9fab6c..299e2c0e9d 100644 --- a/substrate/core/peerset/src/slots.rs +++ b/substrate/core/peerset/src/slots.rs @@ -17,6 +17,7 @@ use std::{fmt, mem}; use libp2p::PeerId; use linked_hash_map::LinkedHashMap; +use serde_json::json; /// Describes the nature of connection with a given peer. #[derive(Debug, PartialEq, Clone, Copy)] @@ -182,4 +183,72 @@ impl Slots { pub fn is_reserved(&self, peer_id: &PeerId) -> bool { self.reserved.contains_key(peer_id) } + + /// Produces a JSON object containing the state of slots, for debugging purposes. + pub fn debug_info(&self) -> serde_json::Value { + json!({ + "max_slots": self.max_slots, + "reserved": self.reserved.keys().map(|peer_id| peer_id.to_base58()).collect::>(), + "common": self.common.keys().map(|peer_id| peer_id.to_base58()).collect::>() + }) + } +} + +#[cfg(test)] +mod tests { + use libp2p::PeerId; + use serde_json::json; + use super::{Slots, SlotType}; + + #[test] + fn test_slots_debug_info() { + let reserved_peer = PeerId::random(); + let reserved_peer2 = PeerId::random(); + let common_peer = PeerId::random(); + let mut slots = Slots::new(10); + + slots.add_peer(reserved_peer.clone(), SlotType::Reserved); + slots.add_peer(reserved_peer2.clone(), SlotType::Reserved); + slots.add_peer(common_peer.clone(), SlotType::Common); + + let expected = json!({ + "max_slots": 10, + "reserved": vec![reserved_peer.to_base58(), reserved_peer2.to_base58()], + "common": vec![common_peer.to_base58()], + }); + + assert_eq!(expected, slots.debug_info()); + } + + #[test] + fn test_slots_debug() { + let reserved_peer = PeerId::random(); + let reserved_peer2 = PeerId::random(); + let common_peer = PeerId::random(); + let mut slots = Slots::new(10); + + slots.add_peer(reserved_peer.clone(), SlotType::Reserved); + slots.add_peer(reserved_peer2.clone(), SlotType::Reserved); + slots.add_peer(common_peer.clone(), SlotType::Common); + + let expected = format!("Slots {{ + max_slots: 10, + reserved: [ + PeerId( + {:?} + ), + PeerId( + {:?} + ) + ], + common: [ + PeerId( + {:?} + ) + ] +}}", reserved_peer.to_base58(), reserved_peer2.to_base58(), common_peer.to_base58()); + + let s = format!("{:#?}", slots); + assert_eq!(expected, s); + } }