use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "stage", rename_all = "snake_case")]
pub enum SubsetStage {
BuildMasterGrid {
interval_ms: i64,
grid_min_ms: i64,
grid_max_ms: i64,
n_time_points: usize,
n_subjects: usize,
temporality: String,
},
Filter {
measurement: String,
has_time_filter: bool,
has_subject_filter: bool,
},
Crush {
measurement: String,
aggregation: String,
},
JoinMeasurement { measurement: String },
WideJoin {
measurements: Vec<String>,
source: String,
},
Pipeline { measurement: String, phase: String },
FillNull { column: String, value: String },
JoinQuality { quality: String },
QualityFilter {
quality: String,
values: Vec<String>,
},
ComputeDerivations { count: usize },
TimeFilter,
SubjectFilter,
ReportInterval {
bucket: String,
strategy: String,
n_buckets: usize,
n_measurements: usize,
},
GroupBy {
qualities: Vec<String>,
missing_policy: String,
n_groups: usize,
n_measurements: usize,
},
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StageDiag {
pub stage: SubsetStage,
pub rows_after: usize,
pub elapsed_us: u64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub notes: Vec<String>,
}
impl StageDiag {
pub fn new(stage: SubsetStage, rows_after: usize, elapsed_us: u64) -> Self {
Self {
stage,
rows_after,
elapsed_us,
notes: Vec::new(),
}
}
}