Skip to content

Commit 82b369c

Browse files
flearcForsworns
authored andcommitted
fix: fix form_metric_filename
1 parent 950b4fa commit 82b369c

File tree

2 files changed

+137
-7
lines changed

2 files changed

+137
-7
lines changed

sentinel-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ mockall = "0.11.0"
8181
rand = "0.8.4"
8282
tokio = { version = "1", features = ["full"] }
8383
url = "2.5.0"
84+
tempfile = "3"
8485

8586
[lib]
8687
doctest = false

sentinel-core/src/core/log/metric/mod.rs

Lines changed: 136 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,20 @@ pub trait MetricSearcher {
5858

5959
// Generate the metric file name from the service name.
6060
fn form_metric_filename(service_name: &str, with_pid: bool) -> String {
61-
let dot = ".";
6261
let separator = "-";
63-
let mut filename = String::new();
64-
if service_name.contains(dot) {
65-
filename = service_name.replace(dot, separator);
66-
}
67-
let mut filename = format!("{}{}{}", filename, separator, METRIC_FILENAME_SUFFIX);
62+
let mut filename = if service_name.contains('.') {
63+
service_name.replace('.', separator)
64+
} else {
65+
service_name.to_string()
66+
};
67+
68+
filename.push_str(&format!("{}{}", separator, METRIC_FILENAME_SUFFIX));
69+
6870
if with_pid {
6971
let pid = std::process::id();
70-
filename = format!("{}.pid{}", filename, pid);
72+
filename.push_str(&format!(".pid{}", pid));
7173
}
74+
7275
filename
7376
}
7477

@@ -147,3 +150,129 @@ fn filename_comparator(file1: &PathBuf, file2: &PathBuf) -> Ordering {
147150
// same date, compare the file number
148151
name1.cmp(name2)
149152
}
153+
154+
#[cfg(test)]
155+
mod tests {
156+
use std::{
157+
fs::File,
158+
path::{Path, PathBuf},
159+
};
160+
161+
use tempfile::tempdir;
162+
163+
use crate::log::metric::{
164+
filename_comparator, filename_matches, form_metric_filename, list_metric_files,
165+
};
166+
167+
#[test]
168+
fn test_form_metric_filename() {
169+
let app_name1 = "foo-test";
170+
let app_name2 = "foo.test";
171+
let mf1 = form_metric_filename(app_name1, false);
172+
let mf2 = form_metric_filename(app_name2, false);
173+
assert_eq!("foo-test-metrics.log", mf1);
174+
assert_eq!(mf1, mf2);
175+
176+
let mf1_pid = form_metric_filename(app_name2, true);
177+
assert!(mf1_pid.ends_with(&std::process::id().to_string()));
178+
}
179+
180+
#[test]
181+
fn test_filename_matches() {
182+
let test_cases = vec![
183+
(
184+
"~/logs/csp/app1-metric.log.2018-12-24.1111",
185+
"~/logs/csp/app1-metric.log",
186+
true,
187+
),
188+
(
189+
"~/logs/csp/app1-metric.log-2018-12-24.1111",
190+
"~/logs/csp/app1-metric.log",
191+
false,
192+
),
193+
(
194+
"~/logs/csp/app2-metric.log.2018-12-24.1111",
195+
"~/logs/csp/app1-metric.log",
196+
false,
197+
),
198+
];
199+
200+
for (filename, base_filename, expected) in test_cases {
201+
assert_eq!(filename_matches(filename, base_filename), expected);
202+
}
203+
}
204+
205+
#[test]
206+
fn test_filename_comparator_no_pid() {
207+
let mut arr = vec![
208+
PathBuf::from("metrics.log.2018-03-06"),
209+
PathBuf::from("metrics.log.2018-03-07"),
210+
PathBuf::from("metrics.log.2018-03-07.51"),
211+
PathBuf::from("metrics.log.2018-03-07.10"),
212+
PathBuf::from("metrics.log.2018-03-06.100"),
213+
];
214+
arr.sort_by(filename_comparator);
215+
216+
let expected = vec![
217+
PathBuf::from("metrics.log.2018-03-06"),
218+
PathBuf::from("metrics.log.2018-03-06.100"),
219+
PathBuf::from("metrics.log.2018-03-07"),
220+
PathBuf::from("metrics.log.2018-03-07.10"),
221+
PathBuf::from("metrics.log.2018-03-07.51"),
222+
];
223+
224+
assert_eq!(expected, arr);
225+
}
226+
227+
#[test]
228+
fn test_filename_comparator_with_pid() {
229+
let mut arr = vec![
230+
PathBuf::from("metrics.log.pid21879.2018-03-06"),
231+
PathBuf::from("metrics.log.pid21879.2018-03-07"),
232+
PathBuf::from("metrics.log.pid21879.2018-03-07.51"),
233+
PathBuf::from("metrics.log.pid21879.2018-03-07.10"),
234+
PathBuf::from("metrics.log.pid21879.2018-03-06.100"),
235+
];
236+
arr.sort_by(filename_comparator);
237+
238+
let expected = vec![
239+
PathBuf::from("metrics.log.pid21879.2018-03-06"),
240+
PathBuf::from("metrics.log.pid21879.2018-03-06.100"),
241+
PathBuf::from("metrics.log.pid21879.2018-03-07"),
242+
PathBuf::from("metrics.log.pid21879.2018-03-07.10"),
243+
PathBuf::from("metrics.log.pid21879.2018-03-07.51"),
244+
];
245+
246+
assert_eq!(expected, arr);
247+
}
248+
249+
#[test]
250+
fn test_list_metric_files() {
251+
let temp_dir = tempdir().expect("Failed to create temporary directory");
252+
253+
let base_dir = temp_dir.path().to_path_buf();
254+
let file_pattern = Path::new("app1-metrics.log");
255+
256+
// Create temporary files and directories for testing
257+
let paths = [
258+
"app1-metrics.log.2020-02-14",
259+
"app1-metrics.log.2020-02-14.12",
260+
"app1-metrics.log.2020-02-14.32",
261+
"app1-metrics.log.2020-02-15",
262+
"app1-metrics.log.2020-02-16",
263+
"app1-metrics.log.2020-02-16.100",
264+
"app2-metrics.log.2020-02-14",
265+
];
266+
267+
for path in paths.iter() {
268+
let file_path = temp_dir.path().join(path);
269+
File::create(&file_path).expect("Failed to create test file");
270+
}
271+
272+
let result =
273+
list_metric_files(&base_dir, file_pattern).expect("Failed to list metric files");
274+
275+
// Assert that the number of files found matches the expected count
276+
assert_eq!(result.len(), 6);
277+
}
278+
}

0 commit comments

Comments
 (0)