2022-06-30 13:54:54 +00:00
|
|
|
//! Opentracing middleware implementation for [`reqwest_middleware`].
|
2021-09-28 18:26:03 +00:00
|
|
|
//!
|
|
|
|
//! Attach [`TracingMiddleware`] to your client to automatically trace HTTP requests.
|
2022-06-30 13:54:54 +00:00
|
|
|
//!
|
|
|
|
//! In this example we define a custom span builder to calculate the request time elapsed and we register the [`TracingMiddleware`].
|
|
|
|
//! ```rust
|
|
|
|
//! use reqwest_middleware::Result;
|
|
|
|
//! use task_local_extensions::Extensions;
|
|
|
|
//! use reqwest::{Request, Response};
|
|
|
|
//! use reqwest_middleware::ClientBuilder;
|
|
|
|
//! use reqwest_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!(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();
|
|
|
|
//! ```
|
2021-09-28 18:26:03 +00:00
|
|
|
|
2021-08-10 16:07:08 +00:00
|
|
|
mod middleware;
|
|
|
|
#[cfg(any(
|
|
|
|
feature = "opentelemetry_0_13",
|
|
|
|
feature = "opentelemetry_0_14",
|
2021-08-30 11:14:06 +00:00
|
|
|
feature = "opentelemetry_0_15",
|
|
|
|
feature = "opentelemetry_0_16",
|
2022-02-16 17:37:54 +00:00
|
|
|
feature = "opentelemetry_0_17",
|
2021-08-10 16:07:08 +00:00
|
|
|
))]
|
|
|
|
mod otel;
|
2022-06-30 13:54:54 +00:00
|
|
|
mod reqwest_otel_span_builder;
|
2021-08-10 16:07:08 +00:00
|
|
|
pub use middleware::TracingMiddleware;
|
2022-06-30 13:54:54 +00:00
|
|
|
pub use reqwest_otel_span_builder::{
|
|
|
|
default_on_request_end, default_on_request_failure, default_on_request_success,
|
|
|
|
DefaultSpanBackend, ReqwestOtelSpanBackend, ERROR_CAUSE_CHAIN, ERROR_MESSAGE, HTTP_HOST,
|
|
|
|
HTTP_METHOD, HTTP_SCHEME, HTTP_STATUS_CODE, HTTP_USER_AGENT, NET_HOST_PORT, OTEL_KIND,
|
|
|
|
OTEL_NAME, OTEL_STATUS_CODE,
|
|
|
|
};
|
|
|
|
|
|
|
|
#[doc(hidden)]
|
|
|
|
pub mod reqwest_otel_span_macro;
|