Remove fancy follows-from code
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
54f03facf6
commit
e571e59abb
|
@ -1,7 +1,7 @@
|
|||
[package]
|
||||
name = "tracing-awc"
|
||||
description = "Tracing instrumentation for the awc http client"
|
||||
version = "0.1.0-beta.12"
|
||||
version = "0.1.0-beta.13"
|
||||
authors = ["asonix <asonix@asonix.dog"]
|
||||
edition = "2018"
|
||||
license = "AGPL-3.0"
|
||||
|
|
51
src/lib.rs
51
src/lib.rs
|
@ -11,7 +11,7 @@ use std::{
|
|||
pin::Pin,
|
||||
task::{Context, Poll},
|
||||
};
|
||||
use tracing::{instrument::Instrumented, Id, Instrument, Span};
|
||||
use tracing::{instrument::Instrumented, Instrument, Span};
|
||||
|
||||
#[cfg(feature = "opentelemetry_0_13")]
|
||||
use opentelemetry_0_13_pkg as opentelemetry;
|
||||
|
@ -138,39 +138,6 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
enum IdOrSpan {
|
||||
Id(Option<Id>),
|
||||
Span(Span),
|
||||
}
|
||||
|
||||
impl IdOrSpan {
|
||||
fn from_id(id: Option<Id>) -> Self {
|
||||
IdOrSpan::Id(id)
|
||||
}
|
||||
|
||||
fn take(&mut self) -> Self {
|
||||
std::mem::replace(self, IdOrSpan::Id(None))
|
||||
}
|
||||
|
||||
fn span(&self) -> Option<&Span> {
|
||||
match self {
|
||||
IdOrSpan::Span(ref span) => Some(span),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn as_span(&mut self, f: impl Fn(Option<Id>) -> Span) -> &Span {
|
||||
let span = match self.take() {
|
||||
Self::Id(id) => f(id),
|
||||
Self::Span(span) => span,
|
||||
};
|
||||
|
||||
*self = Self::Span(span);
|
||||
|
||||
self.span().expect("Span should always exist")
|
||||
}
|
||||
}
|
||||
|
||||
pin_project_lite::pin_project! {
|
||||
pub struct TracingFuture<F> {
|
||||
span: Span,
|
||||
|
@ -204,8 +171,10 @@ where
|
|||
}
|
||||
|
||||
ConnectResponse::Client(client_response.map_body(|_, payload| {
|
||||
let instrumented =
|
||||
InstrumentedBody::new(IdOrSpan::from_id(span.id()), payload);
|
||||
let body_span =
|
||||
tracing::info_span!(parent: None, "HTTP Client Response Body");
|
||||
body_span.follows_from(span.id());
|
||||
let instrumented = InstrumentedBody::new(body_span, payload);
|
||||
let pinned: Pin<Box<dyn Stream<Item = Result<Bytes, PayloadError>>>> =
|
||||
Box::pin(instrumented);
|
||||
|
||||
|
@ -243,7 +212,7 @@ where
|
|||
|
||||
pin_project_lite::pin_project! {
|
||||
struct InstrumentedBody<S> {
|
||||
span: IdOrSpan,
|
||||
span: Span,
|
||||
|
||||
#[pin]
|
||||
body: S,
|
||||
|
@ -254,7 +223,7 @@ impl<S> InstrumentedBody<S>
|
|||
where
|
||||
S: Stream<Item = Result<Bytes, PayloadError>>,
|
||||
{
|
||||
fn new(span: IdOrSpan, body: S) -> InstrumentedBody<S> {
|
||||
fn new(span: Span, body: S) -> InstrumentedBody<S> {
|
||||
InstrumentedBody { span, body }
|
||||
}
|
||||
}
|
||||
|
@ -268,11 +237,7 @@ where
|
|||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
|
||||
let this = self.as_mut().project();
|
||||
|
||||
let span = this.span.as_span(|id| {
|
||||
let span = tracing::info_span!("HTTP Client Response Body");
|
||||
span.follows_from(id);
|
||||
span
|
||||
});
|
||||
let span = this.span;
|
||||
let body = this.body;
|
||||
|
||||
span.in_scope(|| body.poll_next(cx))
|
||||
|
|
Loading…
Reference in a new issue