feat: optimize code

This commit is contained in:
2023-10-28 09:06:35 +08:00
parent 68c6732c4b
commit 97a0b851b2
2 changed files with 46 additions and 32 deletions

32
Cargo.lock generated
View File

@@ -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"

View File

@@ -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<Vec<u8>>, 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<dyn Read> = 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<dyn Read> {
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);