From 17d6979afd1a146a548ae533dcd2816f1e314186 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Fri, 1 Mar 2019 09:35:41 +0100 Subject: [PATCH] src/bin/proxmox-backup-client.rs: generate a log file --- src/bin/proxmox-backup-client.rs | 32 ++++++++++++++++++++++--------- src/client/catar_backup_stream.rs | 4 ++-- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/bin/proxmox-backup-client.rs b/src/bin/proxmox-backup-client.rs index 07d4e84b..351840a4 100644 --- a/src/bin/proxmox-backup-client.rs +++ b/src/bin/proxmox-backup-client.rs @@ -3,8 +3,10 @@ extern crate proxmox_backup; use failure::*; //use std::os::unix::io::AsRawFd; use chrono::{DateTime, Local, Utc, TimeZone}; +use std::path::Path; use proxmox_backup::tools; +use proxmox_backup::flog; use proxmox_backup::cli::*; use proxmox_backup::api_schema::*; use proxmox_backup::api_schema::router::*; @@ -26,10 +28,10 @@ lazy_static! { static ref BACKUPSPEC_REGEX: Regex = Regex::new(r"^([a-zA-Z0-9_-]+):(.+)$").unwrap(); } -fn backup_directory( +fn backup_directory>( client: &mut HttpClient, repo: &BackupRepository, - body: Body, + dir_path: P, archive_name: &str, backup_time: DateTime, chunk_size: Option, @@ -51,6 +53,10 @@ fn backup_directory( let path = format!("api2/json/admin/datastore/{}/catar?{}", repo.store, query); + let stream = CaTarBackupStream::open(dir_path.as_ref())?; + + let body = Body::wrap_stream(stream); + client.upload("application/x-proxmox-backup-catar", body, &path)?; Ok(()) @@ -202,16 +208,24 @@ fn create_backup( client.login()?; // login before starting backup + let log_file_name = format!("backup-log-{}.log", backup_time.format("%Y-%m-%dT%H:%M:%S")); + + let mut log = tools::FileLogger::new(&log_file_name, true)?; + + flog!(log, "Starting backup"); + flog!(log, "Client name: {}", tools::nodename()); + flog!(log, "UTC Start Time: {}", Utc::now().format("%c")); + for (filename, target) in upload_list { - println!("Upload '{}' to '{:?}'", filename, repo); - - let stream = CaTarBackupStream::open(&filename)?; - - let body = Body::wrap_stream(stream); - - backup_directory(&mut client, &repo, body, &target, backup_time, chunk_size_opt)?; + flog!(log, "Upload '{}' to '{:?}' as {}", filename, repo, target); + backup_directory(&mut client, &repo, &filename, &target, backup_time, chunk_size_opt)?; } + flog!(log, "Upload backup log"); + // fixme: impl upload log + + flog!(log, "UTC End Time: {}", Utc::now().format("%c")); + //datastore.garbage_collection()?; Ok(Value::Null) diff --git a/src/client/catar_backup_stream.rs b/src/client/catar_backup_stream.rs index ebb8a126..17f7fd99 100644 --- a/src/client/catar_backup_stream.rs +++ b/src/client/catar_backup_stream.rs @@ -2,7 +2,7 @@ use failure::*; use std::thread; use std::os::unix::io::FromRawFd; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use futures::{Async, Poll}; use futures::stream::Stream; @@ -54,7 +54,7 @@ impl CaTarBackupStream { Ok(Self { pipe: Some(pipe), buffer, child: Some(child) }) } - pub fn open(dirname: &str) -> Result { + pub fn open(dirname: &Path) -> Result { let dir = nix::dir::Dir::open(dirname, OFlag::O_DIRECTORY, Mode::empty())?; let path = std::path::PathBuf::from(dirname);