From 97a0b851b2c0216ddc65e3affe0901c93e37e2aa Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 28 Oct 2023 09:06:35 +0800 Subject: [PATCH] feat: optimize code --- Cargo.lock | 32 ++++++++++++++++---------------- src/main.rs | 46 ++++++++++++++++++++++++++++++---------------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c5f97e1..269d642 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -107,15 +107,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.147" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] name = "proc-macro2" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" dependencies = [ "unicode-ident", ] @@ -160,9 +160,9 @@ dependencies = [ [[package]] name = "rust_util" -version = "0.6.41" +version = "0.6.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df24005feacce81f4ae340464b39c380f7e01e7225bfdef62d40cb44cb1c11d7" +checksum = "45c3036388284b69995eb2864a943b0de55de76ad5b56fc2d3c60fecd7b9ad82" dependencies = [ "lazy_static", "libc", @@ -184,9 +184,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "2.0.29" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", @@ -225,18 +225,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.47" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", @@ -245,15 +245,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "vec_map" diff --git a/src/main.rs b/src/main.rs index b4d2c26..2ea3b5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ +use std::fs; use std::fs::File; use std::io::{BufWriter, Read, Write}; use std::process::exit; +use std::sync::mpsc::Sender; use std::time::{Duration, SystemTime}; use clap::{App, AppSettings, Arg}; @@ -34,9 +36,9 @@ fn main() { let prefix = arg_matchers.value_of("prefix").unwrap().to_string(); let suffix = arg_matchers.value_of("suffix").unwrap().to_string(); let file_size = arg_matchers.value_of("file-size").unwrap(); - let file_size = util_size::parse_size(file_size).unwrap_or_else(|_| 10 * 1024 * 1028) as usize; + let file_size = util_size::parse_size(file_size).unwrap_or(10 * 1024 * 1028) as usize; let file_count = arg_matchers.value_of("file-count").unwrap(); - let file_count = file_count.parse().unwrap_or_else(|_| 10); + let file_count = file_count.parse().unwrap_or(10); let file_count: i32 = if file_count < 0 { 0 } else if file_count > 1000 { 1000 } else { file_count }; let continue_read = arg_matchers.is_present("continue-read"); @@ -53,7 +55,7 @@ fn main() { .expect("Create daemon err file failed"); let current_dir = std::env::current_dir().expect("Get current dir failed"); let daemonize = Daemonize::new() - .pid_file(&format!("/tmp/rotate-puts-daemon-{}.pid", ident)) + .pid_file(format!("/tmp/rotate-puts-daemon-{}.pid", ident)) // .chown_pid_file(true) // is optional, see `Daemonize` documentation .working_directory(current_dir) // for default behaviour. // .user("nobody") @@ -80,7 +82,7 @@ fn main() { let file_name = make_new_file_name(&prefix, &suffix, file_count, &mut file_index); let mut out_file = BufWriter::new(File::create(&file_name) - .expect(&format!("Create file failed: {}", file_name))); + .unwrap_or_else(|_| panic!("Create file failed: {}", file_name))); let mut last_write_time = SystemTime::now(); let mut write_buffer = Vec::with_capacity(1024 * 8); @@ -129,8 +131,10 @@ fn main() { if written_len >= file_size { written_len = 0; let file_name = make_new_file_name(&prefix, &suffix, file_count, &mut file_index); - out_file = BufWriter::new(File::create(&file_name) - .expect(&format!("Create file failed: {}", file_name))); + out_file = BufWriter::new( + File::create(&file_name) + .unwrap_or_else(|_| panic!("Create file failed: {}", file_name)) + ); } } } @@ -138,18 +142,20 @@ fn main() { } }); + let file_opt = arg_matchers.value_of("file"); + loop_read_and_send(&file_opt, sender, continue_read); + + information!("End rotate-puts") +} + +fn loop_read_and_send(file_opt: &Option<&str>, sender: Sender>, continue_read: bool) { let mut continue_read_count = 0; information!("Continue read: {}", continue_read); 'read_open_loop: while continue_read || (continue_read_count == 0) { if continue_read_count > 0 { information!("Continue read at #{}", continue_read_count); } continue_read_count += 1; - let file_opt = arg_matchers.value_of("file"); - let mut read_in: Box = if let Some(file) = file_opt { - let file_read = File::open(file).expect("Open file failed!"); - Box::new(file_read) - } else { - Box::new(std::io::stdin()) - }; + + let mut read_in = get_read_in(file_opt); let mut buff = [0_u8; 128]; loop { @@ -172,7 +178,15 @@ fn main() { } } } - information!("End rotate-puts") +} + +fn get_read_in(file_opt: &Option<&str>) -> Box { + if let Some(file) = file_opt { + let file_read = File::open(file).expect("Open file failed!"); + Box::new(file_read) + } else { + Box::new(std::io::stdin()) + } } fn make_new_file_name(prefix: &str, suffix: &str, file_count: i32, index: &mut i32) -> String { @@ -180,9 +194,9 @@ fn make_new_file_name(prefix: &str, suffix: &str, file_count: i32, index: &mut i *index = i + 1; let pending_rm = generate_file_name(prefix, suffix, i - file_count); - if let Ok(_) = std::fs::metadata(&pending_rm) { + if fs::metadata(&pending_rm).is_ok() { println!("[INFO] Remove log file: {}", &pending_rm); - std::fs::remove_file(&pending_rm).ok(); + fs::remove_file(&pending_rm).ok(); } let file_name = generate_file_name(prefix, suffix, i);