Flexible peer filtering (#3458)
* first pass at peers iter cleanup * more flexible peer with diff lookups * PeersIter with impl Iterator * sync against outbound peers reorder peers filters so expensive filters come later * filter peers by capabilities during sync * prefer outbound peers with high total difficulty * with_difficulty now takes a fn to allow more flexible comparisons based on difficulty * rename peers_iter() -> iter()
This commit is contained in:
@@ -28,7 +28,7 @@ pub struct PeersAllHandler {
|
||||
|
||||
impl Handler for PeersAllHandler {
|
||||
fn get(&self, _req: Request<Body>) -> ResponseFuture {
|
||||
let peers = &w_fut!(&self.peers).all_peers();
|
||||
let peers = &w_fut!(&self.peers).all_peer_data();
|
||||
json_response_pretty(&peers)
|
||||
}
|
||||
}
|
||||
@@ -40,8 +40,9 @@ pub struct PeersConnectedHandler {
|
||||
impl PeersConnectedHandler {
|
||||
pub fn get_connected_peers(&self) -> Result<Vec<PeerInfoDisplay>, Error> {
|
||||
let peers = w(&self.peers)?
|
||||
.connected_peers()
|
||||
.iter()
|
||||
.connected()
|
||||
.into_iter()
|
||||
.map(|p| p.info.clone().into())
|
||||
.collect::<Vec<PeerInfoDisplay>>();
|
||||
Ok(peers)
|
||||
@@ -51,8 +52,9 @@ impl PeersConnectedHandler {
|
||||
impl Handler for PeersConnectedHandler {
|
||||
fn get(&self, _req: Request<Body>) -> ResponseFuture {
|
||||
let peers: Vec<PeerInfoDisplay> = w_fut!(&self.peers)
|
||||
.connected_peers()
|
||||
.iter()
|
||||
.connected()
|
||||
.into_iter()
|
||||
.map(|p| p.info.clone().into())
|
||||
.collect();
|
||||
json_response(&peers)
|
||||
@@ -77,7 +79,7 @@ impl PeerHandler {
|
||||
})?;
|
||||
return Ok(vec![peer_data]);
|
||||
}
|
||||
let peers = w(&self.peers)?.all_peers();
|
||||
let peers = w(&self.peers)?.all_peer_data();
|
||||
Ok(peers)
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ use crate::types::*;
|
||||
use crate::web::*;
|
||||
use hyper::{Body, Request};
|
||||
use serde_json::json;
|
||||
use std::convert::TryInto;
|
||||
use std::sync::Weak;
|
||||
|
||||
// RESTful index of available api endpoints
|
||||
@@ -54,7 +55,12 @@ impl StatusHandler {
|
||||
let (api_sync_status, api_sync_info) = sync_status_to_api(sync_status);
|
||||
Ok(Status::from_tip_and_peers(
|
||||
head,
|
||||
w(&self.peers)?.peer_count(),
|
||||
w(&self.peers)?
|
||||
.iter()
|
||||
.connected()
|
||||
.count()
|
||||
.try_into()
|
||||
.unwrap(),
|
||||
api_sync_status,
|
||||
api_sync_info,
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user