From c1829dd00b6aff59924390c37c849a7e1fb7c952 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Fri, 23 Apr 2021 13:29:07 -0700 Subject: [PATCH] Show last vote/root behind distance in `solana validators` output --- cli-output/src/cli_output.rs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/cli-output/src/cli_output.rs b/cli-output/src/cli_output.rs index fd73bccdd7..c00c239568 100644 --- a/cli-output/src/cli_output.rs +++ b/cli-output/src/cli_output.rs @@ -343,18 +343,24 @@ impl fmt::Display for CliValidators { validator: &CliValidator, total_active_stake: u64, use_lamports_unit: bool, + highest_last_vote: u64, + highest_root: u64, ) -> fmt::Result { - fn non_zero_or_dash(v: u64) -> String { + fn non_zero_or_dash(v: u64, max_v: u64) -> String { if v == 0 { - "-".into() + "- ".into() + } else if v == max_v { + format!("{:>8} ( 0)", v) + } else if v > max_v.saturating_sub(100) { + format!("{:>8} ({:>3})", v, -(max_v.saturating_sub(v) as isize)) } else { - format!("{}", v) + format!("{:>8} ", v) } } writeln!( f, - "{} {:<44} {:<44} {:>3}% {:>8} {:>10} {:>13} {:>7} {}", + "{} {:<44} {:<44} {:>3}% {:>14} {:>14} {:>13} {:>7} {}", if validator.delinquent { WARNING.to_string() } else { @@ -363,8 +369,8 @@ impl fmt::Display for CliValidators { validator.identity_pubkey, validator.vote_account_pubkey, validator.commission, - non_zero_or_dash(validator.last_vote), - non_zero_or_dash(validator.root_slot), + non_zero_or_dash(validator.last_vote, highest_last_vote), + non_zero_or_dash(validator.root_slot, highest_root), validator.epoch_credits, validator.version, if validator.activated_stake > 0 { @@ -390,8 +396,8 @@ impl fmt::Display for CliValidators { "Identity", "Vote Account", "Commission", - "Last Vote", - "Root Block", + "Last Vote ", + "Root Slot ", "Epoch Credits", "Version", "Active Stake", @@ -432,6 +438,17 @@ impl fmt::Display for CliValidators { sorted_validators.reverse(); } + let highest_root = sorted_validators + .iter() + .map(|v| v.root_slot) + .max() + .unwrap_or_default(); + let highest_last_vote = sorted_validators + .iter() + .map(|v| v.last_vote) + .max() + .unwrap_or_default(); + for (i, validator) in sorted_validators.iter().enumerate() { if padding > 0 { write!(f, "{:padding$}", i + 1, padding = padding)?; @@ -441,6 +458,8 @@ impl fmt::Display for CliValidators { validator, self.total_active_stake, self.use_lamports_unit, + highest_last_vote, + highest_root, )?; }