group related scores together

This commit is contained in:
Ian Letourneau 2025-08-09 23:16:15 -04:00
parent 336e1cfefe
commit 387ae9f494
4 changed files with 46 additions and 26 deletions

View File

@ -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 {

View File

@ -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
))),
} }
} }

View File

@ -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 {

View File

@ -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(&current_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(&current_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(&current_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
} }