fix: improve usage of indicatif for tracking progress #101
| @ -60,7 +60,7 @@ impl<A: Application, T: Topology + std::fmt::Debug> Interpret<T> for Application | |||||||
|                 } |                 } | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|         Ok(Outcome::success("successfully created app".to_string())) |         Ok(Outcome::success("Application created".to_string())) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_name(&self) -> InterpretName { |     fn get_name(&self) -> InterpretName { | ||||||
|  | |||||||
| @ -225,19 +225,20 @@ impl<T: Topology + HelmCommand> Interpret<T> for HelmChartInterpret { | |||||||
|         match status { |         match status { | ||||||
|             helm_wrapper_rs::HelmDeployStatus::Deployed => Ok(Outcome::new( |             helm_wrapper_rs::HelmDeployStatus::Deployed => Ok(Outcome::new( | ||||||
|                 InterpretStatus::SUCCESS, |                 InterpretStatus::SUCCESS, | ||||||
|                 "Helm Chart deployed".to_string(), |                 format!("Helm Chart {} deployed", self.score.release_name), | ||||||
|             )), |             )), | ||||||
|             helm_wrapper_rs::HelmDeployStatus::PendingInstall => Ok(Outcome::new( |             helm_wrapper_rs::HelmDeployStatus::PendingInstall => Ok(Outcome::new( | ||||||
|                 InterpretStatus::RUNNING, |                 InterpretStatus::RUNNING, | ||||||
|                 "Helm Chart Pending install".to_string(), |                 format!("Helm Chart {} pending install...", self.score.release_name), | ||||||
|             )), |             )), | ||||||
|             helm_wrapper_rs::HelmDeployStatus::PendingUpgrade => Ok(Outcome::new( |             helm_wrapper_rs::HelmDeployStatus::PendingUpgrade => Ok(Outcome::new( | ||||||
|                 InterpretStatus::RUNNING, |                 InterpretStatus::RUNNING, | ||||||
|                 "Helm Chart pending upgrade".to_string(), |                 format!("Helm Chart {} pending upgrade...", self.score.release_name), | ||||||
|             )), |  | ||||||
|             helm_wrapper_rs::HelmDeployStatus::Failed => Err(InterpretError::new( |  | ||||||
|                 "Failed to install helm chart".to_string(), |  | ||||||
|             )), |             )), | ||||||
|  |             helm_wrapper_rs::HelmDeployStatus::Failed => Err(InterpretError::new(format!( | ||||||
|  |                 "Helm Chart {} installation failed", | ||||||
|  |                 self.score.release_name | ||||||
|  |             ))), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -93,7 +93,9 @@ impl<T: Topology + K8sclient + PrometheusApplicationMonitoring<CRDPrometheus>> I | |||||||
|         self.install_rules(&self.prometheus_rules, &client).await?; |         self.install_rules(&self.prometheus_rules, &client).await?; | ||||||
|         self.install_monitors(self.service_monitors.clone(), &client) |         self.install_monitors(self.service_monitors.clone(), &client) | ||||||
|             .await?; |             .await?; | ||||||
|         Ok(Outcome::success("K8s components installed".to_string())) |         Ok(Outcome::success( | ||||||
|  |             "K8s monitoring components installed".to_string(), | ||||||
|  |         )) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_name(&self) -> InterpretName { |     fn get_name(&self) -> InterpretName { | ||||||
|  | |||||||
| @ -38,14 +38,17 @@ fn configure_logger() -> MultiProgress { | |||||||
| async fn handle_events(base_progress: MultiProgress) { | async fn handle_events(base_progress: MultiProgress) { | ||||||
|     let progress_tracker = Arc::new(IndicatifProgressTracker::new(base_progress.clone())); |     let progress_tracker = Arc::new(IndicatifProgressTracker::new(base_progress.clone())); | ||||||
|     let preparing_topology = Arc::new(Mutex::new(false)); |     let preparing_topology = Arc::new(Mutex::new(false)); | ||||||
|  |     let current_score: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None)); | ||||||
| 
 | 
 | ||||||
|     instrumentation::subscribe("Harmony CLI Logger", { |     instrumentation::subscribe("Harmony CLI Logger", { | ||||||
|         move |event| { |         move |event| { | ||||||
|             let progress_tracker = Arc::clone(&progress_tracker); |             let progress_tracker = Arc::clone(&progress_tracker); | ||||||
|             let preparing_topology = Arc::clone(&preparing_topology); |             let preparing_topology = Arc::clone(&preparing_topology); | ||||||
|  |             let current_score = Arc::clone(¤t_score); | ||||||
| 
 | 
 | ||||||
|             async move { |             async move { | ||||||
|                 let mut preparing_topology = preparing_topology.lock().unwrap(); |                 let mut preparing_topology = preparing_topology.lock().unwrap(); | ||||||
|  |                 let mut current_score = current_score.lock().unwrap(); | ||||||
| 
 | 
 | ||||||
|                 match event { |                 match event { | ||||||
|                     HarmonyEvent::HarmonyStarted => {} |                     HarmonyEvent::HarmonyStarted => {} | ||||||
| @ -103,13 +106,21 @@ async fn handle_events(base_progress: MultiProgress) { | |||||||
|                         score, |                         score, | ||||||
|                         message, |                         message, | ||||||
|                     } => { |                     } => { | ||||||
|                         let section_key = if (*preparing_topology) |                         let is_key_topology = (*preparing_topology) | ||||||
|                             && progress_tracker.contains_section(&topology_key(&topology)) |                             && progress_tracker.contains_section(&topology_key(&topology)); | ||||||
|                         { |                         let is_key_current_score = current_score.is_some() | ||||||
|  |                             && progress_tracker | ||||||
|  |                                 .contains_section(&score_key(¤t_score.clone().unwrap())); | ||||||
|  |                         let is_key_score = progress_tracker.contains_section(&score_key(&score)); | ||||||
|  | 
 | ||||||
|  |                         let section_key = if is_key_topology { | ||||||
|                             topology_key(&topology) |                             topology_key(&topology) | ||||||
|                         } else if progress_tracker.contains_section(&score_key(&score)) { |                         } else if is_key_current_score { | ||||||
|  |                             score_key(¤t_score.clone().unwrap()) | ||||||
|  |                         } else if is_key_score { | ||||||
|                             score_key(&score) |                             score_key(&score) | ||||||
|                         } else { |                         } else { | ||||||
|  |                             (*current_score) = Some(score.clone()); | ||||||
|                             let key = score_key(&score); |                             let key = score_key(&score); | ||||||
|                             progress_tracker.add_section( |                             progress_tracker.add_section( | ||||||
|                                 &key, |                                 &key, | ||||||
| @ -127,22 +138,28 @@ async fn handle_events(base_progress: MultiProgress) { | |||||||
|                         execution_id: task_key, |                         execution_id: task_key, | ||||||
|                         topology: _, |                         topology: _, | ||||||
|                         interpret: _, |                         interpret: _, | ||||||
|                         score: _, |                         score, | ||||||
|                         outcome, |                         outcome, | ||||||
|                     } => match outcome { |                     } => { | ||||||
|                         Ok(outcome) => match outcome.status { |                         if current_score.is_some() && current_score.clone().unwrap() == score { | ||||||
|                             harmony::interpret::InterpretStatus::SUCCESS => { |                             (*current_score) = None; | ||||||
|                                 progress_tracker.finish_task(&task_key, &outcome.message); |  | ||||||
|                             } |  | ||||||
|                             harmony::interpret::InterpretStatus::NOOP => { |  | ||||||
|                                 progress_tracker.skip_task(&task_key, &outcome.message); |  | ||||||
|                             } |  | ||||||
|                             _ => progress_tracker.fail_task(&task_key, &outcome.message), |  | ||||||
|                         }, |  | ||||||
|                         Err(err) => { |  | ||||||
|                             progress_tracker.fail_task(&task_key, &err.to_string()); |  | ||||||
|                         } |                         } | ||||||
|                     }, | 
 | ||||||
|  |                         match outcome { | ||||||
|  |                             Ok(outcome) => match outcome.status { | ||||||
|  |                                 harmony::interpret::InterpretStatus::SUCCESS => { | ||||||
|  |                                     progress_tracker.finish_task(&task_key, &outcome.message); | ||||||
|  |                                 } | ||||||
|  |                                 harmony::interpret::InterpretStatus::NOOP => { | ||||||
|  |                                     progress_tracker.skip_task(&task_key, &outcome.message); | ||||||
|  |                                 } | ||||||
|  |                                 _ => progress_tracker.fail_task(&task_key, &outcome.message), | ||||||
|  |                             }, | ||||||
|  |                             Err(err) => { | ||||||
|  |                                 progress_tracker.fail_task(&task_key, &err.to_string()); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|                 true |                 true | ||||||
|             } |             } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user