diff --git a/src/bin/download-speed.rs b/src/bin/download-speed.rs index f44cd890..bcfe237c 100644 --- a/src/bin/download-speed.rs +++ b/src/bin/download-speed.rs @@ -1,16 +1,10 @@ -use failure::*; -use futures::*; use std::io::Write; -//use std::sync::Arc; -//use serde_json::Value; +use failure::*; + use chrono::{DateTime, Utc}; -//use proxmox_backup::tools; -//use proxmox_backup::backup::*; -use proxmox_backup::client::*; -//use proxmox_backup::pxar; -//use futures::stream::Stream; +use proxmox_backup::client::HttpClient; pub struct DummyWriter { bytes: usize, @@ -29,7 +23,7 @@ impl Write for DummyWriter { } -fn run() -> Result<(), Error> { +async fn run() -> Result<(), Error> { let host = "localhost"; @@ -39,57 +33,33 @@ fn run() -> Result<(), Error> { let backup_time = "2019-06-28T10:49:48Z".parse::>()?; - let client = client.start_backup_reader("store2", "host", "elsa", backup_time, true).wait()?; + let client = client + .start_backup_reader("store2", "host", "elsa", backup_time, true) + .await?; let start = std::time::SystemTime::now(); - futures::stream::repeat(()) - .take(100) - .and_then(|_| { - let writer = DummyWriter { bytes: 0 }; - client.speedtest(writer) - .and_then(|writer| { - println!("Received {} bytes", writer.bytes); - Ok(writer.bytes) - }) - }) - .fold(0, move |mut acc, size| { - acc += size; - Ok::<_, Error>(acc) - }) - .then(move |result| { - match result { - Err(err) => { - println!("ERROR {}", err); - } - Ok(bytes) => { - let elapsed = start.elapsed().unwrap(); - let elapsed = (elapsed.as_secs() as f64) + - (elapsed.subsec_millis() as f64)/1000.0; + let mut bytes = 0; + for _ in 0..100 { + let writer = DummyWriter { bytes: 0 }; + let writer = client.speedtest(writer).await?; + println!("Received {} bytes", writer.bytes); + bytes += writer.bytes; + } - println!("Downloaded {} bytes, {} MB/s", bytes, (bytes as f64)/(elapsed*1024.0*1024.0)); - } - } - Ok::<_, Error>(()) - }) - .wait()?; + let elapsed = start.elapsed().unwrap(); + let elapsed = (elapsed.as_secs() as f64) + + (elapsed.subsec_millis() as f64)/1000.0; + + println!("Downloaded {} bytes, {} MB/s", bytes, (bytes as f64)/(elapsed*1024.0*1024.0)); Ok(()) } -fn main() { - - //let mut rt = tokio::runtime::Runtime::new().unwrap(); - - // should be rt.block_on_all, but this block forever in release builds - tokio::run(lazy(move || { - // let _ = rt.block_on(lazy(move || -> Result<(), ()> { - if let Err(err) = run() { - eprintln!("ERROR: {}", err); - } - println!("DONE1"); - Ok(()) - })); - - println!("DONE2"); +#[tokio::main] +async fn main() { + if let Err(err) = run().await { + eprintln!("ERROR: {}", err); + } + println!("DONE"); }