use crate::{
db::access::AccessPlan,
metrics::sink::{
GroupedPlanStrategy as MetricsGroupedPlanStrategy, MetricsEvent, PlanKind, Span, record,
},
traits::EntityKind,
};
pub(super) fn record_plan_metrics<K>(access: &AccessPlan<K>) {
let kind = access_plan_kind(access);
record(MetricsEvent::Plan {
kind,
grouped_strategy: None,
});
}
pub(super) fn record_grouped_plan_metrics<K>(
access: &AccessPlan<K>,
grouped_strategy: MetricsGroupedPlanStrategy,
) {
let kind = access_plan_kind(access);
record(MetricsEvent::Plan {
kind,
grouped_strategy: Some(grouped_strategy),
});
}
fn access_plan_kind<K>(access: &AccessPlan<K>) -> PlanKind {
let executable = access.resolve_strategy();
executable.executable().metrics_kind()
}
pub(super) const fn set_rows_from_len<E: EntityKind>(span: &mut Span<E>, len: usize) {
span.set_rows(len as u64);
}
pub(super) fn record_rows_scanned_for_path(entity_path: &'static str, rows_scanned: usize) {
record(MetricsEvent::RowsScanned {
entity_path,
rows_scanned: u64::try_from(rows_scanned).unwrap_or(u64::MAX),
});
}
pub(super) fn record_rows_filtered_for_path(entity_path: &'static str, rows_filtered: usize) {
record(MetricsEvent::RowsFiltered {
entity_path,
rows_filtered: u64::try_from(rows_filtered).unwrap_or(u64::MAX),
});
}
pub(super) fn record_rows_aggregated_for_path(entity_path: &'static str, rows_aggregated: usize) {
record(MetricsEvent::RowsAggregated {
entity_path,
rows_aggregated: u64::try_from(rows_aggregated).unwrap_or(u64::MAX),
});
}
pub(super) fn record_rows_emitted_for_path(entity_path: &'static str, rows_emitted: usize) {
record(MetricsEvent::RowsEmitted {
entity_path,
rows_emitted: u64::try_from(rows_emitted).unwrap_or(u64::MAX),
});
}