Add parameter with_peers to stats_snapshot while its slow

This commit is contained in:
Igor Katson 2023-11-19 23:11:11 +00:00
parent d6cef0952c
commit 0c89ee9248
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
5 changed files with 11 additions and 7 deletions

View file

@ -55,7 +55,7 @@ async fn main() -> Result<(), anyhow::Error> {
async move {
loop {
tokio::time::sleep(Duration::from_secs(1)).await;
let stats = handle.torrent_state().stats_snapshot();
let stats = handle.torrent_state().stats_snapshot(true);
info!("stats: {stats:?}");
}
}

View file

@ -320,7 +320,7 @@ impl ApiInternal {
fn api_stats(&self, idx: usize) -> Result<StatsResponse> {
let mgr = self.mgr_handle(idx)?;
let snapshot = mgr.torrent_state().stats_snapshot();
let snapshot = mgr.torrent_state().stats_snapshot(true);
let estimator = mgr.speed_estimator();
// Poor mans download speed computation

View file

@ -294,8 +294,8 @@ impl TorrentManager {
let state = mgr.state.clone();
async move {
loop {
let stats = state.stats_snapshot();
let fetched = state.stats_snapshot().fetched_bytes;
let stats = state.stats_snapshot(false);
let fetched = stats.fetched_bytes;
let needed = state.initially_needed();
// fetched can be too high in theory, so for safety make sure that it doesn't wrap around u64.
let remaining = needed

View file

@ -809,9 +809,13 @@ impl TorrentState {
true
}
pub fn stats_snapshot(&self) -> StatsSnapshot {
pub fn stats_snapshot(&self, with_peer_stats: bool) -> StatsSnapshot {
use Ordering::*;
let peer_stats = self.peers.stats();
let peer_stats = if with_peer_stats {
self.peers.stats()
} else {
Default::default()
};
let downloaded = self.stats.downloaded_and_checked.load(Relaxed);
let remaining = self.needed - downloaded;
StatsSnapshot {

View file

@ -244,7 +244,7 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()>
info!("[{}] initializing", idx);
},
ManagedTorrentState::Running(handle) => {
let stats = timeit("stats_snapshot", || handle.torrent_state().stats_snapshot());
let stats = timeit("stats_snapshot", || handle.torrent_state().stats_snapshot(true));
let speed = handle.speed_estimator();
let total = stats.total_bytes;
let progress = stats.total_bytes - stats.remaining_bytes;