From 68ee1a5408595804625a6dd0ebab5f333e7f0fe6 Mon Sep 17 00:00:00 2001
From: Andrej Kacian <andrej@kacian.sk>
Date: Sun, 9 Jan 2022 20:08:15 +0100
Subject: [PATCH] Add rocksdb implementation of memory_usage()

---
 src/database/abstraction/rocksdb.rs | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/database/abstraction/rocksdb.rs b/src/database/abstraction/rocksdb.rs
index a41ed1fb..f0affd32 100644
--- a/src/database/abstraction/rocksdb.rs
+++ b/src/database/abstraction/rocksdb.rs
@@ -82,6 +82,19 @@ impl DatabaseEngine for Arc<Engine> {
         // TODO?
         Ok(())
     }
+
+    fn memory_usage(&self) -> Result<String> {
+        let stats = rocksdb::perf::get_memory_usage_stats(Some(&[&self.rocks]), None)?;
+        Ok(format!("Approximate memory usage of all the mem-tables: {:.3} MB\n\
+                   Approximate memory usage of un-flushed mem-tables: {:.3} MB\n\
+                   Approximate memory usage of all the table readers: {:.3} MB\n\
+                   Approximate memory usage by cache: {:.3} MB",
+                   stats.mem_table_total as f64 / 1024.0 / 1024.0,
+                   stats.mem_table_unflushed as f64 / 1024.0 / 1024.0,
+                   stats.mem_table_readers_total as f64 / 1024.0 / 1024.0,
+                   stats.cache_total as f64 / 1024.0 / 1024.0
+        ))
+    }
 }
 
 impl RocksDbEngineTree<'_> {