From 3101bd3ff0a6eea42c42275e4fa6712a60752aaf Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Tue, 1 Aug 2023 09:53:34 +1200 Subject: [PATCH] Collect and show storage stats --- src/storage/mod.rs | 75 +++++++++++++--- src/ui/help/stats.rs | 208 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 252 insertions(+), 31 deletions(-) diff --git a/src/storage/mod.rs b/src/storage/mod.rs index 9d7efa67..df66ccc5 100644 --- a/src/storage/mod.rs +++ b/src/storage/mod.rs @@ -195,6 +195,71 @@ impl Storage { Ok(storage) } + pub fn get_general_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.general)?) + } + + pub fn get_event_seen_on_relay_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_seen_on_relay)?) + } + + pub fn get_event_viewed_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_viewed)?) + } + + pub fn get_hashtags_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.hashtags)?) + } + + pub fn get_relays_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.relays)?) + } + + pub fn get_event_tags_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_tags)?) + } + + pub fn get_event_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.events)?) + } + + pub fn get_event_ek_pk_index_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_ek_pk_index)?) + } + + pub fn get_event_ek_c_index_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_ek_c_index)?) + } + + pub fn get_event_references_person_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.event_references_person)?) + } + + pub fn get_relationships_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.relationships)?) + } + + pub fn get_people_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.people)?) + } + + pub fn get_person_relays_stats(&self) -> Result { + let txn = self.env.begin_ro_txn()?; + Ok(txn.stat(self.person_relays)?) + } + // Remove all events (and related data) with a created_at before `from` pub fn prune(&self, from: Unixtime) -> Result { // Extract the Ids to delete. @@ -686,11 +751,6 @@ impl Storage { } } - pub fn get_event_stats(&self) -> Result { - let txn = self.env.begin_ro_txn()?; - Ok(txn.stat(self.events)?) - } - pub fn delete_event(&self, id: Id) -> Result<(), Error> { let mut txn = self.env.begin_rw_txn()?; let _ = txn.del(self.events, &id.as_slice(), None); @@ -1418,11 +1478,6 @@ impl Storage { Ok(output) } - pub fn get_people_stats(&self) -> Result { - let txn = self.env.begin_ro_txn()?; - Ok(txn.stat(self.people)?) - } - pub fn write_person_relay(&self, person_relay: &PersonRelay) -> Result<(), Error> { let mut key = person_relay.pubkey.as_bytes(); key.extend(person_relay.url.0.as_bytes()); diff --git a/src/ui/help/stats.rs b/src/ui/help/stats.rs index 62a901bc..b67ef575 100644 --- a/src/ui/help/stats.rs +++ b/src/ui/help/stats.rs @@ -34,27 +34,7 @@ pub(super) fn update(_app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::F )); ui.add_space(6.0); - - ui.label(format!( - "Events in memory: {}", - GLOBALS - .storage - .get_event_stats() - .map(|s| s.entries()) - .unwrap_or(0) - )); - - ui.add_space(6.0); - - ui.label(format!( - "People in memory: {}", - GLOBALS - .storage - .get_people_stats() - .map(|s| s.entries()) - .unwrap_or(0) - )); - + ui.separator(); ui.add_space(6.0); ui.label(format!( @@ -67,5 +47,191 @@ pub(super) fn update(_app: &mut GossipUi, _ctx: &Context, _frame: &mut eframe::F Ok(vec) => vec.len(), } )); + + ui.add_space(6.0); + ui.separator(); + ui.add_space(6.0); + + let general_stats = GLOBALS + .storage + .get_general_stats() + .map(|s| { + format!( + "General storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(general_stats); + ui.add_space(6.0); + + let event_seen_on_relay_stats = GLOBALS + .storage + .get_event_seen_on_relay_stats() + .map(|s| { + format!( + "Event_Seen_On_Relay storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_seen_on_relay_stats); + ui.add_space(6.0); + + let event_viewed_stats = GLOBALS + .storage + .get_event_viewed_stats() + .map(|s| { + format!( + "Event_Viewed storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_viewed_stats); + ui.add_space(6.0); + + let hashtags_stats = GLOBALS + .storage + .get_hashtags_stats() + .map(|s| { + format!( + "Hashtags storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(hashtags_stats); + ui.add_space(6.0); + + let relays_stats = GLOBALS + .storage + .get_relays_stats() + .map(|s| { + format!( + "Relays storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(relays_stats); + ui.add_space(6.0); + + let event_tags_stats = GLOBALS + .storage + .get_event_tags_stats() + .map(|s| { + format!( + "Event_Tags storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_tags_stats); + ui.add_space(6.0); + + let event_stats = GLOBALS + .storage + .get_event_stats() + .map(|s| { + format!( + "Event storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_stats); + ui.add_space(6.0); + + let event_ek_pk_index_stats = GLOBALS + .storage + .get_event_ek_pk_index_stats() + .map(|s| { + format!( + "Event_Ek_Pk_Index storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_ek_pk_index_stats); + ui.add_space(6.0); + + let event_ek_c_index_stats = GLOBALS + .storage + .get_event_ek_c_index_stats() + .map(|s| { + format!( + "Event_Ek_C_Index storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_ek_c_index_stats); + ui.add_space(6.0); + + let event_references_person_stats = GLOBALS + .storage + .get_event_references_person_stats() + .map(|s| { + format!( + "Event_References_Person storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(event_references_person_stats); + ui.add_space(6.0); + + let relationships_stats = GLOBALS + .storage + .get_relationships_stats() + .map(|s| { + format!( + "Relationships storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(relationships_stats); + ui.add_space(6.0); + + let people_stats = GLOBALS + .storage + .get_people_stats() + .map(|s| { + format!( + "People storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(people_stats); + ui.add_space(6.0); + + let person_relays_stats = GLOBALS + .storage + .get_person_relays_stats() + .map(|s| { + format!( + "Person_Relays storage: {} records, {} pages", + s.entries(), + s.leaf_pages() + ) + }) + .unwrap_or("".to_owned()); + ui.label(person_relays_stats); + ui.add_space(6.0); }); }