diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-03-05 16:35:25 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-03-07 21:50:29 +0100 |
commit | 3cadfc1e9a65d46c818d4209a0c4dde3aaed0032 (patch) | |
tree | dcc3d8f23d2e8ae29436ceb5f76da46d823e3480 | |
parent | 5f09cc0bbb5c72774431638b3a52cde59d089831 (diff) |
Outsource connecting to endpoints
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
-rw-r--r-- | src/commands/endpoint.rs | 81 |
1 files changed, 32 insertions, 49 deletions
diff --git a/src/commands/endpoint.rs b/src/commands/endpoint.rs index 41dae04..78f2556 100644 --- a/src/commands/endpoint.rs +++ b/src/commands/endpoint.rs @@ -20,6 +20,7 @@ use tokio_stream::StreamExt; use crate::config::Configuration; use crate::util::progress::ProgressBars; +use crate::endpoint::Endpoint; pub async fn endpoint(matches: &ArgMatches, config: &Configuration, progress_generator: ProgressBars) -> Result<()> { let endpoint_names = matches @@ -50,30 +51,7 @@ async fn ping(endpoint_names: Vec<String>, ) -> Result<()> { let n_pings = matches.value_of("ping_n").map(u64::from_str).transpose()?.unwrap(); // safe by clap let sleep = matches.value_of("ping_sleep").map(u64::from_str).transpose()?.unwrap(); // safe by clap - - let endpoint_configurations = config - .docker() - .endpoints() - .iter() - .filter(|ep| endpoint_names.contains(ep.name())) - .cloned() - .map(|ep_cfg| { - crate::endpoint::EndpointConfiguration::builder() - .endpoint(ep_cfg) - .required_images(config.docker().images().clone()) - .required_docker_versions(config.docker().docker_versions().clone()) - .required_docker_api_versions(config.docker().docker_api_versions().clone()) - .build() - }) - .collect::<Vec<_>>(); - - info!("Endpoint config build"); - info!("Connecting to {n} endpoints: {eps}", - n = endpoint_configurations.len(), - eps = endpoint_configurations.iter().map(|epc| epc.endpoint().name()).join(", ")); - - let endpoints = crate::endpoint::util::setup_endpoints(endpoint_configurations).await?; - + let endpoints = connect_to_endpoints(config, &endpoint_names).await?; let multibar = Arc::new({ let mp = indicatif::MultiProgress::new(); if progress_generator.hide() { @@ -119,34 +97,11 @@ async fn stats(endpoint_names: Vec<String>, progress_generator: ProgressBars ) -> Result<()> { let csv = matches.is_present("csv"); - - let endpoint_configurations = config - .docker() - .endpoints() - .iter() - .filter(|ep| endpoint_names.contains(ep.name())) - .cloned() - .map(|ep_cfg| { - crate::endpoint::EndpointConfiguration::builder() - .endpoint(ep_cfg) - .required_images(config.docker().images().clone()) - .required_docker_versions(config.docker().docker_versions().clone()) - .required_docker_api_versions(config.docker().docker_api_versions().clone()) - .build() - }) - .collect::<Vec<_>>(); - - info!("Endpoint config build"); - info!("Connecting to {n} endpoints: {eps}", - n = endpoint_configurations.len(), - eps = endpoint_configurations.iter().map(|epc| epc.endpoint().name()).join(", ")); - + let endpoints = connect_to_endpoints(config, &endpoint_names).await?; let bar = progress_generator.bar(); - bar.set_length(endpoint_configurations.len() as u64); + bar.set_length(endpoint_names.len() as u64); bar.set_message("Fetching stats"); - let endpoints = crate::endpoint::util::setup_endpoints(endpoint_configurations).await?; - let hdr = crate::commands::util::mk_header([ "Name", "Containers", @@ -195,3 +150,31 @@ async fn stats(endpoint_names: Vec<String>, bar.finish_with_message("Fetching stats successful"); crate::commands::util::display_data(hdr, data, csv) } + + +/// Helper function to connect to all endpoints from the configuration, that appear (by name) in +/// the `endpoint_names` list +async fn connect_to_endpoints(config: &Configuration, endpoint_names: &[String]) -> Result<Vec<Arc<Endpoint>>> { + let endpoint_configurations = config + .docker() + .endpoints() + .iter() + .filter(|ep| endpoint_names.contains(ep.name())) + .cloned() + .map(|ep_cfg| { + crate::endpoint::EndpointConfiguration::builder() + .endpoint(ep_cfg) + .required_images(config.docker().images().clone()) + .required_docker_versions(config.docker().docker_versions().clone()) + .required_docker_api_versions(config.docker().docker_api_versions().clone()) + .build() + }) + .collect::<Vec<_>>(); + + info!("Endpoint config build"); + info!("Connecting to {n} endpoints: {eps}", + n = endpoint_configurations.len(), + eps = endpoint_configurations.iter().map(|epc| epc.endpoint().name()).join(", ")); + + crate::endpoint::util::setup_endpoints(endpoint_configurations).await +} |