From 86eb80dd7358ce9c2315023a170930a22db8698b Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Mon, 30 Mar 2020 00:48:57 +0800 Subject: [PATCH] now can run --- .gitignore | 2 ++ sample.gpg | Bin 4593 -> 3302 bytes src/config_util.rs | 44 ++++++++++++++++++++++++++++---------------- src/main.rs | 21 +++++++++------------ 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 83159f5..b7fd2de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +sample.gpg +sample-backupd-config.json # ---> macOS # General .DS_Store diff --git a/sample.gpg b/sample.gpg index 94781041c3f1aaa21334899be2d7582cead0002c..c7676fb8e8895fcd9da24afbd9b317d52176b76d 100644 GIT binary patch literal 3302 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 diff --git a/src/config_util.rs b/src/config_util.rs index d2e71c3..c413543 100644 --- a/src/config_util.rs +++ b/src/config_util.rs @@ -62,37 +62,49 @@ pub struct OSSBackupdConfig { pub items: Vec, } +impl OSSBackupdConfig { + + pub fn get_host(&self) -> String { + match &self.host { + Some(h) => remove_start_end_slash(&h), + None => "default_host".to_owned(), + } + } + + pub fn get_prefix(&self) -> String { + match &self.prefix { + Some(p) => remove_start_end_slash(&p), + None => "default_oss_backupd".to_owned(), + } + } +} + impl OSSBackupdConfigItem { pub fn make_oss_key(&self, oss_backupd_config: &OSSBackupdConfig, suffix: &str) -> String { real_make_oss_key(oss_backupd_config, &self, suffix) } + + pub fn get_file_name(&self) -> String { + match &self.file_name { + Some(f) => f.clone(), + None => "default_file_name".to_owned(), + } + } } fn real_make_oss_key(oss_backupd_config: &OSSBackupdConfig, oss_backupd_config_item: &OSSBackupdConfigItem, suffix: &str) -> String { let mut key = String::with_capacity(1024); - key.push_str(&(if oss_backupd_config.prefix.is_some() { - remove_start_end_slash(&oss_backupd_config.prefix.as_ref().unwrap().as_str()) - } else { - "default_oss_backupd".to_string() - })); + key.push_str(&oss_backupd_config.get_prefix()); key.push_str("/"); - key.push_str(&(if oss_backupd_config.host.is_some() { - remove_start_end_slash(&oss_backupd_config.host.as_ref().unwrap().as_str()) - } else { - "default_host".to_string() - })); + key.push_str(&oss_backupd_config.get_host()); key.push_str("/"); - key.push_str(if oss_backupd_config_item.file_name.is_some() { - oss_backupd_config_item.file_name.as_ref().unwrap().as_str() - } else { - "default_file_name" - }); + key.push_str(&oss_backupd_config_item.get_file_name()); key.push_str("_"); let ymdhms = Utc::now().format("%Y%m%d_%H%M%S").to_string(); key.push_str(&ymdhms); - if suffix != "" { + if !suffix.is_empty() { key.push_str(&format!(".{}", suffix)); } diff --git a/src/main.rs b/src/main.rs index 674ad1c..164ffff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,7 +28,7 @@ use opt::{ fn main() -> XResult<()> { let options = Options::new_and_parse_args()?; if options.version { - print_message(MessageType::INFO, "ossbackupd v0.1"); + print_message(MessageType::INFO, "ossbackupd v0.1.0"); return Ok(()); } @@ -50,7 +50,7 @@ fn main() -> XResult<()> { let mut item_index = -1; for config_item in &oss_backupd_config.items { item_index += 1; - + if options.verbose { print_message(MessageType::DEBUG, &format!("Process config item index: {}, config: {:?}", item_index, config_item)); } @@ -133,9 +133,9 @@ fn main() -> XResult<()> { } let oss_client = OSSClient::new(endpoint, access_key_id, access_key_secret); - let default_limit = 10_usize; - let meta_file_name = &format!("ossbackupd_meta_{}.json", path); - let new_file = config_item.make_oss_key(&oss_backupd_config, "gpg"); + let default_limit = 10_usize; // TODO read from config! + let meta_file_name = &format!("{}/ossbackupd_meta_{}_{}.json", &oss_backupd_config.get_prefix(), &oss_backupd_config.get_host(), &config_item.get_file_name()); + let new_file = format!("{}/{}", path, config_item.make_oss_key(&oss_backupd_config, "gpg")); if options.verbose { print_message(MessageType::DEBUG, &format!("Default limit: {}", default_limit)); @@ -197,16 +197,14 @@ fn main() -> XResult<()> { print_message(MessageType::ERROR, &format!("Error: {}, at item index: {}", e, item_index)); }, Ok(_) => { - print_message(MessageType::ERROR, &format!("Success, at item index: {}", item_index)); + print_message(MessageType::OK, &format!("Success, at item index: {}", item_index)); }, }; fs::remove_file(temp_zip_file).ok(); fs::remove_file(temp_pgp_file).ok(); } - if options.verbose { - print_message(MessageType::DEBUG, "Backup all file(s) finished!"); - } + print_message(MessageType::OK, "Backup all file(s) finished!"); Ok(()) } @@ -229,9 +227,8 @@ pub fn process_oss_files(oss_client: &OSSClient, bucket_name: &str, path: &str, oss_client.put_file_content(bucket_name, meta_file_key, &new_meta_file_content)?; if !removed_file.is_empty() { for rm_file in removed_file { - let rm_file_key = &format!("{}/{}", path, rm_file); - print_message(MessageType::INFO, &format!("Remove OSS key: {}", rm_file_key)); - oss_client.delete_file(bucket_name, rm_file_key)?; + print_message(MessageType::INFO, &format!("Remove OSS key: {}", &rm_file)); + oss_client.delete_file(bucket_name, &rm_file)?; } } Ok(())