Add an RPC request for the state of the network (#1884)

* Add an RPC request for the state of the network

* Fix concerns

* Fix tests

* Replace comment with TODO

* Rename the RPC
This commit is contained in:
Pierre Krieger
2019-02-28 19:28:38 +01:00
committed by Gav Wood
parent 72b9df8237
commit c21d7436cc
9 changed files with 300 additions and 21 deletions
+11
View File
@@ -60,6 +60,13 @@ pub trait SystemApi<Hash, Number> {
/// Returns currently connected peers
#[rpc(name = "system_peers")]
fn system_peers(&self) -> Result<Vec<PeerInfo<Hash, Number>>>;
/// Returns current state of the network.
///
/// **Warning**: This API is not stable.
// TODO: make this stable and move structs https://github.com/paritytech/substrate/issues/1890
#[rpc(name = "system_networkState")]
fn system_network_state(&self) -> Result<network::NetworkState>;
}
/// System API implementation
@@ -120,4 +127,8 @@ impl<B: traits::Block> SystemApi<B::Hash, <B::Header as HeaderT>::Number> for Sy
best_number: p.best_number,
}).collect())
}
fn system_network_state(&self) -> Result<network::NetworkState> {
Ok(self.sync.network_state())
}
}
+32
View File
@@ -52,6 +52,20 @@ impl network::SyncProvider<Block> for Status {
}
}
fn network_state(&self) -> network::NetworkState {
network::NetworkState {
peer_id: String::new(),
listened_addresses: Default::default(),
is_reserved_only: false,
reserved_peers: Default::default(),
banned_peers: Default::default(),
connected_peers: Default::default(),
not_connected_peers: Default::default(),
average_download_per_sec: 0,
average_upload_per_sec: 0,
}
}
fn peers(&self) -> Vec<(NodeIndex, NetworkPeerInfo<Block>)> {
vec![(1, NetworkPeerInfo {
peer_id: self.peer_id.clone(),
@@ -181,3 +195,21 @@ fn system_peers() {
}]
);
}
#[test]
fn system_network_state() {
assert_eq!(
api(None).system_network_state().unwrap(),
network::NetworkState {
peer_id: String::new(),
listened_addresses: Default::default(),
is_reserved_only: false,
reserved_peers: Default::default(),
banned_peers: Default::default(),
connected_peers: Default::default(),
not_connected_peers: Default::default(),
average_download_per_sec: 0,
average_upload_per_sec: 0,
}
);
}