From cda329d361cdf4d1d13dbdb58e38c1e5e049762e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 10 Apr 2021 17:10:29 +0200 Subject: send parallel ping commands --- mumctl/src/main.rs | 58 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) (limited to 'mumctl/src') diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index 29c9e44..07e5064 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -3,7 +3,11 @@ use log::*; use mumlib::command::{Command as MumCommand, CommandResponse}; use mumlib::config::{self, Config, ServerConfig}; use mumlib::state::Channel as MumChannel; -use std::{fmt,io::{self, BufRead, Read, Write}, iter, os::unix::net::UnixStream}; +use std::fmt; +use std::io::{self, BufRead, Read, Write}; +use std::iter; +use std::os::unix::net::UnixStream; +use std::thread; use structopt::{clap::Shell, StructOpt}; const INDENTATION: &str = " "; @@ -363,7 +367,7 @@ fn match_opt() -> Result<(), Error> { Ok(()) } -fn match_server_command(server_command: Server, config: &mut Config) -> Result<(), CliError> { +fn match_server_command(server_command: Server, config: &mut Config) -> Result<(), Error> { match server_command { Server::Config { server_name, @@ -496,29 +500,39 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( if config.servers.is_empty() { return Err(CliError::NoServers)?; } - let query = config + let queries: Vec<_> = config .servers .iter() - .map(|e| { - let response = send_command(MumCommand::ServerStatus { - host: e.host.clone(), - port: e.port.unwrap_or(mumlib::DEFAULT_PORT), - }); - response.map(|f| (e, f)) + .map(|s| { + let query = MumCommand::ServerStatus { + host: s.host.clone(), + port: s.port.unwrap_or(mumlib::DEFAULT_PORT), + }; + thread::spawn(move || { + send_command(query) + }) }) - .collect::, _>>()?; - for (server, response) in query - .into_iter() - .filter(|e| e.1.is_ok()) - .map(|e| (e.0, e.1.unwrap().unwrap())) - { - if let CommandResponse::ServerStatus { - users, max_users, .. - } = response - { - println!("{} [{}/{}]", server.name, users, max_users) - } else { - unreachable!() + .collect(); + for (server, response) in config.servers.iter().zip(queries) { + match response.join().unwrap() { + Ok(Ok(response)) => { + if let Some(CommandResponse::ServerStatus { + users, max_users, .. + }) = response + { + println!("{} [{}/{}]", server.name, users, max_users) + } else { + unreachable!() + } + } + Ok(Err(e)) => { + error!("{}", e); + return Err(e)?; + } + Err(e) => { + error!("{}", e); + return Err(e)?; + } } } } -- cgit v1.2.1 From 7e848151aea0ad579acbd51125907d96cc67438b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sat, 10 Apr 2021 19:28:37 +0200 Subject: timeout server pings --- mumctl/src/main.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'mumctl/src') diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index 07e5064..4ce7fc1 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -515,16 +515,21 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( .collect(); for (server, response) in config.servers.iter().zip(queries) { match response.join().unwrap() { - Ok(Ok(response)) => { - if let Some(CommandResponse::ServerStatus { - users, max_users, .. - }) = response + Ok(Ok(Some(response))) => { + if let CommandResponse::ServerStatus { + users, + max_users, + .. + } = response { - println!("{} [{}/{}]", server.name, users, max_users) + println!("{} [{}/{}]", server.name, users, max_users); } else { - unreachable!() + unreachable!(); } } + Ok(Ok(None)) => { + println!("{} offline", server.name); + } Ok(Err(e)) => { error!("{}", e); return Err(e)?; -- cgit v1.2.1 From dc318b332a0f75349744684f8b05ff188611cbc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 11 Apr 2021 00:29:09 +0200 Subject: align server status output --- mumctl/src/main.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'mumctl/src') diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index 4ce7fc1..dbd62c6 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -500,6 +500,15 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( if config.servers.is_empty() { return Err(CliError::NoServers)?; } + + let longest = config + .servers + .iter() + .map(|s| s.name.len()) + .max() + .unwrap() // ok since !config.servers.is_empty() above + + 1; + let queries: Vec<_> = config .servers .iter() @@ -513,6 +522,7 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( }) }) .collect(); + for (server, response) in config.servers.iter().zip(queries) { match response.join().unwrap() { Ok(Ok(Some(response))) => { @@ -522,13 +532,13 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( .. } = response { - println!("{} [{}/{}]", server.name, users, max_users); + println!("{0:<1$} [{2:}/{3:}]", server.name, longest, users, max_users); } else { unreachable!(); } } Ok(Ok(None)) => { - println!("{} offline", server.name); + println!("{0:<1$} offline", server.name, longest); } Ok(Err(e)) => { error!("{}", e); -- cgit v1.2.1 From 1be49aaaab973eccf6f47cab36a4f3530143445a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 11 Apr 2021 22:00:04 +0200 Subject: ? -> into --- mumctl/src/main.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'mumctl/src') diff --git a/mumctl/src/main.rs b/mumctl/src/main.rs index dbd62c6..5abed50 100644 --- a/mumctl/src/main.rs +++ b/mumctl/src/main.rs @@ -301,7 +301,7 @@ fn match_opt() -> Result<(), Error> { } } _ => { - return Err(CliError::ConfigKeyNotFound(key))?; + return Err(CliError::ConfigKeyNotFound(key).into()); } }, Command::ConfigReload => { @@ -477,7 +477,7 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( password, } => { if config.servers.iter().any(|s| s.name == name) { - return Err(CliError::ServerAlreadyExists(name))?; + return Err(CliError::ServerAlreadyExists(name).into()); } else { config.servers.push(ServerConfig { name, @@ -498,7 +498,7 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( } Server::List => { if config.servers.is_empty() { - return Err(CliError::NoServers)?; + return Err(CliError::NoServers.into()); } let longest = config @@ -542,11 +542,11 @@ fn match_server_command(server_command: Server, config: &mut Config) -> Result<( } Ok(Err(e)) => { error!("{}", e); - return Err(e)?; + return Err(e.into()); } Err(e) => { error!("{}", e); - return Err(e)?; + return Err(e.into()); } } } -- cgit v1.2.1