Skip to main content

tuwunel_admin/query/raw/
vals_sizes.rs

1use std::collections::BTreeMap;
2
3use futures::StreamExt;
4use tuwunel_core::{
5	Result, at,
6	utils::{
7		stream::{IterStream, ReadyExt, TryIgnore},
8		string::EMPTY,
9	},
10};
11
12use super::with_map_or;
13use crate::admin_command;
14
15#[admin_command]
16pub(super) async fn raw_vals_sizes(&self, map: Option<String>, prefix: Option<String>) -> Result {
17	let prefix = prefix.as_deref().unwrap_or(EMPTY);
18
19	let maps = with_map_or(map.as_deref(), self.services)?;
20
21	let query = maps
22		.iter()
23		.stream()
24		.map(|map| map.raw_stream_prefix(&prefix))
25		.flatten()
26		.ignore_err()
27		.map(at!(1))
28		.map(<[u8]>::len)
29		.ready_fold_default(|mut map: BTreeMap<_, usize>, len| {
30			let entry = map.entry(len).or_default();
31			*entry = entry.saturating_add(1);
32			map
33		});
34
35	self.write_timed_query(query).await
36}