diff --git a/binaries/cli/src/command/build/distributed.rs b/binaries/cli/src/command/build/distributed.rs index 9e7fca67..1fd1ed91 100644 --- a/binaries/cli/src/command/build/distributed.rs +++ b/binaries/cli/src/command/build/distributed.rs @@ -78,7 +78,7 @@ pub fn wait_until_dataflow_built( serde_json::from_slice(&raw).context("failed to parse log message"); match parsed { Ok(log_message) => { - print_log_message(log_message); + print_log_message(log_message, false, true); } Err(err) => { tracing::warn!("failed to parse log message: {err:?}") diff --git a/binaries/cli/src/command/start/attach.rs b/binaries/cli/src/command/start/attach.rs index 05d776e0..a32994d0 100644 --- a/binaries/cli/src/command/start/attach.rs +++ b/binaries/cli/src/command/start/attach.rs @@ -33,6 +33,8 @@ pub fn attach_dataflow( let nodes = dataflow.resolve_aliases_and_set_defaults()?; + let print_daemon_name = nodes.values().any(|n| n.deploy.is_some()); + let working_dir = dataflow_path .canonicalize() .context("failed to canonicalize dataflow path")? @@ -155,7 +157,7 @@ pub fn attach_dataflow( }, Ok(AttachEvent::Control(control_request)) => control_request, Ok(AttachEvent::Log(Ok(log_message))) => { - print_log_message(log_message); + print_log_message(log_message, false, print_daemon_name); continue; } Ok(AttachEvent::Log(Err(err))) => { diff --git a/binaries/cli/src/command/start/mod.rs b/binaries/cli/src/command/start/mod.rs index 5275a62d..72464f86 100644 --- a/binaries/cli/src/command/start/mod.rs +++ b/binaries/cli/src/command/start/mod.rs @@ -56,12 +56,14 @@ pub fn start( log_level, ) } else { + let print_daemon_name = dataflow_descriptor.nodes.iter().any(|n| n.deploy.is_some()); // wait until dataflow is started wait_until_dataflow_started( dataflow_id, &mut session, coordinator_socket, log::LevelFilter::Info, + print_daemon_name, ) } } @@ -120,6 +122,7 @@ fn wait_until_dataflow_started( session: &mut Box, coordinator_addr: SocketAddr, log_level: log::LevelFilter, + print_daemon_id: bool, ) -> eyre::Result<()> { // subscribe to log messages let mut log_session = TcpConnection { @@ -141,7 +144,7 @@ fn wait_until_dataflow_started( serde_json::from_slice(&raw).context("failed to parse log message"); match parsed { Ok(log_message) => { - print_log_message(log_message); + print_log_message(log_message, false, print_daemon_id); } Err(err) => { tracing::warn!("failed to parse log message: {err:?}") diff --git a/binaries/cli/src/output.rs b/binaries/cli/src/output.rs index 76db8c17..ff5ba755 100644 --- a/binaries/cli/src/output.rs +++ b/binaries/cli/src/output.rs @@ -2,7 +2,11 @@ use colored::Colorize; use dora_core::build::LogLevelOrStdout; use dora_message::common::LogMessage; -pub fn print_log_message(log_message: LogMessage) { +pub fn print_log_message( + log_message: LogMessage, + print_dataflow_id: bool, + print_daemon_name: bool, +) { let LogMessage { build_id: _, dataflow_id, @@ -25,27 +29,34 @@ pub fn print_log_message(log_message: LogMessage) { }, LogLevelOrStdout::Stdout => "stdout".bright_blue().italic().dimmed(), }; - let dataflow = if let Some(dataflow_id) = dataflow_id { - format!(" dataflow `{dataflow_id}`\t").cyan() - } else { - String::new().cyan() + + let dataflow = match dataflow_id { + Some(dataflow_id) if print_dataflow_id => format!("dataflow `{dataflow_id}` ").cyan(), + _ => String::new().cyan(), }; let daemon = match daemon_id { - Some(id) => match id.machine_id() { - Some(machine_id) => format!(" on daemon `{machine_id}`\t"), - None => " on default daemon\t".to_string(), + Some(id) if print_daemon_name => match id.machine_id() { + Some(machine_id) => format!("on daemon `{machine_id}`"), + None => "on default daemon ".to_string(), }, - None => " on default daemon\t".to_string(), + None if print_daemon_name => "on default daemon".to_string(), + _ => String::new(), } .bright_black(); + let colon = ":".bright_black().bold(); let node = match node_id { - Some(node_id) => format!(" {node_id}\t").bold(), - None => "".normal(), + Some(node_id) => { + let node_id = node_id.to_string().dimmed().bold(); + let padding = if daemon.is_empty() { "" } else { " " }; + format!("{node_id}{padding}{daemon}{colon} ") + } + None if daemon.is_empty() => "".into(), + None => format!("{daemon}{colon} "), }; let target = match target { - Some(target) => format!(" {target}\t").dimmed(), + Some(target) => format!("{target} ").dimmed(), None => "".normal(), }; - println!("{level}\t{dataflow}{daemon}{node}{target}: {message}"); + println!("{node}{level} {target}{dataflow} {message}"); }