tuwunel_admin/debug/
database_stats.rs1use futures::TryStreamExt;
2use tuwunel_core::{
3 Result,
4 utils::{stream::IterStream, string::EMPTY},
5};
6
7use crate::admin_command;
8
9#[admin_command]
10pub(super) async fn database_stats(
11 &self,
12 property: Option<String>,
13 map: Option<String>,
14) -> Result {
15 let map_name = map.as_ref().map_or(EMPTY, String::as_str);
16 let property = property.unwrap_or_else(|| "rocksdb.stats".to_owned());
17 self.services
18 .db
19 .iter()
20 .filter(|&(&name, _)| map_name.is_empty() || map_name == name)
21 .try_stream()
22 .try_for_each(|(&name, map)| {
23 let res = map.property(&property).expect("invalid property");
24 writeln!(self, "##### {name}:\n```\n{}\n```", res.trim())
25 })
26 .await
27}