Expand description
Opentracing middleware implementation for reqwest_middleware.
Attach TracingMiddleware to your client to automatically trace HTTP requests.
The simplest possible usage:
use reqwest_middleware::{ClientBuilder};
use reqwest_datadog_tracing::TracingMiddleware;
let reqwest_client = reqwest::Client::builder().build().unwrap();
let client = ClientBuilder::new(reqwest_client)
   // Insert the tracing middleware
   .with(TracingMiddleware::default())
   .build();
let resp = client.get("https://truelayer.com").send().await.unwrap();To customise the span names use OtelName.
use reqwest_middleware::{ClientBuilder, Extension};
use reqwest_datadog_tracing::{
    TracingMiddleware, OtelName
};
let reqwest_client = reqwest::Client::builder().build().unwrap();
let client = ClientBuilder::new(reqwest_client)
   // Inserts the extension before the request is started
   .with_init(Extension(OtelName("my-client".into())))
   // Makes use of that extension to specify the otel name
   .with(TracingMiddleware::default())
   .build();
let resp = client.get("https://truelayer.com").send().await.unwrap();
// Or specify it on the individual request (will take priority)
let resp = client.post("https://api.truelayer.com/payment")
    .with_extension(OtelName("POST /payment".into()))
   .send()
   .await
   .unwrap();In this example we define a custom span builder to calculate the request time elapsed and we register the TracingMiddleware.
Note that Opentelemetry tracks start and stop already, there is no need to have a custom builder like this.
use reqwest_middleware::Result;
use http::Extensions;
use reqwest::{Request, Response};
use reqwest_middleware::ClientBuilder;
use reqwest_datadog_tracing::{
    default_on_request_end, reqwest_otel_span, ReqwestOtelSpanBackend, TracingMiddleware
};
use tracing::Span;
use std::time::{Duration, Instant};
pub struct TimeTrace;
impl ReqwestOtelSpanBackend for TimeTrace {
    fn on_request_start(req: &Request, extension: &mut Extensions) -> Span {
        extension.insert(Instant::now());
        reqwest_otel_span!(name="example-request", req, time_elapsed = tracing::field::Empty)
    }
    fn on_request_end(span: &Span, outcome: &Result<Response>, extension: &mut Extensions) {
        let time_elapsed = extension.get::<Instant>().unwrap().elapsed().as_millis() as i64;
        default_on_request_end(span, outcome);
        span.record("time_elapsed", &time_elapsed);
    }
}
let http = ClientBuilder::new(reqwest::Client::new())
    .with(TracingMiddleware::<TimeTrace>::new())
    .build();Macros§
- reqwest_
otel_ span  reqwest_otel_span!creates a newtracing::Span. It empowers you to add custom properties to the span on top of the default properties provided by the macro
Structs§
- Default
Span Backend  - The default 
ReqwestOtelSpanBackendforTracingMiddleware. Note that it doesn’t include theurl.fullfield in spans, you can useSpanBackendWithUrlto add it. - Disable
Otel Propagation  DisableOtelPropagationdisables opentelemetry header propagation, while still tracing the HTTP request.- Otel
Name  OtelNameallows customisation of the name of the spans created byDefaultSpanBackendandSpanBackendWithUrl.- Otel
Path Names  OtelPathNamesallows including templated paths in the spans created byDefaultSpanBackendandSpanBackendWithUrl.- Span
Backend With Url  - Similar to 
DefaultSpanBackendbut also adds theurl.fullattribute to request spans. - Tracing
Middleware  - Middleware for tracing requests using the current Opentelemetry Context.
 
Constants§
- ERROR_
CAUSE_ CHAIN  - The 
error.cause_chainfield added to the span byreqwest_otel_span - ERROR_
MESSAGE  - The 
error.messagefield added to the span byreqwest_otel_span - HTTP_
REQUEST_ METHOD  - The 
http.request.methodfield added to the span byreqwest_otel_span - HTTP_
RESPONSE_ STATUS_ CODE  - The 
http.response.status_codefield added to the span byreqwest_otel_span - OTEL_
KIND  - The 
otel.kindfield added to the span byreqwest_otel_span - OTEL_
NAME  - The 
otel.namefield added to the span byreqwest_otel_span - OTEL_
STATUS_ CODE  - The 
otel.status_codefield added to the span byreqwest_otel_span - SERVER_
ADDRESS  - The 
server.addressfield added to the span byreqwest_otel_span - SERVER_
PORT  - The 
server.portfield added to the span byreqwest_otel_span - URL_
FULL  - The 
url.fullfield added to the span byreqwest_otel_span - URL_
SCHEME  - The 
url.schemefield added to the span byreqwest_otel_span - USER_
AGENT_ ORIGINAL  - The 
user_agent.originalfield added to the span byreqwest_otel_span 
Traits§
- Reqwest
Otel Span Backend  ReqwestOtelSpanBackendallows you to customise the span attached byTracingMiddlewareto incoming requests.
Functions§
- default_
on_ request_ end  - Populates default success/failure fields for a given 
reqwest_otel_span!span. - default_
on_ request_ failure  - Populates default failure fields for a given 
reqwest_otel_span!span. - default_
on_ request_ success  - Populates default success fields for a given 
reqwest_otel_span!span. - default_
span_ name  - Determine the name of the span that should be associated with this request.