Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
hkctkuy authored and hkctkuy committed Dec 13, 2023
1 parent 576c61b commit 85d7b7f
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 31 deletions.
33 changes: 13 additions & 20 deletions casr/src/bin/casr-cluster.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ fn make_clusters(
}

// Get casreps with stacktraces and crashlines
let (casreps, stacktraces, crashlines, badreports) = util::reports_from_dirs(casreps, jobs);
let (casreps, stacktraces, crashlines, badreports) = util::reports_from_paths(casreps, jobs);

if !badreports.is_empty() {
fs::create_dir_all(format!("{}/clerr", &outpath.display()))?;
Expand Down Expand Up @@ -336,7 +336,7 @@ fn update_clusters(
) -> Result<(usize, usize, usize, usize, usize, usize)> {
// Get new casreps
let casreps = util::get_reports(newpath)?;
let (casreps, stacktraces, crashlines, _) = util::reports_from_dirs(casreps, jobs);
let (casreps, stacktraces, crashlines, _) = util::reports_from_paths(casreps, jobs);
let casreps = casreps
.iter()
.zip(stacktraces.iter().zip(crashlines.iter()));
Expand All @@ -346,12 +346,8 @@ fn update_clusters(
.unwrap()
.map(|path| path.unwrap().path())
.filter(|path| {
path.clone()
.file_name()
.unwrap()
.to_str()
.unwrap()
.starts_with("cl")
let name = path.file_name().unwrap().to_str().unwrap();
name.starts_with("cl") && !name.starts_with("clerr")
})
.collect();
cluster_dirs.sort();
Expand All @@ -363,15 +359,13 @@ fn update_clusters(
// Get casreps from each existing cluster
for cluster in &cluster_dirs {
// Get cluster number
let Ok(i) = cluster.clone().file_name().unwrap().to_str().unwrap()[2..]
let i = cluster.clone().file_name().unwrap().to_str().unwrap()[2..]
.to_string()
.parse::<usize>()
else {
continue;
};
.unwrap();
// Get casreps from cluster
let casreps = util::get_reports(cluster)?;
let (_, stacktraces, crashlines, _) = util::reports_from_dirs(casreps, jobs);
let (_, stacktraces, crashlines, _) = util::reports_from_paths(casreps, jobs);
// Fill cluster info structures
clusters.push(Cluster::new(i, stacktraces));
if dedup {
Expand Down Expand Up @@ -496,12 +490,8 @@ fn avg_sil(dir: &Path, jobs: usize) -> Result<f64> {
.unwrap()
.map(|path| path.unwrap().path())
.filter(|path| {
path.clone()
.file_name()
.unwrap()
.to_str()
.unwrap()
.starts_with("cl")
let name = path.file_name().unwrap().to_str().unwrap();
name.starts_with("cl") && !name.starts_with("clerr")
})
.collect();
dirs.sort();
Expand All @@ -519,12 +509,15 @@ fn avg_sil(dir: &Path, jobs: usize) -> Result<f64> {
// Get casreps from cluster
let casreps = util::get_reports(dir)?;
// Get stacktraces from cluster
let (_, stacktraces, _, _) = util::reports_from_dirs(casreps, jobs);
let (_, stacktraces, _, _) = util::reports_from_paths(casreps, jobs);
// Update size
size += stacktraces.len();
// Add stacktraces
clusters.push(stacktraces);
}
if size == 0 {
bail!("{} valid reports, nothing to calculate...", size);

Check warning on line 519 in casr/src/bin/casr-cluster.rs

View check run for this annotation

Codecov / codecov/patch

casr/src/bin/casr-cluster.rs#L519

Added line #L519 was not covered by tests
}
// Init sil sum
let mut sum = 0f64;
// Calculate silhouette coefficient for each casrep
Expand Down
2 changes: 1 addition & 1 deletion casr/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,7 @@ pub fn get_reports(dir: &Path) -> Result<Vec<PathBuf>> {
/// * A vector of reports stacktraces
/// * A vector of reports crashlines
/// * A vector of bad reports
pub fn reports_from_dirs(
pub fn reports_from_paths(
casreps: Vec<PathBuf>,
jobs: usize,
) -> (Vec<PathBuf>, Vec<Stacktrace>, Vec<String>, Vec<PathBuf>) {
Expand Down
20 changes: 10 additions & 10 deletions libcasr/src/stacktrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -445,11 +445,11 @@ fn diam(stacktraces: &[Stacktrace]) -> f64 {
/// "a" subcoefficient silhouette coefficient
fn sil_subcoef_a(num: usize, stacktraces: &[Stacktrace]) -> f64 {
let mut sum = 0f64;
for i in 0..stacktraces.len() {
for (i, stacktrace) in stacktraces.iter().enumerate() {
if i == num {
continue;
}
sum += 1.0 - similarity(&stacktraces[num], &stacktraces[i]);
sum += 1.0 - similarity(&stacktraces[num], stacktrace);
}
sum / (stacktraces.len() - 1) as f64
}
Expand All @@ -461,24 +461,24 @@ fn sil_subcoef_a(num: usize, stacktraces: &[Stacktrace]) -> f64 {
///
/// * `num` - given stacktrace number
///
/// * `cl` - cluster number of given stacktrace
/// * `i` - cluster number of given stacktrace
///
/// * `clusters` - a vector of clusters represented as slice of `Stacktrace` structures
///
/// # Return value
///
/// "b" subcoefficient silhouette coefficient
fn sil_subcoef_b(num: usize, cl: usize, clusters: &[Vec<Stacktrace>]) -> f64 {
fn sil_subcoef_b(num: usize, i: usize, clusters: &[Vec<Stacktrace>]) -> f64 {
let mut min = MAX;
for j in 0..clusters.len() {
if j == cl {
for (j, cluster) in clusters.iter().enumerate() {
if j == i {
continue;
}
let mut sum = 0f64;
for i in 0..clusters[j].len() {
sum += 1.0 - similarity(&clusters[cl][num], &clusters[j][i]);
for stacktrace in cluster {
sum += 1.0 - similarity(&clusters[i][num], stacktrace);
}
let res = sum / clusters[j].len() as f64;
let res = sum / cluster.len() as f64;
if res < min {
min = res;
}
Expand All @@ -499,7 +499,7 @@ fn sil_subcoef_b(num: usize, cl: usize, clusters: &[Vec<Stacktrace>]) -> f64 {
///
/// # Return value
///
/// "b" subcoefficient silhouette coefficient
/// Silhouette coefficient
pub fn sil_coef(num: usize, i: usize, clusters: &[Vec<Stacktrace>]) -> f64 {
if clusters[i].len() != 1 {
let a = sil_subcoef_a(num, &clusters[i]);
Expand Down

0 comments on commit 85d7b7f

Please sign in to comment.