use schemars::JsonSchema;
use serde::Serialize;
use crate::segment::common::anonymize::Anonymize;
use crate::segment::common::operation_time_statistics::OperationDurationStatistics;
use crate::segment::types::{SegmentConfig, SegmentInfo, VectorNameBuf};
#[derive(Serialize, Clone, Debug, JsonSchema, )]
pub struct SegmentTelemetry {
pub info: SegmentInfo,
pub config: SegmentConfig,
pub vector_index_searches: Vec<VectorIndexSearchesTelemetry>,
pub payload_field_indices: Vec<PayloadIndexTelemetry>,
}
#[derive(Serialize, Clone, Debug, JsonSchema, )]
pub struct PayloadIndexTelemetry {
pub field_name: Option<String>,
pub index_type: &'static str,
pub points_values_count: usize,
pub points_count: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub histogram_bucket_size: Option<usize>,
}
impl PayloadIndexTelemetry {
pub fn set_name(mut self, name: String) -> Self {
self.field_name = Some(name);
self
}
}
#[derive(Serialize, Clone, Debug, JsonSchema, Default)]
pub struct VectorIndexSearchesTelemetry {
#[serde(skip_serializing_if = "Option::is_none")]
pub index_name: Option<VectorNameBuf>,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub unfiltered_plain: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub unfiltered_hnsw: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub unfiltered_sparse: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub filtered_plain: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub filtered_small_cardinality: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub filtered_large_cardinality: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub filtered_exact: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub filtered_sparse: OperationDurationStatistics,
#[serde(skip_serializing_if = "OperationDurationStatistics::is_empty")]
pub unfiltered_exact: OperationDurationStatistics,
}