use std::path::Path;
use anyhow::Result;
use broker_client::{connect_retry, probe};
use config::Config;
pub(super) async fn ensure_running(
cfg: &Config,
device: Option<&str>,
config_path: Option<&Path>,
) -> Result<()> {
let addr = super::resolve_addr(cfg, device);
if probe(addr).await {
tracing::debug!("broker: reusing already-running broker/daemon for {addr}");
return Ok(());
}
tracing::debug!("broker: none reachable for {addr}, spawning ephemeral broker");
let log_path = config::broker_log_path(addr);
let mut child =
imsg_proc::respawn_self(&["__broker_serve"], addr, config_path, &log_path, false, false)
.await?;
connect_retry(
addr,
&mut child,
&log_path,
cfg.broker.readiness_wait(),
cfg.broker.readiness_poll(),
)
.await
}