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§
Source§impl TraceContext
impl TraceContext
Sourcepub fn new() -> Self
pub fn new() -> Self
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);
Sourcepub fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>>
pub fn from_headers(headers: impl AsRef<Headers>) -> Result<Option<Self>>
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);
Sourcepub 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()));
Sourcepub fn name(&self) -> HeaderName
pub fn name(&self) -> HeaderName
Get the HeaderName
.
Sourcepub fn value(&self) -> HeaderValue
pub fn value(&self) -> HeaderValue
Get the HeaderValue
.
Sourcepub fn child(&self) -> Self
pub fn child(&self) -> Self
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.
Sourcepub fn version(&self) -> u8
pub fn version(&self) -> u8
Return the version of the TraceContext spec used.
You probably don’t need this.
Sourcepub 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
.
Sourcepub 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);
Sourcepub 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);