From 8d2c43d7e8b774efbd97742e3f77b3eb23cde5dd Mon Sep 17 00:00:00 2001 From: Antioch Peverell Date: Thu, 14 Nov 2019 16:21:27 +0000 Subject: [PATCH] add tx pool kernel counts to tui status page (#3111) * add tx pool kernel counts to tui status page * fix formatting on tui --- pool/src/pool.rs | 6 ++++++ servers/src/common/stats.rs | 4 ++++ servers/src/grin/server.rs | 25 +++++++++++++++---------- src/bin/tui/status.rs | 16 ++++++++++++++-- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/pool/src/pool.rs b/pool/src/pool.rs index a05cca05a..68948d6b1 100644 --- a/pool/src/pool.rs +++ b/pool/src/pool.rs @@ -446,6 +446,12 @@ impl Pool { self.entries.len() } + /// Number of transaction kernels in the pool. + /// This may differ from the size (number of transactions) due to tx aggregation. + pub fn kernel_count(&self) -> usize { + self.entries.iter().map(|x| x.tx.kernels().len()).sum() + } + /// Is the pool empty? pub fn is_empty(&self) -> bool { self.entries.is_empty() diff --git a/servers/src/common/stats.rs b/servers/src/common/stats.rs index 27aeeab7e..8ada81749 100644 --- a/servers/src/common/stats.rs +++ b/servers/src/common/stats.rs @@ -85,8 +85,12 @@ pub struct ChainStats { pub struct TxStats { /// Number of transactions in the transaction pool pub tx_pool_size: usize, + /// Number of transaction kernels in the transaction pool + pub tx_pool_kernels: usize, /// Number of transactions in the stem pool pub stem_pool_size: usize, + /// Number of transaction kernels in the stem pool + pub stem_pool_kernels: usize, } /// Struct to return relevant information about stratum workers #[derive(Clone, Serialize, Debug)] diff --git a/servers/src/grin/server.rs b/servers/src/grin/server.rs index 0b3f67cb7..539ca270b 100644 --- a/servers/src/grin/server.rs +++ b/servers/src/grin/server.rs @@ -480,19 +480,24 @@ impl Server { .map(|p| PeerStats::from_peer(&p)) .collect(); - let (tx_pool_size, stem_pool_size) = { - let tx_pool_lock = self.tx_pool.try_read(); - match tx_pool_lock { - Some(l) => (l.txpool.entries.len(), l.stempool.entries.len()), - None => (0, 0), + let tx_stats = { + let pool = self.tx_pool.try_read(); + match pool { + Some(pool) => TxStats { + tx_pool_size: pool.txpool.size(), + tx_pool_kernels: pool.txpool.kernel_count(), + stem_pool_size: pool.stempool.size(), + stem_pool_kernels: pool.stempool.kernel_count(), + }, + None => TxStats { + tx_pool_size: 0, + tx_pool_kernels: 0, + stem_pool_size: 0, + stem_pool_kernels: 0, + }, } }; - let tx_stats = TxStats { - tx_pool_size, - stem_pool_size, - }; - let head = self.chain.head_header()?; let head_stats = ChainStats { latest_timestamp: head.timestamp, diff --git a/src/bin/tui/status.rs b/src/bin/tui/status.rs index bb93e6e65..2f15cd623 100644 --- a/src/bin/tui/status.rs +++ b/src/bin/tui/status.rs @@ -109,12 +109,18 @@ impl TUIStatusListener for TUIStatusView { .child( LinearLayout::new(Orientation::Horizontal) .child(TextView::new("Transaction Pool Size: ")) - .child(TextView::new(" ").with_id("tx_pool_size")), + .child(TextView::new("0").with_id("tx_pool_size")) + .child(TextView::new(" (")) + .child(TextView::new("0").with_id("tx_pool_kernels")) + .child(TextView::new(")")), ) .child( LinearLayout::new(Orientation::Horizontal) .child(TextView::new("Stem Pool Size: ")) - .child(TextView::new(" ").with_id("stem_pool_size")), + .child(TextView::new("0").with_id("stem_pool_size")) + .child(TextView::new(" (")) + .child(TextView::new("0").with_id("stem_pool_kernels")) + .child(TextView::new(")")), ) .child( LinearLayout::new(Orientation::Horizontal).child(TextView::new( @@ -307,6 +313,12 @@ impl TUIStatusListener for TUIStatusView { c.call_on_id("stem_pool_size", |t: &mut TextView| { t.set_content(stats.tx_stats.stem_pool_size.to_string()); }); + c.call_on_id("tx_pool_kernels", |t: &mut TextView| { + t.set_content(stats.tx_stats.tx_pool_kernels.to_string()); + }); + c.call_on_id("stem_pool_kernels", |t: &mut TextView| { + t.set_content(stats.tx_stats.stem_pool_kernels.to_string()); + }); /*c.call_on_id("basic_mining_config_status", |t: &mut TextView| { t.set_content(basic_mining_config_status); });