tuwunel_admin/query/raw/
vals_sizes.rs1use 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}