Skip to main content

tuwunel_admin/debug/
database_stats.rs

1use 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}