use post::find_service::Client;
pub struct FindService {
_proc: tokio::process::Child,
client: post::find_service::Client,
}
pub async fn retry_client(url: &'static str) -> post::find_service::Client {
let retries: i32 = 10;
let mut retry: i32 = 0;
loop {
if retry >= retries {
panic!("Retries exceeded");
}
if let Ok(mut client) = post::find_service::Client::from_url(url)
.unwrap()
.set_connect_timeout(std::time::Duration::from_secs(60))
.connect()
.await
{
log::info!("client works, checking status");
if client.server_status().await.is_ok() {
break client;
}
}
log::info!("Client retry");
tokio::time::delay_for(tokio::time::Duration::from_millis(500)).await;
retry += 1;
}
}
impl FindService {
pub async fn new() -> FindService {
log::info!("Starting new meetup service");
let path = "target/debug/post-meetup";
let url = "http://127.0.0.1:8080/";
let bind = "127.0.0.1:8080";
let _proc = tokio::process::Command::new(path)
.arg("--bind")
.arg(bind)
.kill_on_drop(true)
.spawn()
.expect("Failed to start meetup");
log::info!("meetup service started");
let client = retry_client(url).await;
FindService { _proc, client }
}
pub fn client(&self) -> Client {
self.client.clone()
}
}