Expose compact event control-lane probe summary

This commit is contained in:
Jan Petykiewicz 2026-04-19 01:01:30 -07:00
commit 519d5e2f2b
3 changed files with 456 additions and 0 deletions

View file

@ -3844,6 +3844,18 @@ pub struct SmpLoadedEventRuntimeCollectionSummary {
#[serde(default)]
pub imported_runtime_record_count: usize,
#[serde(default)]
pub records_with_trigger_kind: usize,
#[serde(default)]
pub records_missing_trigger_kind: usize,
#[serde(default)]
pub nondirect_compact_record_count: usize,
#[serde(default)]
pub nondirect_compact_records_missing_trigger_kind: usize,
#[serde(default)]
pub trigger_kinds_present: Vec<u8>,
#[serde(default)]
pub control_lane_notes: Vec<String>,
#[serde(default)]
pub records: Vec<SmpLoadedPackedEventRecordSummary>,
}
@ -9398,6 +9410,42 @@ fn parse_event_runtime_collection_summary_with_tag_width(
.iter()
.filter(|record| record.executable_import_ready)
.count();
let records_with_trigger_kind = records
.iter()
.filter(|record| record.trigger_kind.is_some())
.count();
let records_missing_trigger_kind = records.len().saturating_sub(records_with_trigger_kind);
let nondirect_compact_record_count = records
.iter()
.filter(|record| record.payload_family == "real_packed_nondirect_compact_v1")
.count();
let nondirect_compact_records_missing_trigger_kind = records
.iter()
.filter(|record| {
record.payload_family == "real_packed_nondirect_compact_v1"
&& record.trigger_kind.is_none()
})
.count();
let mut trigger_kinds_present = records
.iter()
.filter_map(|record| record.trigger_kind)
.collect::<Vec<_>>();
trigger_kinds_present.sort_unstable();
trigger_kinds_present.dedup();
let mut control_lane_notes = Vec::new();
if nondirect_compact_record_count != 0
&& nondirect_compact_record_count == nondirect_compact_records_missing_trigger_kind
{
control_lane_notes.push(
"all compact non-direct rows currently decode row bodies only and still lack a decoded trigger/control lane".to_string(),
);
}
if records_with_trigger_kind != 0 {
control_lane_notes.push(format!(
"decoded trigger kinds present in this collection = {:?}",
trigger_kinds_present
));
}
return Some(SmpLoadedEventRuntimeCollectionSummary {
source_kind,
@ -9419,6 +9467,12 @@ fn parse_event_runtime_collection_summary_with_tag_width(
live_entry_ids,
decoded_record_count,
imported_runtime_record_count,
records_with_trigger_kind,
records_missing_trigger_kind,
nondirect_compact_record_count,
nondirect_compact_records_missing_trigger_kind,
trigger_kinds_present,
control_lane_notes,
records,
});
}
@ -21949,6 +22003,9 @@ mod tests {
assert_eq!(summary.live_entry_ids, vec![1, 3, 5]);
assert_eq!(summary.records_tag_offset, 96);
assert_eq!(summary.decoded_record_count, 0);
assert_eq!(summary.records_with_trigger_kind, 0);
assert_eq!(summary.records_missing_trigger_kind, 3);
assert_eq!(summary.nondirect_compact_record_count, 0);
assert_eq!(summary.records.len(), 3);
assert_eq!(summary.records[0].decode_status, "unsupported_framing");
}
@ -21984,6 +22041,9 @@ mod tests {
assert_eq!(summary.live_entry_ids, vec![1, 3, 5]);
assert_eq!(summary.records_tag_offset, 98);
assert_eq!(summary.decoded_record_count, 0);
assert_eq!(summary.records_with_trigger_kind, 0);
assert_eq!(summary.records_missing_trigger_kind, 3);
assert_eq!(summary.nondirect_compact_record_count, 0);
assert_eq!(summary.records.len(), 3);
assert_eq!(summary.records[0].decode_status, "unsupported_framing");
}
@ -22022,6 +22082,10 @@ mod tests {
assert_eq!(summary.live_entry_ids, vec![1, 2, 3]);
assert_eq!(summary.records_tag_offset, 102);
assert_eq!(summary.decoded_record_count, 0);
assert_eq!(summary.records_with_trigger_kind, 0);
assert_eq!(summary.records_missing_trigger_kind, 3);
assert_eq!(summary.nondirect_compact_record_count, 0);
assert_eq!(summary.nondirect_compact_records_missing_trigger_kind, 0);
assert_eq!(summary.records.len(), 3);
assert_eq!(summary.records[0].decode_status, "unsupported_framing");
}
@ -22074,6 +22138,13 @@ mod tests {
.event_runtime_collection_summary
.as_ref()
.expect("non-direct event runtime collection summary should parse");
assert_eq!(summary.records_with_trigger_kind, 0);
assert_eq!(summary.records_missing_trigger_kind, 1);
assert_eq!(summary.nondirect_compact_record_count, 1);
assert_eq!(summary.nondirect_compact_records_missing_trigger_kind, 1);
assert!(summary.control_lane_notes.iter().any(|line| {
line.contains("all compact non-direct rows currently decode row bodies only")
}));
let record = summary
.records
.first()
@ -22355,9 +22426,13 @@ mod tests {
assert_eq!(summary.decoded_record_count, 1);
assert_eq!(summary.imported_runtime_record_count, 1);
assert_eq!(summary.records_with_trigger_kind, 1);
assert_eq!(summary.records_missing_trigger_kind, 0);
assert_eq!(summary.trigger_kinds_present, vec![7]);
assert_eq!(summary.records.len(), 1);
assert_eq!(summary.records[0].decode_status, "executable");
assert_eq!(summary.records[0].payload_family, "synthetic_harness");
assert_eq!(summary.records[0].trigger_kind, Some(7));
assert_eq!(summary.records[0].text_bands[0].preview, "Alpha");
assert_eq!(summary.records[0].standalone_condition_row_count, 1);
assert_eq!(
@ -22408,6 +22483,9 @@ mod tests {
assert_eq!(summary.decoded_record_count, 1);
assert_eq!(summary.imported_runtime_record_count, 1);
assert_eq!(summary.records_with_trigger_kind, 1);
assert_eq!(summary.records_missing_trigger_kind, 0);
assert_eq!(summary.trigger_kinds_present, vec![8]);
assert_eq!(summary.records[0].decode_status, "executable");
assert_eq!(summary.records[0].payload_family, "synthetic_harness");
assert!(summary.records[0].executable_import_ready);
@ -24864,6 +24942,12 @@ mod tests {
live_entry_ids: vec![1, 3, 5],
decoded_record_count: 0,
imported_runtime_record_count: 0,
records_with_trigger_kind: 0,
records_missing_trigger_kind: 3,
nondirect_compact_record_count: 0,
nondirect_compact_records_missing_trigger_kind: 0,
trigger_kinds_present: vec![],
control_lane_notes: vec![],
records: build_unsupported_event_runtime_record_summaries(&[1, 3, 5], "test summary"),
});