From 9e48cc1fcf47851749f7d7e83e2668654430eae9 Mon Sep 17 00:00:00 2001 From: Eliza Weisman Date: Wed, 5 May 2021 12:52:11 -0700 Subject: [PATCH 1/2] record spans regardless if they're spawned, send only if they're spawned --- README.md | 2 +- console-subscriber/src/lib.rs | 66 ++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index ca18c4038..8e0db2794 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ toolkit consists of multiple components: ## extremely cool and amazing demo -[![asciicast](https://asciinema.org/a/411748.svg)](https://asciinema.org/a/411748) +[![asciicast](https://asciinema.org/a/412139.svg)](https://asciinema.org/a/412139) wow! whoa! it's like `top(1)` for tasks! diff --git a/console-subscriber/src/lib.rs b/console-subscriber/src/lib.rs index 80e0f34d0..af503cb3a 100644 --- a/console-subscriber/src/lib.rs +++ b/console-subscriber/src/lib.rs @@ -128,6 +128,7 @@ impl TasksLayer { pub const DEFAULT_EVENT_BUFFER_CAPACITY: usize = 1024 * 10; pub const DEFAULT_CLIENT_BUFFER_CAPACITY: usize = 1024 * 4; pub const DEFAULT_FLUSH_INTERVAL: Duration = Duration::from_secs(1); + #[inline(always)] fn is_spawn(&self, meta: &'static Metadata<'static>) -> bool { ptr::eq(self.task_meta.load(Relaxed), meta as *const _ as *mut _) @@ -163,48 +164,49 @@ where F: for<'writer> FormatFields<'writer> + 'static, { fn register_callsite(&self, meta: &'static Metadata<'static>) -> subscriber::Interest { - if meta.target() == "tokio::task" && meta.name() == "task" { - if meta.fields().iter().any(|f| f.name() == "function") { - let _ = self.blocking_meta.compare_exchange( - ptr::null_mut(), - meta as *const _ as *mut _, - AcqRel, - Acquire, - ); - } else { - let _ = self.task_meta.compare_exchange( - ptr::null_mut(), - meta as *const _ as *mut _, - AcqRel, - Acquire, - ); - } + if meta.fields().iter().any(|f| f.name() == "function") { + let _ = self.blocking_meta.compare_exchange( + ptr::null_mut(), + meta as *const _ as *mut _, + AcqRel, + Acquire, + ); + } else { + let _ = self.task_meta.compare_exchange( + ptr::null_mut(), + meta as *const _ as *mut _, + AcqRel, + Acquire, + ); } - self.try_send(Event::Metadata(meta)); + if meta.target() == "tokio::task" && meta.name() == "task" { + self.try_send(Event::Metadata(meta)); + } subscriber::Interest::always() } fn new_span(&self, attrs: &span::Attributes<'_>, id: &span::Id, cx: Context<'_, S>) { let metadata = attrs.metadata(); - if self.is_spawn(metadata) { - let at = SystemTime::now(); - let span = cx.span(id).expect("newly-created span should exist"); - let mut exts = span.extensions_mut(); - let fields = match exts.get_mut::>() { - Some(fields) => fields.fields.clone(), - None => { - let mut fields = String::new(); - match self.format.format_fields(&mut fields, attrs) { - Ok(()) => exts.insert(FormattedFields::::new(fields.clone())), - Err(_) => { - tracing::warn!(span.id = ?id, span.attrs = ?attrs, "error formatting fields for span") - } + let at = SystemTime::now(); + let span = cx.span(id).expect("newly-created span should exist"); + let mut exts = span.extensions_mut(); + let fields = match exts.get_mut::>() { + Some(fields) => fields.fields.clone(), + None => { + let mut fields = String::new(); + match self.format.format_fields(&mut fields, attrs) { + Ok(()) => exts.insert(FormattedFields::::new(fields.clone())), + Err(_) => { + tracing::warn!(span.id = ?id, span.attrs = ?attrs, "error formatting fields for span") } - fields } - }; + fields + } + }; + + if self.is_spawn(metadata) { self.try_send(Event::Spawn { id: id.clone(), at, From 39875f090e791dab352146cdfa9198a283e38235 Mon Sep 17 00:00:00 2001 From: David Barsky Date: Wed, 5 May 2021 19:07:36 -0400 Subject: [PATCH 2/2] remove .envrc --- .envrc | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .envrc diff --git a/.envrc b/.envrc deleted file mode 100644 index 2493a157f..000000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use nix; \ No newline at end of file