Skip to main content

kevy_embedded/
ops_index_admin.rs

1//! The read-only index admin surface (stats and enumeration). A
2//! `#[path]` child of `ops_index.rs`, split under the 500-LOC rule.
3
4use kevy_index::IndexKind;
5
6use crate::KevyResult;
7use crate::ops_index::SegmentStats;
8use crate::store::Store;
9
10impl Store {
11    /// Summed segment stats (entries / bytes / coerce failures /
12    /// unique-fence duplicates).
13    pub fn idx_stats(&self, name: &[u8]) -> KevyResult<SegmentStats> {
14        let mut sum = SegmentStats::default();
15        self.for_each_segment(name, |seg| {
16            let s = seg.stats();
17            sum.entries += s.entries;
18            sum.approx_bytes += s.approx_bytes;
19            sum.coerce_failures += s.coerce_failures;
20            sum.duplicates += s.duplicates;
21        })?;
22        Ok(sum)
23    }
24
25    /// Declared indexes (name, prefix, kind), declaration order.
26    pub fn idx_list(&self) -> Vec<(Vec<u8>, Vec<u8>, IndexKind)> {
27        let g = self
28            .indexes
29            .catalog
30            .read()
31            .unwrap_or_else(std::sync::PoisonError::into_inner);
32        g.1.iter()
33            .map(|(s, _)| (s.name.clone(), s.prefix.clone(), s.kind))
34            .collect()
35    }
36}