1use std::fs;
2use std::path::PathBuf;
3
4pub fn cleanup_old_logs(
6 directory: &str,
7 filename: &str,
8 count_limit: u32,
9) -> Result<(), std::io::Error> {
10 if count_limit == 0 {
11 return Ok(()); }
13
14 let dir_path = PathBuf::from(directory);
15 if !dir_path.exists() {
16 return Ok(());
17 }
18
19 let mut log_files: Vec<(u32, PathBuf)> = Vec::new();
21
22 if let Ok(entries) = fs::read_dir(&dir_path) {
23 for entry in entries {
24 if let Ok(entry) = entry {
25 if let Some(name) = entry.file_name().to_str() {
26 if name == format!("{}.log", filename) {
28 log_files.push((0, entry.path()));
29 }
30 if name.starts_with(&format!("{}.", filename)) || name.starts_with(&format!("{}-", filename)) {
32 if let Some(index_str) = name.strip_prefix(&format!("{}.", filename)) {
33 if let Ok(index) = index_str.parse::<u32>() {
35 log_files.push((index, entry.path()));
36 }
37 }
38 }
39 }
40 }
41 }
42 }
43
44 log_files.sort_by_key(|k| k.0);
46
47 if log_files.len() > count_limit as usize {
48 let to_delete = log_files.len() - count_limit as usize;
49 for (_, path) in log_files.iter().take(to_delete) {
50 let _ = fs::remove_file(path);
51 }
52 }
53
54 Ok(())
55}
56
57pub fn check_log_file_size(
59 directory: &str,
60 filename: &str,
61 size_limit_mb: u64,
62) -> Result<bool, std::io::Error> {
63 if size_limit_mb == 0 {
64 return Ok(false); }
66
67 let log_path = PathBuf::from(directory).join(format!("{}.log", filename));
68
69 if log_path.exists() {
70 let size_bytes = fs::metadata(&log_path)?.len();
71 let size_mb = size_bytes / (1024 * 1024);
72 Ok(size_mb > size_limit_mb)
73 } else {
74 Ok(false)
75 }
76}
77