]> git.proxmox.com Git - proxmox-backup.git/blob - examples/download-speed.rs
bump version to 3.2.5-1
[proxmox-backup.git] / examples / download-speed.rs
1 use std::io::Write;
2
3 use anyhow::Error;
4
5 use pbs_api_types::{Authid, BackupNamespace, BackupType};
6 use pbs_client::{BackupReader, HttpClient, HttpClientOptions};
7
8 pub struct DummyWriter {
9 bytes: usize,
10 }
11
12 impl Write for DummyWriter {
13 fn write(&mut self, data: &[u8]) -> Result<usize, std::io::Error> {
14 self.bytes += data.len();
15 Ok(data.len())
16 }
17
18 fn flush(&mut self) -> Result<(), std::io::Error> {
19 Ok(())
20 }
21 }
22
23 async fn run() -> Result<(), Error> {
24 let host = "localhost";
25
26 let auth_id = Authid::root_auth_id();
27
28 let options = HttpClientOptions::default()
29 .interactive(true)
30 .ticket_cache(true);
31
32 let client = HttpClient::new(host, 8007, auth_id, options)?;
33
34 let backup_time = proxmox_time::parse_rfc3339("2019-06-28T10:49:48Z")?;
35
36 let client = BackupReader::start(
37 &client,
38 None,
39 "store2",
40 &BackupNamespace::root(),
41 &(BackupType::Host, "elsa".to_string(), backup_time).into(),
42 true,
43 )
44 .await?;
45
46 let start = std::time::SystemTime::now();
47
48 let mut bytes = 0;
49 for _ in 0..100 {
50 let mut writer = DummyWriter { bytes: 0 };
51 client.speedtest(&mut writer).await?;
52 println!("Received {} bytes", writer.bytes);
53 bytes += writer.bytes;
54 }
55
56 let elapsed = start.elapsed().unwrap();
57 let elapsed = (elapsed.as_secs() as f64) + (elapsed.subsec_millis() as f64) / 1000.0;
58
59 println!(
60 "Downloaded {} bytes, {} MB/s",
61 bytes,
62 (bytes as f64) / (elapsed * 1024.0 * 1024.0)
63 );
64
65 Ok(())
66 }
67
68 fn main() {
69 if let Err(err) = proxmox_async::runtime::main(run()) {
70 eprintln!("ERROR: {}", err);
71 }
72 println!("DONE");
73 }