Cluster add-building compact dispatch families

This commit is contained in:
Jan Petykiewicz 2026-04-19 10:17:49 -07:00
commit d334da6687
4 changed files with 435 additions and 0 deletions

View file

@ -341,6 +341,12 @@ struct RuntimeCompactEventDispatchClusterReport {
add_building_dispatch_records_missing_trigger_kind: usize,
add_building_descriptor_occurrence_counts: BTreeMap<String, usize>,
add_building_descriptor_map_counts: BTreeMap<String, usize>,
add_building_signature_family_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_family_map_counts: BTreeMap<String, usize>,
add_building_condition_tuple_occurrence_counts: BTreeMap<String, usize>,
add_building_condition_tuple_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>,
}
#[derive(Debug, Serialize)]
@ -361,6 +367,12 @@ struct RuntimeCompactEventDispatchClusterCountsReport {
add_building_dispatch_records_missing_trigger_kind: usize,
add_building_descriptor_occurrence_counts: BTreeMap<String, usize>,
add_building_descriptor_map_counts: BTreeMap<String, usize>,
add_building_signature_family_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_family_map_counts: BTreeMap<String, usize>,
add_building_condition_tuple_occurrence_counts: BTreeMap<String, usize>,
add_building_condition_tuple_map_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_occurrence_counts: BTreeMap<String, usize>,
add_building_signature_condition_cluster_map_counts: BTreeMap<String, usize>,
}
#[derive(Debug, Clone, Serialize)]
@ -1835,6 +1847,17 @@ fn run_runtime_inspect_compact_event_dispatch_cluster_counts(
add_building_descriptor_occurrence_counts: report
.add_building_descriptor_occurrence_counts,
add_building_descriptor_map_counts: report.add_building_descriptor_map_counts,
add_building_signature_family_occurrence_counts: report
.add_building_signature_family_occurrence_counts,
add_building_signature_family_map_counts: report
.add_building_signature_family_map_counts,
add_building_condition_tuple_occurrence_counts: report
.add_building_condition_tuple_occurrence_counts,
add_building_condition_tuple_map_counts: report.add_building_condition_tuple_map_counts,
add_building_signature_condition_cluster_occurrence_counts: report
.add_building_signature_condition_cluster_occurrence_counts,
add_building_signature_condition_cluster_map_counts: report
.add_building_signature_condition_cluster_map_counts,
},
};
println!("{}", serde_json::to_string_pretty(&output)?);
@ -1861,6 +1884,13 @@ fn build_runtime_compact_event_dispatch_cluster_report(
let mut add_building_dispatch_records_missing_trigger_kind = 0usize;
let mut add_building_descriptor_occurrence_counts = BTreeMap::<String, usize>::new();
let mut add_building_descriptor_map_counts = BTreeMap::<String, usize>::new();
let mut add_building_signature_family_occurrence_counts = BTreeMap::<String, usize>::new();
let mut add_building_signature_family_map_counts = BTreeMap::<String, usize>::new();
let mut add_building_condition_tuple_occurrence_counts = BTreeMap::<String, usize>::new();
let mut add_building_condition_tuple_map_counts = BTreeMap::<String, usize>::new();
let mut add_building_signature_condition_cluster_occurrence_counts =
BTreeMap::<String, usize>::new();
let mut add_building_signature_condition_cluster_map_counts = BTreeMap::<String, usize>::new();
let mut dispatch_descriptor_occurrences =
BTreeMap::<String, Vec<RuntimeCompactEventDispatchClusterOccurrence>>::new();
let mut unknown_descriptor_occurrences =
@ -1876,6 +1906,9 @@ fn build_runtime_compact_event_dispatch_cluster_report(
let mut map_dispatch_strip_record_count = 0usize;
let mut map_descriptor_keys = BTreeSet::<String>::new();
let mut map_add_building_descriptor_keys = BTreeSet::<String>::new();
let mut map_add_building_signature_families = BTreeSet::<String>::new();
let mut map_add_building_condition_tuples = BTreeSet::<String>::new();
let mut map_add_building_signature_condition_clusters = BTreeSet::<String>::new();
for record in &summary.records {
let matching_rows = record
.grouped_effect_rows
@ -1920,6 +1953,16 @@ fn build_runtime_compact_event_dispatch_cluster_report(
})
.collect::<Vec<_>>();
let signature_family = compact_event_signature_family_from_notes(&record.notes);
let condition_tuple_family =
compact_event_dispatch_condition_tuple_family(&condition_tuples);
let signature_family_key = signature_family
.clone()
.unwrap_or_else(|| "unknown-signature-family".to_string());
let signature_condition_cluster_key =
compact_event_dispatch_signature_condition_cluster_key(
signature_family.as_deref(),
&condition_tuples,
);
for (descriptor_id, rows) in matching_rows {
let occurrence = RuntimeCompactEventDispatchClusterOccurrence {
@ -1943,6 +1986,19 @@ fn build_runtime_compact_event_dispatch_cluster_report(
.entry(descriptor_key.clone())
.or_insert(0) += 1;
map_add_building_descriptor_keys.insert(descriptor_key.clone());
*add_building_signature_family_occurrence_counts
.entry(signature_family_key.clone())
.or_insert(0) += 1;
*add_building_condition_tuple_occurrence_counts
.entry(condition_tuple_family.clone())
.or_insert(0) += 1;
*add_building_signature_condition_cluster_occurrence_counts
.entry(signature_condition_cluster_key.clone())
.or_insert(0) += 1;
map_add_building_signature_families.insert(signature_family_key.clone());
map_add_building_condition_tuples.insert(condition_tuple_family.clone());
map_add_building_signature_condition_clusters
.insert(signature_condition_cluster_key.clone());
}
dispatch_descriptor_occurrences
.entry(descriptor_key)
@ -1979,6 +2035,21 @@ fn build_runtime_compact_event_dispatch_cluster_report(
.entry(descriptor_key)
.or_insert(0) += 1;
}
for signature_family in map_add_building_signature_families {
*add_building_signature_family_map_counts
.entry(signature_family)
.or_insert(0) += 1;
}
for condition_tuple_family in map_add_building_condition_tuples {
*add_building_condition_tuple_map_counts
.entry(condition_tuple_family)
.or_insert(0) += 1;
}
for signature_condition_cluster in map_add_building_signature_condition_clusters {
*add_building_signature_condition_cluster_map_counts
.entry(signature_condition_cluster)
.or_insert(0) += 1;
}
}
let unknown_descriptor_ids = unknown_descriptor_occurrences
@ -2012,6 +2083,12 @@ fn build_runtime_compact_event_dispatch_cluster_report(
add_building_dispatch_records_missing_trigger_kind,
add_building_descriptor_occurrence_counts,
add_building_descriptor_map_counts,
add_building_signature_family_occurrence_counts,
add_building_signature_family_map_counts,
add_building_condition_tuple_occurrence_counts,
add_building_condition_tuple_map_counts,
add_building_signature_condition_cluster_occurrence_counts,
add_building_signature_condition_cluster_map_counts,
})
}
@ -4395,6 +4472,33 @@ fn compact_event_dispatch_descriptor_key(
.unwrap_or_else(|| descriptor_id.to_string())
}
fn compact_event_dispatch_condition_tuple_family(
tuples: &[RuntimeCompactEventDispatchClusterConditionTuple],
) -> String {
if tuples.is_empty() {
return "[]".to_string();
}
let parts = tuples
.iter()
.map(|tuple| match &tuple.metric {
Some(metric) => format!("{}:{}:{}", tuple.raw_condition_id, tuple.subtype, metric),
None => format!("{}:{}", tuple.raw_condition_id, tuple.subtype),
})
.collect::<Vec<_>>();
format!("[{}]", parts.join(","))
}
fn compact_event_dispatch_signature_condition_cluster_key(
signature_family: Option<&str>,
tuples: &[RuntimeCompactEventDispatchClusterConditionTuple],
) -> String {
format!(
"{} :: {}",
signature_family.unwrap_or("unknown-signature-family"),
compact_event_dispatch_condition_tuple_family(tuples)
)
}
fn parse_hex_offset(text: &str) -> Option<usize> {
text.strip_prefix("0x")
.and_then(|digits| usize::from_str_radix(digits, 16).ok())