use query_planning::correlation::QueryId;
use super::{JoinOperatorMetrics, QueryMetrics};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct OperatorMetrics {
pub query_id: Option<QueryId>,
pub node_id: String,
pub operator_kind: String,
pub input_rows: u64,
pub input_bytes: u64,
pub output_rows: u64,
pub output_bytes: u64,
pub join: Option<JoinOperatorMetrics>,
}
impl OperatorMetrics {
pub fn join(node_id: impl ToString, join: JoinOperatorMetrics) -> Self {
Self { node_id: node_id.to_string(), operator_kind: "join".to_string(), join: Some(join), ..Default::default() }
}
}
impl QueryMetrics {
pub fn record_operator_metrics(&mut self, mut metrics: OperatorMetrics) {
if metrics.query_id.is_none() {
metrics.query_id = self.inherited_query_id();
}
if let Some(join) = &mut metrics.join {
if join.query_id.is_none() {
join.query_id = metrics.query_id.clone();
}
self.join_gather_map_bytes = self.join_gather_map_bytes.saturating_add(join.gather_map_bytes);
}
self.operators.push(metrics);
}
}