pub struct AccessRecord {Show 19 fields
pub request_id: String,
pub correlation_id: String,
pub method: String,
pub path: String,
pub listener: String,
pub route: String,
pub consumer: String,
pub upstream: Option<String>,
pub endpoint: Option<String>,
pub attempts: u32,
pub rate_limited: bool,
pub broken: bool,
pub shed: bool,
pub plugin_short_circuit: bool,
pub status: u16,
pub duration_ms: f64,
pub bytes_in: u64,
pub bytes_out: Arc<AtomicU64>,
pub custom: Vec<(String, String)>,
}Expand description
The accumulated access-log record for one request. The proxy fills
fields as the request progresses; finish stamps status/duration.
Fields§
§request_id: String§correlation_id: StringThe correlation ID (DW-093): the inbound X-Correlation-Id
when present and valid, else the request_id (the fallback
so every request carries a non-empty correlation handle for
the journey/funnel query). Stored in the analytics raw
table; echoed on the response as X-Correlation-Id.
method: String§path: StringRequest path WITHOUT the query string (redaction).
listener: String§route: StringMatched route name, or “unrouted” for 404s.
consumer: StringAuthenticated consumer, or “anonymous”.
upstream: Option<String>§endpoint: Option<String>§attempts: u32§rate_limited: bool§broken: bool§shed: bool§plugin_short_circuit: boolA plugin chain answered this request instead of the route’s
action (DW-157): a send_http_response short-circuit or a
fail-closed plugin error (500 plugin_unavailable /
plugin_failed / plugin_body_too_large).
status: u16§duration_ms: f64§bytes_in: u64Inbound request body bytes (PERF-12, #209): the declared
Content-Length when present, 0 for streamed/chunked request
bodies (counting streamed request bytes would require wrapping
the upstream-forwarded body; the response-side count is the
primary signal for capacity planning and top-talker reports).
bytes_out: Arc<AtomicU64>Outbound response body bytes (PERF-12, #209): counted frame-by-
frame as the response body streams to the client, WITHOUT
buffering. An Arc<AtomicU64> so the CountingBody wrapper
can increment it from poll_frame while the access record is
held by the caller; the final value is read when the body
completes and the deferred access log / analytics are emitted.
custom: Vec<(String, String)>Custom analytics dimensions (DW-043): config-declared
header-sourced tags, captured at record creation. Analytics-
only — deliberately NOT part of emit_access’s redacted
field list.
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl Freeze for AccessRecord
impl RefUnwindSafe for AccessRecord
impl Send for AccessRecord
impl Sync for AccessRecord
impl Unpin for AccessRecord
impl UnwindSafe for AccessRecord
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specializationSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more