diff --git a/network-poc/native-node/Cargo.toml b/network-poc/native-node/Cargo.toml index 9dbd1ee..e8b099f 100644 --- a/network-poc/native-node/Cargo.toml +++ b/network-poc/native-node/Cargo.toml @@ -23,3 +23,4 @@ dialoguer = "0.12.0" ratatui = "0.29.0" crossterm = { version = "0.28.1", features = ["event-stream"] } tracing-appender = "0.2.4" +chrono = "0.4" diff --git a/network-poc/native-node/src/main.rs b/network-poc/native-node/src/main.rs index b7d05a2..02d27b4 100644 --- a/network-poc/native-node/src/main.rs +++ b/network-poc/native-node/src/main.rs @@ -401,6 +401,13 @@ async fn main() { continue; } + // Merkitään yhdistetyksi TUI:ssa + { + let mut st = tui_state.write().await; + st.status = "ACTIVE".to_string(); + st.push_log("Network", "Yhdistetty hubiin".to_string(), None); + } + loop { tokio::select! { cmd = cmd_rx.recv() => { @@ -497,6 +504,18 @@ async fn main() { } } } + // Node joined → oma node_id + if text.contains(r#""type":"node_joined""#) { + if let Ok(msg) = serde_json::from_str::(&text) { + if let Some(nid) = msg.get("node_id").and_then(|v| v.as_u64()) { + let mut st = tui_state.write().await; + if st.node_id.is_none() { + st.node_id = Some(nid); + st.push_log("Network", format!("Node ID: #{}", nid), None); + } + } + } + } // Verkon globaali tila if text.contains(r#""type":"network_status""#) { if let Ok(status) = serde_json::from_str::(&text) { diff --git a/network-poc/native-node/src/tui_dashboard.rs b/network-poc/native-node/src/tui_dashboard.rs index 0274669..d763ee6 100644 --- a/network-poc/native-node/src/tui_dashboard.rs +++ b/network-poc/native-node/src/tui_dashboard.rs @@ -21,6 +21,7 @@ pub struct LogEntry { pub ty: String, pub msg: String, pub speed: Option, + pub timestamp: String, } pub struct DashboardState { @@ -62,7 +63,9 @@ impl DashboardState { } pub fn push_log(&mut self, ty: &str, msg: String, speed: Option) { + let now = chrono::Local::now().format("%H:%M:%S").to_string(); self.logs.push(LogEntry { + timestamp: now, ty: ty.to_string(), msg, speed, @@ -241,6 +244,8 @@ fn ui(f: &mut ratatui::Frame, st: &DashboardState) { }; ratatui::text::Line::from(vec![ + ratatui::text::Span::styled(&log.timestamp, Style::default().fg(Color::DarkGray)), + ratatui::text::Span::raw(" "), ratatui::text::Span::styled(format!("{: <8}", log.ty), Style::default().fg(ty_color).add_modifier(Modifier::BOLD)), ratatui::text::Span::raw(" | "), ratatui::text::Span::styled(log.msg.clone(), Style::default().fg(Color::White)),