server: Fix healthcheck return code

The healthcheck was not returning a non-zero code when failing, due to
an extra layer of Results
This commit is contained in:
Valentin Tolmer 2023-01-16 16:56:55 +01:00 committed by nitnelave
parent 955a559c21
commit f979e16b95
2 changed files with 14 additions and 7 deletions

View File

@ -99,6 +99,7 @@ fn get_tls_connector() -> Result<RustlsTlsConnector> {
#[instrument(skip_all, level = "info", err)] #[instrument(skip_all, level = "info", err)]
pub async fn check_ldaps(ldaps_options: &LdapsOptions) -> Result<()> { pub async fn check_ldaps(ldaps_options: &LdapsOptions) -> Result<()> {
if !ldaps_options.enabled { if !ldaps_options.enabled {
info!("LDAPS not enabled");
return Ok(()); return Ok(());
}; };
let tls_connector = get_tls_connector()?; let tls_connector = get_tls_connector()?;

View File

@ -158,6 +158,8 @@ fn run_healthcheck(opts: RunOpts) -> Result<()> {
.enable_all() .enable_all()
.build()?; .build()?;
info!("Starting healthchecks");
use tokio::time::timeout; use tokio::time::timeout;
let delay = Duration::from_millis(3000); let delay = Duration::from_millis(3000);
let (ldap, ldaps, api) = runtime.block_on(async { let (ldap, ldaps, api) = runtime.block_on(async {
@ -168,14 +170,18 @@ fn run_healthcheck(opts: RunOpts) -> Result<()> {
) )
}); });
let mut failure = false; let failure = [ldap, ldaps, api]
[ldap, ldaps, api]
.into_iter() .into_iter()
.filter_map(Result::err) .flat_map(|res| {
.for_each(|e| { if let Err(e) = &res {
failure = true; error!("Error running the health check: {:#}", e);
error!("{:#}", e) }
}); res
})
.any(|r| r.is_err());
if failure {
error!("Healthcheck failed");
}
std::process::exit(i32::from(failure)) std::process::exit(i32::from(failure))
} }