]> git.proxmox.com Git - proxmox-backup.git/commitdiff
src/bin/proxmox-backup-client.rs: generate a log file
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 1 Mar 2019 08:35:41 +0000 (09:35 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 1 Mar 2019 08:35:41 +0000 (09:35 +0100)
src/bin/proxmox-backup-client.rs
src/client/catar_backup_stream.rs

index 07d4e84bfcd88844489df3044050839a68ecf28b..351840a4d24b70bb80a5a736de78b8a701359679 100644 (file)
@@ -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<P: AsRef<Path>>(
     client: &mut HttpClient,
     repo: &BackupRepository,
-    body: Body,
+    dir_path: P,
     archive_name: &str,
     backup_time: DateTime<Utc>,
     chunk_size: Option<u64>,
@@ -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
 
-    for (filename, target) in upload_list {
-        println!("Upload '{}' to '{:?}'", filename, repo);
+    let log_file_name = format!("backup-log-{}.log", backup_time.format("%Y-%m-%dT%H:%M:%S"));
 
-        let stream = CaTarBackupStream::open(&filename)?;
+    let mut log = tools::FileLogger::new(&log_file_name, true)?;
 
-        let body = Body::wrap_stream(stream);
+    flog!(log, "Starting backup");
+    flog!(log, "Client name: {}", tools::nodename());
+    flog!(log, "UTC Start Time: {}", Utc::now().format("%c"));
 
-        backup_directory(&mut client, &repo, body, &target, backup_time, chunk_size_opt)?;
+    for (filename, target) in upload_list {
+        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)
index ebb8a126a00bb80400ab116b7bf5a149c7ac32dc..17f7fd99a5358ed91c67c1fa440c2cc429f2097a 100644 (file)
@@ -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<Self, Error> {
+    pub fn open(dirname: &Path) -> Result<Self, Error> {
 
         let dir = nix::dir::Dir::open(dirname, OFlag::O_DIRECTORY, Mode::empty())?;
         let path = std::path::PathBuf::from(dirname);