]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/download-speed.rs
introduce new runtime tokio helpers
[proxmox-backup.git] / src / bin / download-speed.rs
1 use std::io::Write;
2
3 use failure::*;
4
5 use chrono::{DateTime, Utc};
6
7 use proxmox_backup::client::{HttpClient, BackupReader};
8
9 pub struct DummyWriter {
10 bytes: usize,
11 }
12
13 impl Write for DummyWriter {
14
15 fn write(&mut self, data: &[u8]) -> Result<usize, std::io::Error> {
16 self.bytes += data.len();
17 Ok(data.len())
18 }
19
20 fn flush(&mut self) -> Result<(), std::io::Error> {
21 Ok(())
22 }
23 }
24
25
26 async fn run() -> Result<(), Error> {
27
28 let host = "localhost";
29
30 let username = "root@pam";
31
32 let client = HttpClient::new(host, username, None)?;
33
34 let backup_time = "2019-06-28T10:49:48Z".parse::<DateTime<Utc>>()?;
35
36 let client = BackupReader::start(client, None, "store2", "host", "elsa", backup_time, true)
37 .await?;
38
39 let start = std::time::SystemTime::now();
40
41 let mut bytes = 0;
42 for _ in 0..100 {
43 let writer = DummyWriter { bytes: 0 };
44 let writer = client.speedtest(writer).await?;
45 println!("Received {} bytes", writer.bytes);
46 bytes += writer.bytes;
47 }
48
49 let elapsed = start.elapsed().unwrap();
50 let elapsed = (elapsed.as_secs() as f64) +
51 (elapsed.subsec_millis() as f64)/1000.0;
52
53 println!("Downloaded {} bytes, {} MB/s", bytes, (bytes as f64)/(elapsed*1024.0*1024.0));
54
55 Ok(())
56 }
57
58 #[tokio::main]
59 async fn main() {
60 if let Err(err) = proxmox_backup::tools::runtime::main(run()) {
61 eprintln!("ERROR: {}", err);
62 }
63 println!("DONE");
64 }