diff --git a/src/api2/admin/datastore/backup.rs b/src/api2/admin/datastore/backup.rs index fd2fcfd6..5076edd6 100644 --- a/src/api2/admin/datastore/backup.rs +++ b/src/api2/admin/datastore/backup.rs @@ -35,6 +35,7 @@ pub fn api_method_upgrade_backup() -> ApiAsyncMethod { .required("backup-type", StringSchema::new("Backup type.") .format(Arc::new(ApiStringFormat::Enum(&["vm", "ct", "host"])))) .required("backup-id", StringSchema::new("Backup ID.")) + .optional("debug", BooleanSchema::new("Enable verbose debug logging.")) ) } @@ -48,6 +49,8 @@ fn upgrade_to_backup_protocol( static PROXMOX_BACKUP_PROTOCOL_ID: &str = "proxmox-backup-protocol-h2"; + let debug = param["debug"].as_bool().unwrap_or(false); + let store = tools::required_string_param(¶m, "store")?.to_owned(); let datastore = DataStore::lookup_datastore(&store)?; @@ -85,21 +88,23 @@ fn upgrade_to_backup_protocol( let mut env = BackupEnvironment::new( env_type, username.clone(), worker.clone(), datastore, backup_dir); + env.debug = debug; env.last_backup = last_backup; env.log(format!("starting new backup on datastore '{}': {:?}", store, path)); - let service = BackupService::new(env.clone(), worker.clone()); + let service = BackupService::new(env.clone(), worker.clone(), debug); let abort_future = worker.abort_future(); let env2 = env.clone(); + let env3 = env.clone(); req_body .on_upgrade() .map_err(Error::from) .and_then(move |conn| { - worker.log("upgrade done"); + env3.debug("protocol upgrade done"); let mut http = hyper::server::conn::Http::new(); http.http2_only(true); diff --git a/src/api2/admin/datastore/backup/environment.rs b/src/api2/admin/datastore/backup/environment.rs index af580b69..c6b48053 100644 --- a/src/api2/admin/datastore/backup/environment.rs +++ b/src/api2/admin/datastore/backup/environment.rs @@ -58,6 +58,7 @@ pub struct BackupEnvironment { env_type: RpcEnvironmentType, result_attributes: HashMap, user: String, + pub debug: bool, pub formatter: &'static OutputFormatter, pub worker: Arc, pub datastore: Arc, @@ -89,6 +90,7 @@ impl BackupEnvironment { user, worker, datastore, + debug: false, formatter: &JSON_FORMATTER, backup_dir, last_backup: None, @@ -269,6 +271,10 @@ impl BackupEnvironment { self.worker.log(msg); } + pub fn debug>(&self, msg: S) { + if self.debug { self.worker.log(msg); } + } + pub fn format_response(&self, result: Result) -> Response { match result { Ok(data) => (self.formatter.format_data)(data, self), diff --git a/src/api2/admin/datastore/backup/service.rs b/src/api2/admin/datastore/backup/service.rs index fbb333f9..f57a1407 100644 --- a/src/api2/admin/datastore/backup/service.rs +++ b/src/api2/admin/datastore/backup/service.rs @@ -18,16 +18,20 @@ lazy_static!{ static ref BACKUP_ROUTER: Router = super::backup_api(); } - pub struct BackupService { rpcenv: BackupEnvironment, worker: Arc, + debug: bool, } impl BackupService { - pub fn new(rpcenv: BackupEnvironment, worker: Arc) -> Self { - Self { rpcenv, worker } + pub fn new(rpcenv: BackupEnvironment, worker: Arc, debug: bool) -> Self { + Self { rpcenv, worker, debug } + } + + pub fn debug>(&self, msg: S) { + if self.debug { self.worker.log(msg); } } fn handle_request(&self, req: Request) -> BoxFut { @@ -41,8 +45,7 @@ impl BackupService { Err(err) => return Box::new(future::err(http_err!(BAD_REQUEST, err.to_string()))), }; - self.worker.log(format!("H2 REQUEST {} {}", method, path)); - self.worker.log(format!("H2 COMPO {:?}", components)); + self.debug(format!("REQUEST: {} {}", method, path)); let mut uri_param = HashMap::new();