use serde_json::{json, Value};
use xdg::BaseDirectories;
-use proxmox::{
- api::schema::*,
- api::cli::shellword_split,
- tools::fs::file_get_json,
-};
+use proxmox_schema::*;
+use proxmox_router::cli::{complete_file_name, shellword_split};
+use proxmox::tools::fs::file_get_json;
-use pbs_api_types::{BACKUP_REPO_URL, Authid, UserWithTokens};
+use pbs_api_types::{BACKUP_REPO_URL, Authid, RateLimitConfig, UserWithTokens};
use pbs_datastore::BackupDir;
use pbs_tools::json::json_object_to_query;
}
pub fn connect(repo: &BackupRepository) -> Result<HttpClient, Error> {
- connect_do(repo.host(), repo.port(), repo.auth_id())
+ let rate_limit = RateLimitConfig::default(); // unlimited
+ connect_do(repo.host(), repo.port(), repo.auth_id(), rate_limit)
.map_err(|err| format_err!("error building client for repository {} - {}", repo, err))
}
-fn connect_do(server: &str, port: u16, auth_id: &Authid) -> Result<HttpClient, Error> {
+pub fn connect_rate_limited(
+ repo: &BackupRepository,
+ rate_limit: RateLimitConfig,
+) -> Result<HttpClient, Error> {
+ connect_do(repo.host(), repo.port(), repo.auth_id(), rate_limit)
+ .map_err(|err| format_err!("error building client for repository {} - {}", repo, err))
+}
+
+fn connect_do(
+ server: &str,
+ port: u16,
+ auth_id: &Authid,
+ rate_limit: RateLimitConfig,
+) -> Result<HttpClient, Error> {
let fingerprint = std::env::var(ENV_VAR_PBS_FINGERPRINT).ok();
let password = get_secret_from_env(ENV_VAR_PBS_PASSWORD)?;
- let options = HttpClientOptions::new_interactive(password, fingerprint);
+ let options = HttpClientOptions::new_interactive(password, fingerprint)
+ .rate_limit(rate_limit);
HttpClient::new(server, port, auth_id, options)
}
}
pub fn complete_backup_group(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
- pbs_runtime::main(async { complete_backup_group_do(param).await })
+ proxmox_async::runtime::main(async { complete_backup_group_do(param).await })
}
pub async fn complete_backup_group_do(param: &HashMap<String, String>) -> Vec<String> {
}
pub fn complete_group_or_snapshot(arg: &str, param: &HashMap<String, String>) -> Vec<String> {
- pbs_runtime::main(async { complete_group_or_snapshot_do(arg, param).await })
+ proxmox_async::runtime::main(async { complete_group_or_snapshot_do(arg, param).await })
}
pub async fn complete_group_or_snapshot_do(arg: &str, param: &HashMap<String, String>) -> Vec<String> {
}
pub fn complete_backup_snapshot(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
- pbs_runtime::main(async { complete_backup_snapshot_do(param).await })
+ proxmox_async::runtime::main(async { complete_backup_snapshot_do(param).await })
}
pub async fn complete_backup_snapshot_do(param: &HashMap<String, String>) -> Vec<String> {
}
pub fn complete_server_file_name(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
- pbs_runtime::main(async { complete_server_file_name_do(param).await })
+ proxmox_async::runtime::main(async { complete_server_file_name_do(param).await })
}
pub async fn complete_server_file_name_do(param: &HashMap<String, String>) -> Vec<String> {
pub fn complete_archive_name(arg: &str, param: &HashMap<String, String>) -> Vec<String> {
complete_server_file_name(arg, param)
.iter()
- .map(|v| pbs_tools::format::strip_server_file_extension(&v))
+ .map(|v| pbs_tools::format::strip_server_file_extension(&v).to_owned())
.collect()
}
.iter()
.filter_map(|name| {
if name.ends_with(".pxar.didx") {
- Some(pbs_tools::format::strip_server_file_extension(name))
+ Some(pbs_tools::format::strip_server_file_extension(name).to_owned())
} else {
None
}
.iter()
.filter_map(|name| {
if name.ends_with(".img.fidx") {
- Some(pbs_tools::format::strip_server_file_extension(name))
+ Some(pbs_tools::format::strip_server_file_extension(name).to_owned())
} else {
None
}
}
pub fn complete_auth_id(_arg: &str, param: &HashMap<String, String>) -> Vec<String> {
- pbs_runtime::main(async { complete_auth_id_do(param).await })
+ proxmox_async::runtime::main(async { complete_auth_id_do(param).await })
}
pub async fn complete_auth_id_do(param: &HashMap<String, String>) -> Vec<String> {
return result;
}
- let files = pbs_tools::fs::complete_file_name(data[1], param);
+ let files = complete_file_name(data[1], param);
for file in files {
result.push(format!("{}:{}", data[0], file));