adding switch
This commit is contained in:
parent
70178cb8d6
commit
5b983d5e34
2 changed files with 43 additions and 11 deletions
41
src/main.rs
41
src/main.rs
|
@ -63,10 +63,13 @@ fn handle_request(
|
||||||
|
|
||||||
fn perform_request(
|
fn perform_request(
|
||||||
_req: Request<Body>,
|
_req: Request<Body>,
|
||||||
_options: &Options,
|
options: &Options,
|
||||||
) -> impl Future<Item = Response<Body>, Error = ExporterError> {
|
) -> impl Future<Item = Response<Body>, Error = ExporterError> {
|
||||||
trace!("perform_request");
|
trace!("perform_request");
|
||||||
|
|
||||||
|
// this is needed to satisfy the borrow checker
|
||||||
|
let options = options.clone();
|
||||||
|
|
||||||
done(
|
done(
|
||||||
Command::new("wg")
|
Command::new("wg")
|
||||||
.arg("show")
|
.arg("show")
|
||||||
|
@ -76,14 +79,29 @@ fn perform_request(
|
||||||
)
|
)
|
||||||
.from_err()
|
.from_err()
|
||||||
.and_then(|output| {
|
.and_then(|output| {
|
||||||
done(String::from_utf8(output.stdout))
|
if let Some(extract_names_config_file) = options.extract_names_config_file {
|
||||||
.from_err()
|
Either::A(
|
||||||
.and_then(|output_str| {
|
done(String::from_utf8(output.stdout))
|
||||||
trace!("{}", output_str);
|
|
||||||
done(WireGuard::try_from(&output_str as &str))
|
|
||||||
.from_err()
|
.from_err()
|
||||||
.and_then(|wg| ok(Response::new(Body::from(wg.render()))))
|
.and_then(|output_str| {
|
||||||
})
|
trace!("{}", output_str);
|
||||||
|
done(WireGuard::try_from(&output_str as &str))
|
||||||
|
.from_err()
|
||||||
|
.and_then(|wg| ok(Response::new(Body::from(wg.render()))))
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
Either::B(
|
||||||
|
done(String::from_utf8(output.stdout))
|
||||||
|
.from_err()
|
||||||
|
.and_then(|output_str| {
|
||||||
|
trace!("{}", output_str);
|
||||||
|
done(WireGuard::try_from(&output_str as &str))
|
||||||
|
.from_err()
|
||||||
|
.and_then(|wg| ok(Response::new(Body::from(wg.render()))))
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +112,7 @@ fn main() {
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("port")
|
Arg::with_name("port")
|
||||||
.short("p")
|
.short("p")
|
||||||
.help("exporter port (default 9576)")
|
.help("exporter port")
|
||||||
.default_value("9576")
|
.default_value("9576")
|
||||||
.takes_value(true),
|
.takes_value(true),
|
||||||
)
|
)
|
||||||
|
@ -104,6 +122,11 @@ fn main() {
|
||||||
.help("verbose logging")
|
.help("verbose logging")
|
||||||
.takes_value(false),
|
.takes_value(false),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("extract_names_config_file")
|
||||||
|
.short("n")
|
||||||
|
.help("If set, the exporter will look in the specified WireGuard config file for peer names (must be in [Peer] definition and be a comment)")
|
||||||
|
.takes_value(true))
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let options = Options::from_claps(&matches);
|
let options = Options::from_claps(&matches);
|
||||||
|
|
|
@ -1,12 +1,21 @@
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub(crate) struct Options {
|
pub(crate) struct Options {
|
||||||
pub verbose: bool,
|
pub verbose: bool,
|
||||||
|
pub extract_names_config_file: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Options {
|
impl Options {
|
||||||
pub fn from_claps(matches: &clap::ArgMatches<'_>) -> Options {
|
pub fn from_claps(matches: &clap::ArgMatches<'_>) -> Options {
|
||||||
Options {
|
if let Some(e) = matches.value_of("extract_names_config_file") {
|
||||||
verbose: matches.is_present("verbose"),
|
Options {
|
||||||
|
verbose: matches.is_present("verbose"),
|
||||||
|
extract_names_config_file: Some(e.to_owned()),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Options {
|
||||||
|
verbose: matches.is_present("verbose"),
|
||||||
|
extract_names_config_file: None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue