Struct ajars_surf::surf::http::trace::TraceContext
[−]pub struct TraceContext { /* private fields */ }
Expand description
Extract and apply Trace-Context headers.
Specifications
Examples
use http_types::trace::TraceContext;
let mut res = http_types::Response::new(200);
res.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let context = TraceContext::from_headers(&res)?.unwrap();
let trace_id = u128::from_str_radix("0af7651916cd43dd8448eb211c80319c", 16);
let parent_id = u64::from_str_radix("00f067aa0ba902b7", 16);
assert_eq!(context.trace_id(), trace_id.unwrap());
assert_eq!(context.parent_id(), parent_id.ok());
assert_eq!(context.sampled(), true);
Implementations
impl TraceContext
impl TraceContext
pub fn new() -> TraceContext
pub fn new() -> TraceContext
Generate a new TraceContext object without a parent.
By default root TraceContext objects are sampled.
To mark it unsampled, call context.set_sampled(false)
.
Examples
use http_types::trace::TraceContext;
let context = TraceContext::new();
assert_eq!(context.parent_id(), None);
assert_eq!(context.sampled(), true);
pub fn from_headers(
headers: impl AsRef<Headers>
) -> Result<Option<TraceContext>, Error>
pub fn from_headers(
headers: impl AsRef<Headers>
) -> Result<Option<TraceContext>, Error>
Create and return TraceContext object based on traceparent
HTTP header.
Errors
This function may error if the header is malformed. An error with a
status code of 400: Bad Request
will be generated.
Examples
use http_types::trace::TraceContext;
let mut res = http_types::Response::new(200);
res.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let context = TraceContext::from_headers(&res)?.unwrap();
let trace_id = u128::from_str_radix("0af7651916cd43dd8448eb211c80319c", 16);
let parent_id = u64::from_str_radix("00f067aa0ba902b7", 16);
assert_eq!(context.trace_id(), trace_id.unwrap());
assert_eq!(context.parent_id(), parent_id.ok());
assert_eq!(context.sampled(), true);
pub fn apply(&self, headers: impl AsMut<Headers>)
pub fn apply(&self, headers: impl AsMut<Headers>)
Add the traceparent header to the http headers
Examples
use http_types::trace::TraceContext;
use http_types::{Request, Response, Url, Method};
let mut req = Request::new(Method::Get, Url::parse("https://example.com").unwrap());
req.insert_header(
"traceparent",
"00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
);
let parent = TraceContext::from_headers(&req)?.unwrap();
let mut res = Response::new(200);
parent.apply(&mut res);
let child = TraceContext::from_headers(&res)?.unwrap();
assert_eq!(child.version(), parent.version());
assert_eq!(child.trace_id(), parent.trace_id());
assert_eq!(child.parent_id(), Some(parent.id()));
pub fn name(&self) -> HeaderName
pub fn name(&self) -> HeaderName
Get the HeaderName
.
pub fn value(&self) -> HeaderValue
pub fn value(&self) -> HeaderValue
Get the HeaderValue
.
pub fn child(&self) -> TraceContext
pub fn child(&self) -> TraceContext
Generate a child of the current TraceContext and return it.
The child will have a new randomly genrated id
and its parent_id
will be set to the
id
of this TraceContext.
pub fn version(&self) -> u8
pub fn version(&self) -> u8
Return the version of the TraceContext spec used.
You probably don’t need this.
pub fn trace_id(&self) -> u128
pub fn trace_id(&self) -> u128
Return the trace id of the TraceContext.
All children will have the same trace_id
.
pub fn sampled(&self) -> bool
pub fn sampled(&self) -> bool
Returns true if the trace is sampled
Examples
use http_types::trace::TraceContext;
use http_types::Response;
let mut res = Response::new(200);
res.insert_header("traceparent", "00-00000000000000000000000000000001-0000000000000002-01");
let context = TraceContext::from_headers(&res)?.unwrap();
assert_eq!(context.sampled(), true);
pub fn set_sampled(&mut self, sampled: bool)
pub fn set_sampled(&mut self, sampled: bool)
Change sampled flag
Examples
use http_types::trace::TraceContext;
let mut context = TraceContext::new();
assert_eq!(context.sampled(), true);
context.set_sampled(false);
assert_eq!(context.sampled(), false);
Trait Implementations
impl Debug for TraceContext
impl Debug for TraceContext
Auto Trait Implementations
impl RefUnwindSafe for TraceContext
impl Send for TraceContext
impl Sync for TraceContext
impl Unpin for TraceContext
impl UnwindSafe for TraceContext
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more