File size: 1,961 Bytes
84d2a97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use std::sync::Arc;

use common::types::TelemetryDetail;
use parking_lot::Mutex;

use crate::common::operation_time_statistics::OperationDurationsAggregator;
use crate::telemetry::VectorIndexSearchesTelemetry;

#[derive(Debug)]
pub struct SparseSearchesTelemetry {
    pub filtered_sparse: Arc<Mutex<OperationDurationsAggregator>>,
    pub unfiltered_sparse: Arc<Mutex<OperationDurationsAggregator>>,
    pub filtered_plain: Arc<Mutex<OperationDurationsAggregator>>,
    pub unfiltered_plain: Arc<Mutex<OperationDurationsAggregator>>,
    pub small_cardinality: Arc<Mutex<OperationDurationsAggregator>>,
}

impl SparseSearchesTelemetry {
    pub fn new() -> Self {
        SparseSearchesTelemetry {
            filtered_sparse: OperationDurationsAggregator::new(),
            unfiltered_sparse: OperationDurationsAggregator::new(),
            filtered_plain: OperationDurationsAggregator::new(),
            unfiltered_plain: OperationDurationsAggregator::new(),
            small_cardinality: OperationDurationsAggregator::new(),
        }
    }

    pub fn get_telemetry_data(&self, detail: TelemetryDetail) -> VectorIndexSearchesTelemetry {
        VectorIndexSearchesTelemetry {
            index_name: None,
            unfiltered_plain: self.unfiltered_plain.lock().get_statistics(detail),
            filtered_plain: self.filtered_plain.lock().get_statistics(detail),
            unfiltered_hnsw: Default::default(),
            filtered_small_cardinality: self.small_cardinality.lock().get_statistics(detail),
            filtered_large_cardinality: Default::default(),
            filtered_exact: Default::default(),
            filtered_sparse: self.filtered_sparse.lock().get_statistics(detail),
            unfiltered_sparse: self.unfiltered_sparse.lock().get_statistics(detail),
            unfiltered_exact: Default::default(),
        }
    }
}

impl Default for SparseSearchesTelemetry {
    fn default() -> Self {
        Self::new()
    }
}