forked from NationTech/harmony
add event to track progress of interprets, change a bunch of info! to debug!
This commit is contained in:
@@ -6,6 +6,8 @@ use std::{
|
||||
sync::{Arc, Mutex},
|
||||
};
|
||||
|
||||
use crate::progress;
|
||||
|
||||
pub fn init() -> tokio::task::JoinHandle<()> {
|
||||
configure_logger();
|
||||
let handle = tokio::spawn(handle_events());
|
||||
@@ -30,35 +32,78 @@ fn configure_logger() {
|
||||
|
||||
async fn handle_events() {
|
||||
instrumentation::subscribe("Harmony CLI Logger", {
|
||||
let progresses: Arc<Mutex<HashMap<String, MultiProgress>>> =
|
||||
let sections: Arc<Mutex<HashMap<String, MultiProgress>>> =
|
||||
Arc::new(Mutex::new(HashMap::new()));
|
||||
let progress_bars: Arc<Mutex<HashMap<String, ProgressBar>>> =
|
||||
Arc::new(Mutex::new(HashMap::new()));
|
||||
let topology_prepare_progress = Arc::new(Mutex::new(None::<ProgressBar>));
|
||||
|
||||
move |event| {
|
||||
let progresses_clone = Arc::clone(&progresses);
|
||||
let topology_prepare_progress_clone = Arc::clone(&topology_prepare_progress);
|
||||
let sections_clone = Arc::clone(§ions);
|
||||
let progress_bars_clone = Arc::clone(&progress_bars);
|
||||
|
||||
async move {
|
||||
let mut progresses = progresses_clone.lock().unwrap();
|
||||
let mut topology_prepare_progress = topology_prepare_progress_clone.lock().unwrap();
|
||||
let mut sections = sections_clone.lock().unwrap();
|
||||
let mut progress_bars = progress_bars_clone.lock().unwrap();
|
||||
|
||||
match event {
|
||||
HarmonyEvent::HarmonyStarted => {}
|
||||
HarmonyEvent::PrepareTopologyStarted { name } => {
|
||||
let multi_progress = crate::progress::new_section(format!(
|
||||
let section = progress::new_section(format!(
|
||||
"{} Preparing environment: {name}...",
|
||||
crate::theme::EMOJI_TOPOLOGY,
|
||||
));
|
||||
(*progresses).insert(name, multi_progress);
|
||||
(*sections).insert(name, section);
|
||||
}
|
||||
HarmonyEvent::TopologyPrepared { name, outcome } => {
|
||||
let section = (*sections).get(&name).unwrap();
|
||||
let progress = progress::add_spinner(section, "".into());
|
||||
|
||||
match outcome.status {
|
||||
harmony::interpret::InterpretStatus::SUCCESS => {
|
||||
progress::success(section, Some(progress), outcome.message);
|
||||
}
|
||||
harmony::interpret::InterpretStatus::FAILURE => {
|
||||
progress::error(section, Some(progress), outcome.message);
|
||||
}
|
||||
harmony::interpret::InterpretStatus::RUNNING => todo!(),
|
||||
harmony::interpret::InterpretStatus::QUEUED => todo!(),
|
||||
harmony::interpret::InterpretStatus::BLOCKED => todo!(),
|
||||
harmony::interpret::InterpretStatus::NOOP => {
|
||||
progress::skip(section, Some(progress), outcome.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
HarmonyEvent::InterpretExecutionStarted {
|
||||
name,
|
||||
topology,
|
||||
message,
|
||||
} => {
|
||||
let section = (*sections).get(&topology).unwrap();
|
||||
let progress_bar = progress::add_spinner(section, message);
|
||||
|
||||
(*progress_bars).insert(name, progress_bar);
|
||||
}
|
||||
HarmonyEvent::InterpretExecutionFinished {
|
||||
topology,
|
||||
name,
|
||||
outcome,
|
||||
} => {
|
||||
let section = (*sections).get(&topology).unwrap();
|
||||
let progress_bar = (*progress_bars).get(&name).cloned();
|
||||
|
||||
let _ = section.clear();
|
||||
|
||||
match outcome {
|
||||
Ok(outcome) => {
|
||||
progress::success(section, progress_bar, outcome.message);
|
||||
}
|
||||
Err(err) => {
|
||||
progress::error(section, progress_bar, err.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
(*progress_bars).remove(&name);
|
||||
}
|
||||
HarmonyEvent::TopologyPrepared { name, status } => match status {
|
||||
harmony::interpret::InterpretStatus::SUCCESS => todo!(),
|
||||
harmony::interpret::InterpretStatus::FAILURE => todo!(),
|
||||
harmony::interpret::InterpretStatus::RUNNING => todo!(),
|
||||
harmony::interpret::InterpretStatus::QUEUED => todo!(),
|
||||
harmony::interpret::InterpretStatus::BLOCKED => todo!(),
|
||||
harmony::interpret::InterpretStatus::NOOP => todo!(),
|
||||
},
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ pub mod theme;
|
||||
|
||||
#[cfg(feature = "tui")]
|
||||
use harmony_tui;
|
||||
use log::debug;
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(version, about, long_about = None)]
|
||||
@@ -138,7 +139,7 @@ pub async fn init<T: Topology + Send + Sync + 'static>(
|
||||
|
||||
// Run filtered scores
|
||||
for s in scores_vec {
|
||||
println!("Running: {}", s.name());
|
||||
debug!("Running: {}", s.name());
|
||||
maestro.interpret(s).await?;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,3 +38,13 @@ pub fn error(multi_progress: &MultiProgress, progress: Option<ProgressBar>, mess
|
||||
progress.set_style(crate::theme::ERROR_SPINNER_STYLE.clone());
|
||||
progress.finish_with_message(message);
|
||||
}
|
||||
|
||||
pub fn skip(multi_progress: &MultiProgress, progress: Option<ProgressBar>, message: String) {
|
||||
if let Some(progress) = progress {
|
||||
multi_progress.remove(&progress)
|
||||
}
|
||||
|
||||
let progress = multi_progress.add(ProgressBar::new_spinner());
|
||||
progress.set_style(crate::theme::SKIP_SPINNER_STYLE.clone());
|
||||
progress.finish_with_message(message);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ use lazy_static::lazy_static;
|
||||
|
||||
pub static EMOJI_HARMONY: Emoji<'_, '_> = Emoji("🎼", "");
|
||||
pub static EMOJI_SUCCESS: Emoji<'_, '_> = Emoji("✅", "");
|
||||
pub static EMOJI_SKIP: Emoji<'_, '_> = Emoji("⏭️", "");
|
||||
pub static EMOJI_ERROR: Emoji<'_, '_> = Emoji("⚠️", "");
|
||||
pub static EMOJI_DEPLOY: Emoji<'_, '_> = Emoji("🚀", "");
|
||||
pub static EMOJI_TOPOLOGY: Emoji<'_, '_> = Emoji("📦", "");
|
||||
@@ -16,6 +17,9 @@ lazy_static! {
|
||||
pub static ref SUCCESS_SPINNER_STYLE: ProgressStyle = SPINNER_STYLE
|
||||
.clone()
|
||||
.tick_strings(&[format!("{}", EMOJI_SUCCESS).as_str()]);
|
||||
pub static ref SKIP_SPINNER_STYLE: ProgressStyle = SPINNER_STYLE
|
||||
.clone()
|
||||
.tick_strings(&[format!("{}", EMOJI_SKIP).as_str()]);
|
||||
pub static ref ERROR_SPINNER_STYLE: ProgressStyle = SPINNER_STYLE
|
||||
.clone()
|
||||
.tick_strings(&[format!("{}", EMOJI_ERROR).as_str()]);
|
||||
|
||||
Reference in New Issue
Block a user