Skip to main content

tuwunel_admin/debug/
database_files.rs

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