#[non_exhaustive]pub struct Counters {Show 16 fields
pub framers_created: u64,
pub framer_header_polls: u64,
pub framer_object_polls: u64,
pub control_parsers_created: u64,
pub datagram_headers_decoded: u64,
pub egress_items_queued: u64,
pub objects_elided: u64,
pub object_ids_rewritten: u64,
pub units_delayed: u64,
pub objects_truncated: u64,
pub actions_refused: u64,
pub streams_not_shapeable: u64,
pub objects_not_addressable: u64,
pub control_frames_not_decodable: u64,
pub release_error_ns: u64,
pub release_errors: ReleaseErrors,
}Expand description
A snapshot of one session’s slow-path counters.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.framers_created: u64ObjectFramer instances created.
framer_header_polls: u64ObjectFramer::poll_header calls.
framer_object_polls: u64ObjectFramer::poll_object calls.
control_parsers_created: u64ControlStreamParser constructions.
datagram_headers_decoded: u64AnyDatagramHeader::decode call sites entered.
egress_items_queued: u64Units pushed onto a per-stream pending queue.
objects_elided: u64Objects removed by DropMode::Elide.
object_ids_rewritten: u64Elide fix-ups written: one leading Object ID varint on a subgroup stream, one re-encoded framing on a fetch stream. Counted only where the bytes actually moved — a survivor that already said the right thing is forwarded untouched and counted nowhere.
units_delayed: u64Units deferred by Action::Delay,
counted once each at the decision.
Units, not objects, and the name is the whole statement of the difference: a delay is honoured at the control site as well as the object site, so a deferred SUBSCRIBE is one of these. The field below is named for objects because a truncation is refused on a control stream and can only ever land on one.
Counted where the decision was taken rather than where the unit came
back out, so one still sitting in a queue when the session ends is
already here. Self::release_errors is the other half — what was
released, and how late.
Not Self::egress_items_queued, which counts every push, stream
headers and elided ordering slots included; that figure is larger
than this one on any session that forwards at all.
objects_truncated: u64Objects cut short by
Action::Truncate, counted once
each.
Applied truncations only. An attempt refused for an out-of-range
error code, or made at a site that carries no truncation, moves
Self::actions_refused and never this.
actions_refused: u64Actions refused, counted per attempt.
streams_not_shapeable: u64Streams the framer stopped parsing.
objects_not_addressable: u64Objects streamed through without being addressable. The running
total behind ImpairmentKind::ObjectNotAddressable, which is
emitted only once per stream.
control_frames_not_decodable: u64Control frames the decoder refused, which the proxy forwarded
without being able to read. The running total behind
ImpairmentKind::ControlFrameNotDecodable, which is emitted only
once per control stream direction.
Zero on a session with no observer and no control interest, which
builds no parser and reads no frame — the same byte-pump case
control_parsers_created reports.
release_error_ns: u64Accumulated actual_release - release_at, in nanoseconds.
The raw sum, kept for callers that want it;
Self::release_errors is the useful form.
release_errors: ReleaseErrorsDistribution of the above: p50, p95 and max lateness.