Skip to content

Commit

Permalink
feat(sysctl): support listing parameters by subsection (#44)
Browse files Browse the repository at this point in the history
  • Loading branch information
orhun committed Sep 6, 2022
1 parent 51d9fbe commit 59138e8
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
7 changes: 4 additions & 3 deletions systeroid-core/src/sysctl/controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,14 @@ impl Sysctl {

/// Returns the parameters that matches the given query.
pub fn get_parameters(&self, query: &str) -> Vec<&Parameter> {
let query = query.replace('/', ".");
let parameters = self
.parameters
.iter()
.filter(|param| {
param.name == query.replace('/', ".")
|| param.section.to_string() == query
|| param.get_absolute_name() == Some(&query.replace('/', "."))
param.name == query
|| param.get_absolute_name() == Some(&query)
|| param.is_in_section(&query)
})
.collect::<Vec<&Parameter>>();
if parameters.is_empty() && !self.config.cli.ignore_errors {
Expand Down
29 changes: 29 additions & 0 deletions systeroid-core/src/sysctl/parameter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,22 @@ impl Parameter {
}
Ok(())
}

/// Performs a search for given query and returns true if
/// the parameter is in the given sub/section.
pub fn is_in_section(&self, query: &str) -> bool {
let mut subsection = self.section.to_string();
let mut components = self.name.split('.').skip(1).peekable();
while let Some(component) = components.next() {
if query == subsection {
return true;
}
if components.peek().is_some() {
subsection = format!("{}.{}", subsection, component)
}
}
false
}
}

#[cfg(test)]
Expand Down Expand Up @@ -288,6 +304,19 @@ mod tests {
.update_value("0", &config, &mut Vec::new())
.is_err());

parameter.name = String::from("kernel.fictional.testing.xyz.parameter");
assert!(parameter.is_in_section(&parameter.section.to_string()));
assert!(parameter.is_in_section("kernel"));
assert!(parameter.is_in_section("kernel.fictional"));
assert!(parameter.is_in_section("kernel.fictional.testing"));
assert!(parameter.is_in_section("kernel.fictional.testing.xyz"));
assert!(!parameter.is_in_section("xyz"));
assert!(!parameter.is_in_section("test"));
assert!(!parameter.is_in_section("ker"));
assert!(!parameter.is_in_section("kernel.fi"));
assert!(!parameter.is_in_section("kernel.fictional.tes"));
assert!(!parameter.is_in_section(&parameter.name));

Ok(())
}
}

0 comments on commit 59138e8

Please sign in to comment.