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