pub struct OtelPathNames(/* private fields */);
Expand description
OtelPathNames
allows including templated paths in the spans created by
DefaultSpanBackend
and SpanBackendWithUrl
.
When creating spans this can be used to try to match the path against some known paths. If the path matches value returned is the templated path. This can be used in span names as it will not contain values that would increase the cardinality.
/// # use reqwest_middleware::Result;
use reqwest_middleware::{ClientBuilder, Extension};
use reqwest_tracing::{
TracingMiddleware, OtelPathNames
};
let reqwest_client = reqwest::Client::builder().build()?;
let client = ClientBuilder::new(reqwest_client)
// Inserts the extension before the request is started
.with_init(Extension(OtelPathNames::known_paths(["/payment/{paymentId}"])?))
// Makes use of that extension to specify the otel name
.with(TracingMiddleware::default())
.build();
let resp = client.get("https://truelayer.com/payment/id-123").send().await?;
// Or specify it on the individual request (will take priority)
let resp = client.post("https://api.truelayer.com/payment/id-123/authorization-flow")
.with_extension(OtelPathNames::known_paths(["/payment/{paymentId}/authorization-flow"])?)
.send()
.await?;
Implementations§
Source§impl OtelPathNames
impl OtelPathNames
Sourcepub fn known_paths<Paths, Path>(paths: Paths) -> Result<Self>
pub fn known_paths<Paths, Path>(paths: Paths) -> Result<Self>
Create a new OtelPathNames
from a set of known paths.
Paths in this set will be found with find
.
Paths can have different parameters:
- Named parameters like
:paymentId
match anything until the next/
or the end of the path. - Catch-all parameters start with
*
and match everything after the/
. They must be at the end of the route.
OtelPathNames::known_paths([
"/",
"/payment",
"/payment/{paymentId}",
"/payment/{paymentId}/*action",
]).unwrap();
Sourcepub fn find(&self, path: &str) -> Option<&str>
pub fn find(&self, path: &str) -> Option<&str>
Find the templated path from the actual path.
Returns the templated path if a match is found.
let path_names = OtelPathNames::known_paths(["/payment/{paymentId}"]).unwrap();
let path = path_names.find("/payment/payment-id-123");
assert_eq!(path, Some("/payment/{paymentId}"));
Trait Implementations§
Source§impl Clone for OtelPathNames
impl Clone for OtelPathNames
Source§fn clone(&self) -> OtelPathNames
fn clone(&self) -> OtelPathNames
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl !Freeze for OtelPathNames
impl !RefUnwindSafe for OtelPathNames
impl Send for OtelPathNames
impl Sync for OtelPathNames
impl Unpin for OtelPathNames
impl UnwindSafe for OtelPathNames
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more