Struct http_types::trace::TraceContext [−][src]
pub struct TraceContext { /* fields omitted */ }
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
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);
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);
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()));
Get the HeaderName
.
Get the HeaderValue
.
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.
Return the version of the TraceContext spec used.
You probably don’t need this.
Return the trace id of the TraceContext.
All children will have the same trace_id
.
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);
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);