]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/proxmox_backup_client/benchmark.rs
proxmox-backup-client benchmark: add --verbose flag
[proxmox-backup.git] / src / bin / proxmox_backup_client / benchmark.rs
1 use std::path::PathBuf;
2 use std::sync::Arc;
3
4 use anyhow::{Error};
5 use serde_json::Value;
6 use chrono::{TimeZone, Utc};
7
8 use proxmox::api::{ApiMethod, RpcEnvironment};
9 use proxmox::api::api;
10
11 use proxmox_backup::backup::{
12 load_and_decrypt_key,
13 CryptConfig,
14
15 };
16
17 use proxmox_backup::client::*;
18
19 use crate::{
20 KEYFILE_SCHEMA, REPO_URL_SCHEMA,
21 extract_repository_from_value,
22 record_repository,
23 connect,
24 };
25
26 #[api(
27 input: {
28 properties: {
29 repository: {
30 schema: REPO_URL_SCHEMA,
31 optional: true,
32 },
33 verbose: {
34 description: "Verbose output.",
35 type: bool,
36 optional: true,
37 },
38 keyfile: {
39 schema: KEYFILE_SCHEMA,
40 optional: true,
41 },
42 }
43 }
44 )]
45 /// Run benchmark tests
46 pub async fn benchmark(
47 param: Value,
48 _info: &ApiMethod,
49 _rpcenv: &mut dyn RpcEnvironment,
50 ) -> Result<(), Error> {
51
52 let repo = extract_repository_from_value(&param)?;
53
54 let keyfile = param["keyfile"].as_str().map(PathBuf::from);
55
56 let verbose = param["verbose"].as_bool().unwrap_or(false);
57
58 let crypt_config = match keyfile {
59 None => None,
60 Some(path) => {
61 let (key, _) = load_and_decrypt_key(&path, &crate::key::get_encryption_key_password)?;
62 let crypt_config = CryptConfig::new(key)?;
63 Some(Arc::new(crypt_config))
64 }
65 };
66
67 let backup_time = Utc.timestamp(Utc::now().timestamp(), 0);
68
69 let client = connect(repo.host(), repo.user())?;
70 record_repository(&repo);
71
72 println!("Connecting to backup server");
73 let client = BackupWriter::start(
74 client,
75 crypt_config.clone(),
76 repo.store(),
77 "host",
78 "benchmark",
79 backup_time,
80 false,
81 ).await?;
82
83 println!("Start upload speed test");
84 let speed = client.upload_speedtest(verbose).await?;
85
86 println!("Upload speed: {} MiB/s", speed);
87
88 Ok(())
89 }