tuwunel_admin/debug/
database_files.rs1use futures::TryStreamExt;
2use tuwunel_core::{Result, utils::stream::IterStream};
3
4use crate::admin_command;
5
6#[admin_command]
7pub(super) async fn database_files(&self, map: Option<String>, level: Option<i32>) -> Result {
8 let mut files: Vec<_> = self
9 .services
10 .db
11 .engine
12 .file_list()
13 .collect::<Result<_>>()?;
14
15 files.sort_by_key(|f| f.name.clone());
16
17 writeln!(self, "| lev | sst | keys | dels | size | column |").await?;
18 writeln!(self, "| ---: | :--- | ---: | ---: | ---: | :--- |").await?;
19 files
20 .into_iter()
21 .filter(|file| {
22 map.as_deref()
23 .is_none_or(|map| map == file.column_family_name)
24 })
25 .filter(|file| {
26 level
27 .as_ref()
28 .is_none_or(|&level| level == file.level)
29 })
30 .try_stream()
31 .try_for_each(|file| {
32 writeln!(
33 self,
34 "| {} | {:<13} | {:7}+ | {:4}- | {:9} | {} |",
35 file.level,
36 file.name,
37 file.num_entries,
38 file.num_deletions,
39 file.size,
40 file.column_family_name,
41 )
42 })
43 .await
44}