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