diff --git a/crates/api-grub/src/monitoring.rs b/crates/api-grub/src/monitoring.rs index dfdbf87..1108e87 100644 --- a/crates/api-grub/src/monitoring.rs +++ b/crates/api-grub/src/monitoring.rs @@ -1,4 +1,5 @@ use std::env; +use std::fmt::Display; use anyhow::Error; use serde_json::{Map, Value}; use reqwest::Client; @@ -44,8 +45,6 @@ pub async fn get_metrics_from_monitoring(duration: usize, delay: usize) -> anyho 'outer: loop { // let mut a = MonitoringImporter::new().await; a.start_session().await?; - info!("Started a new CM session"); - let vec = Arc::new(a.get_metrics_list().await.unwrap_or_else(|_| vec![])); 'inner: loop { @@ -143,18 +142,31 @@ impl MonitoringImporter { let client = Client::new(); let url = format!("http://{}/e-data-front/auth/login", self.ip); let fortoken = ForTokenCredentials::new(&self.login, &self.password); + let mut delay = 1; - let client = client - .post(url) + loop { + let client = client + .post(&url) .header("Content-Type", "application/json") .json(&fortoken); - let resp = client.send().await?; - let auth = resp.json::().await?; - - self.set_ts(&fortoken.ts).await; - - self.access_token = auth.access_token.to_owned(); + // let resp = client.send().await?; + if let Ok(resp) = client.send().await { + // let auth = resp.json::().await?; + match resp.json::().await { + Ok(auth) => { + self.set_ts(&fortoken.ts).await; + self.access_token = auth.access_token.to_owned(); + break; + }, + Err(er) => error!("Error with extracting access-key from CM response due to {}", er), + } + } + error!("Error while trying to create a new session, waiting {} secs and retrying ...", delay); + tokio::time::sleep(tokio::time::Duration::from_secs(delay)).await; + delay = delay * 2; + } + info!("Started a new CM session"); Ok(()) }