#[macro_export]
macro_rules! reqwest_otel_span {
(name=$name:expr, $request:ident) => {
reqwest_otel_span!(name=$name, $request,)
};
(level=$level:expr, name=$name:expr, $request:ident) => {
reqwest_otel_span!(level=$level, name=$name, $request,)
};
(name=$name:expr, $request:ident, $($field:tt)*) => {
reqwest_otel_span!(level=$crate::reqwest_otel_span_macro::private::Level::INFO, name=$name, $request, $($field)*)
};
(level=$level:expr, name=$name:expr, $request:ident, $($field:tt)*) => {
{
let method = $request.method();
let url = $request.url();
let scheme = url.scheme();
let host = url.host_str().unwrap_or("");
let host_port = url.port_or_known_default().unwrap_or(0) as i64;
let otel_name = $name.to_string();
let header_default = &::http::HeaderValue::from_static("");
let user_agent = format!("{:?}", $request.headers().get("user-agent").unwrap_or(header_default)).replace('"', "");
match $level {
$crate::reqwest_otel_span_macro::private::Level::TRACE => {
$crate::request_span!($crate::reqwest_otel_span_macro::private::Level::TRACE, method, scheme, host, host_port, user_agent, otel_name, $($field)*)
},
$crate::reqwest_otel_span_macro::private::Level::DEBUG => {
$crate::request_span!($crate::reqwest_otel_span_macro::private::Level::DEBUG, method, scheme, host, host_port, user_agent, otel_name, $($field)*)
},
$crate::reqwest_otel_span_macro::private::Level::INFO => {
$crate::request_span!($crate::reqwest_otel_span_macro::private::Level::INFO, method, scheme, host, host_port, user_agent, otel_name, $($field)*)
},
$crate::reqwest_otel_span_macro::private::Level::WARN => {
$crate::request_span!($crate::reqwest_otel_span_macro::private::Level::WARN, method, scheme, host, host_port, user_agent, otel_name, $($field)*)
},
$crate::reqwest_otel_span_macro::private::Level::ERROR => {
$crate::request_span!($crate::reqwest_otel_span_macro::private::Level::ERROR, method, scheme, host, host_port, user_agent, otel_name, $($field)*)
},
}
}
}
}
#[doc(hidden)]
pub mod private {
#[doc(hidden)]
pub use tracing::{span, Level};
#[cfg(not(feature = "deprecated_attributes"))]
#[doc(hidden)]
#[macro_export]
macro_rules! request_span {
($level:expr, $method:expr, $scheme:expr, $host:expr, $host_port:expr, $user_agent:expr, $otel_name:expr, $($field:tt)*) => {
$crate::reqwest_otel_span_macro::private::span!(
$level,
"HTTP request",
http.request.method = %$method,
url.scheme = %$scheme,
server.address = %$host,
server.port = %$host_port,
user_agent.original = %$user_agent,
otel.kind = "client",
otel.name = %$otel_name,
otel.status_code = tracing::field::Empty,
http.response.status_code = tracing::field::Empty,
error.message = tracing::field::Empty,
error.cause_chain = tracing::field::Empty,
$($field)*
)
}
}
#[cfg(feature = "deprecated_attributes")]
#[doc(hidden)]
#[macro_export]
macro_rules! request_span {
($level:expr, $method:expr, $scheme:expr, $host:expr, $host_port:expr, $user_agent:expr, $otel_name:expr, $($field:tt)*) => {
$crate::reqwest_otel_span_macro::private::span!(
$level,
"HTTP request",
http.request.method = %$method,
url.scheme = %$scheme,
server.address = %$host,
server.port = %$host_port,
user_agent.original = %$user_agent,
otel.kind = "client",
otel.name = %$otel_name,
otel.status_code = tracing::field::Empty,
http.response.status_code = tracing::field::Empty,
error.message = tracing::field::Empty,
error.cause_chain = tracing::field::Empty,
http.method = %$method,
http.scheme = %$scheme,
http.host = %$host,
net.host.port = %$host_port,
http.user_agent = tracing::field::Empty,
http.status_code = tracing::field::Empty,
$($field)*
)
}
}
}