From aed2a26a69c9f7e775e148cb289b3025267d887a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Thu, 9 Aug 2018 17:31:41 +0200 Subject: [PATCH] Add blocks per second and some colors to the informant (#519) * Add blocks per second to informant. * Add some colours. --- substrate/cli/src/informant.rs | 46 ++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/substrate/cli/src/informant.rs b/substrate/cli/src/informant.rs index 37eed5d3c2134..d980e74bb814f 100644 --- a/substrate/cli/src/informant.rs +++ b/substrate/cli/src/informant.rs @@ -16,6 +16,7 @@ //! Console informant. Prints sync progress and block events. Runs on the calling thread. +use ansi_term::Colour; use std::time::{Duration, Instant}; use futures::{Future, Stream}; use service::{Service, Components}; @@ -38,6 +39,7 @@ pub fn start(service: &Service, exit: ::exit_future::Exit, handle: TaskExe let network = service.network(); let client = service.client(); let txpool = service.extrinsic_pool(); + let mut last_number = None; let display_notifications = interval.map_err(|e| debug!("Timer error: {:?}", e)).for_each(move |_| { let sync_status = network.status(); @@ -45,15 +47,32 @@ pub fn start(service: &Service, exit: ::exit_future::Exit, handle: TaskExe if let Ok(best_block) = client.best_block_header() { let hash = best_block.hash(); let num_peers = sync_status.num_peers; - let status = match (sync_status.sync.state, sync_status.sync.best_seen_block) { - (SyncState::Idle, _) => "Idle".into(), - (SyncState::Downloading, None) => "Syncing".into(), - (SyncState::Downloading, Some(n)) => format!("Syncing, target=#{}", n), + let best_number: u64 = best_block.number().as_(); + let speed = move || speed(best_number, last_number); + let (status, target) = match (sync_status.sync.state, sync_status.sync.best_seen_block) { + (SyncState::Idle, _) => ("Idle".into(), "".into()), + (SyncState::Downloading, None) => (format!("Syncing{}", speed()), "".into()), + (SyncState::Downloading, Some(n)) => (format!("Syncing{}", speed()), format!(", target=#{}", n)), }; + last_number = Some(best_number); let txpool_status = txpool.light_status(); - let best_number: u64 = best_block.number().as_(); - info!(target: "substrate", "{} ({} peers), best: #{} ({})", status, sync_status.num_peers, best_number, hash); - telemetry!("system.interval"; "status" => status, "peers" => num_peers, "height" => best_number, "best" => ?hash, "txcount" => txpool_status.transaction_count); + info!( + target: "substrate", + "{}{} ({} peers), best: #{} ({})", + Colour::White.bold().paint(&status), + target, + Colour::White.bold().paint(format!("{}", sync_status.num_peers)), + Colour::White.paint(format!("{}", best_number)), + hash + ); + telemetry!( + "system.interval"; + "status" => format!("{}{}", status, target), + "peers" => num_peers, + "height" => best_number, + "best" => ?hash, + "txcount" => txpool_status.transaction_count + ); } else { warn!("Error getting best block information"); } @@ -77,3 +96,16 @@ pub fn start(service: &Service, exit: ::exit_future::Exit, handle: TaskExe handle.spawn(exit.until(informant_work).map(|_| ())); } +fn speed(best_number: u64, last_number: Option) -> String { + let speed = match last_number { + Some(num) => (best_number.saturating_sub(num) * 10_000 / TIMER_INTERVAL_MS) as f64, + None => 0.0 + }; + + if speed < 1.0 { + "".into() + } else { + format!(" {:4.1} bps", speed / 10.0) + } +} +