Struct LogPage
pub struct LogPage {
pub events: Vec<LogEvent>,
pub next_cursor: Option<(String, String)>,
pub next_cursor_line_offset: Option<u64>,
pub next_segment_cursor: Option<String>,
pub at_end: bool,
pub incomplete: bool,
}Expand description
One page returned by load_page.
Fields§
§events: Vec<LogEvent>§next_cursor: Option<(String, String)>tie-breaks by lexicographic id and can silently drop events; use next_cursor_line_offset / until_line_offset instead. Removal tracked in zeroclaw-labs/zeroclaw#8012.
next_cursor_line_offset: Option<u64>Byte offset past the OLDEST event on this page (the event in
file order that is earliest among this page’s matches). Pass
back as LogFilter::until_line_offset on the next request to
walk older pages. None when the page is empty.
For multi-segment deployments, this is None when the oldest event is
in an archive file rather than the active file; use
Self::next_segment_cursor in that case.
next_segment_cursor: Option<String>Segment-aware cursor for the oldest event on this page. Pass back as
?until_segment_cursor= on the next request to walk older pages across
segment boundaries. Supersedes next_cursor_line_offset for
multi-segment deployments. None when the page is empty.
at_end: boolTrue when the file was fully scanned. UI uses this to disable “load older” affordances.
incomplete: boolTrue when a retained segment could not be read and was left out.
The page is still returned: one unreadable archive should not cost the
caller every other segment. But it makes at_end non-authoritative —
it then means “no older events among the segments that could be read”,
which is not the same as “no older events exist”. A caller that stops
paging on at_end should surface this rather than present the result
as the complete history.
The daemon also logs each skipped segment, but a log line reaches the operator while this reaches the caller that has to decide what to do.
Defaulted on deserialize so a page from an older daemon still parses.