MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / get_session_events

Method get_session_events

atomic-core/src/pristine/txn/read.rs:704–731  ·  view source on GitHub ↗

Get all session events for a provenance graph. Returns events in sequence order (one per provenance node, for any agent). Empty only if the provenance has no nodes / no session data.

(
        &self,
        provenance_id: u64,
    )

Source from the content-addressed store, hash-verified

702 /// Returns events in sequence order (one per provenance node, for any
703 /// agent). Empty only if the provenance has no nodes / no session data.
704 pub fn get_session_events(
705 &self,
706 provenance_id: u64,
707 ) -> PristineResult<Vec<crate::change::session::SessionEvent>> {
708 use crate::change::session::{encode_session_prefix, SessionEvent};
709
710 let table = self.txn.open_table(SESSION_EVENTS)?;
711 let mut events = Vec::new();
712
713 // Use a bounded prefix range instead of a full-table scan.
714 // All keys for `provenance_id` lie in [prefix(id), prefix(id+1)).
715 let start = encode_session_prefix(provenance_id);
716 let end = encode_session_prefix(provenance_id.saturating_add(1));
717 for result in table.range::<&[u8; 16]>(&start..&end)? {
718 let (_key, value) = result?;
719 match SessionEvent::from_bytes(value.value()) {
720 Ok(event) => events.push(event),
721 Err(e) => {
722 log::warn!("Failed to deserialize session event: {}", e);
723 }
724 }
725 }
726
727 // Events are already in seq order because keys encode (provenance_id,
728 // seq) with the same byte layout, but sort explicitly to be safe.
729 events.sort_by_key(|e| e.seq);
730 Ok(events)
731 }
732
733 /// Get all todos for a provenance graph.
734 ///

Calls 2

encode_session_prefixFunction · 0.85
pushMethod · 0.45