From c2affa88656fd8bdec6fdaf909ffcd3c73e37fc4 Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Mon, 28 Jun 2021 22:48:14 +0100 Subject: [PATCH] Nothing much --- TODO.md | 2 +- crates/librqbit/src/torrent_manager.rs | 9 ++++++--- crates/librqbit/src/torrent_state.rs | 9 ++++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index ea7e086..13194fc 100644 --- a/TODO.md +++ b/TODO.md @@ -5,7 +5,7 @@ - [x] use the "update_hash" function in piece checking - [ ] signaling when file is done -- [ ] +- [ ] when we have the whole torrent, there's no point talking to peers that also have the whole torrent - [ ] per-file stats - [ ] per-peer stats diff --git a/crates/librqbit/src/torrent_manager.rs b/crates/librqbit/src/torrent_manager.rs index 3c1bc78..db149b7 100644 --- a/crates/librqbit/src/torrent_manager.rs +++ b/crates/librqbit/src/torrent_manager.rs @@ -187,7 +187,8 @@ impl TorrentManager { async fn stats_printer(self) -> anyhow::Result<()> { loop { - let live_peers = self.inner.locked.read().peers.stats(); + let live_peer_stats = self.inner.locked.read().peers.stats(); + let seen_peers_count = self.inner.locked.read().peers.seen().len(); let have = self.inner.stats.have.load(Ordering::Relaxed); let fetched = self.inner.stats.fetched_bytes.load(Ordering::Relaxed); let needed = self.inner.needed; @@ -204,10 +205,12 @@ impl TorrentManager { (downloaded as f64 / needed as f64) * 100f64 }; info!( - "Stats: downloaded {:.2}% ({}), peers {:?}, fetched {}, remaining {} out of {}, uploaded {}, total have {}", + "Stats: downloaded {:.2}% ({:.2}), peers {{live: {}, connecting: {}, seen: {}}}, fetched {}, remaining {:.2} out of {:.2}, uploaded {:.2}, total have {:.2}", downloaded_pct, SF::new(downloaded), - live_peers, + live_peer_stats.live, + live_peer_stats.connecting, + seen_peers_count, SF::new(fetched), SF::new(remaining), SF::new(needed), diff --git a/crates/librqbit/src/torrent_state.rs b/crates/librqbit/src/torrent_state.rs index 3112a91..60f3db6 100644 --- a/crates/librqbit/src/torrent_state.rs +++ b/crates/librqbit/src/torrent_state.rs @@ -43,7 +43,7 @@ impl From<&ChunkInfo> for InflightRequest { #[derive(Default)] pub struct PeerStates { states: HashMap, - seen_peers: HashSet, + seen: HashSet, inflight_pieces: HashSet, tx: HashMap>>, } @@ -71,13 +71,16 @@ impl PeerStates { addr: SocketAddr, tx: tokio::sync::mpsc::Sender, ) -> Option { - if self.seen_peers.contains(&addr) { + if self.seen.contains(&addr) { return None; } let handle = self.add(addr, tx)?; - self.seen_peers.insert(addr); + self.seen.insert(addr); Some(handle) } + pub fn seen(&self) -> &HashSet { + &self.seen + } pub fn get_live(&self, handle: PeerHandle) -> Option<&LivePeerState> { if let PeerState::Live(ref l) = self.states.get(&handle)? { return Some(l);