1use std::collections::HashMap;
2
3use crate::segment::types::{PayloadIndexInfo, PayloadKeyType};
4
5use super::EdgeShard;
6
7#[derive(Clone, Debug)]
8pub struct ShardInfo {
9 pub segments_count: usize,
12 pub points_count: usize,
15 pub indexed_vectors_count: usize,
19 pub payload_schema: HashMap<PayloadKeyType, PayloadIndexInfo>,
21}
22
23impl EdgeShard {
24 pub fn info(&self) -> ShardInfo {
25 let mut segments_count = 0;
26 let mut points_count = 0;
27 let mut indexed_vectors_count = 0;
28 let mut payload_schema = HashMap::new();
29
30 for (_, segment) in self.segments.read().iter() {
31 segments_count += 1;
32
33 let segment_info = segment.get().read().info();
34
35 points_count += segment_info.num_points;
36 indexed_vectors_count += segment_info.num_indexed_vectors;
37
38 for (payload_key, payload_index) in segment_info.index_schema {
39 payload_schema
40 .entry(payload_key)
41 .and_modify(|total: &mut PayloadIndexInfo| total.points += payload_index.points)
42 .or_insert(payload_index);
43 }
44 }
45
46 ShardInfo {
47 segments_count,
48 points_count,
49 indexed_vectors_count,
50 payload_schema,
51 }
52 }
53}