From 05b2473b52715bc06490683a79d4b2cdaca2e459 Mon Sep 17 00:00:00 2001 From: D1plo1d Date: Sun, 30 Aug 2020 16:32:14 -0400 Subject: [PATCH 1/3] Added Default to tracing extension --- src/extensions/tracing.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extensions/tracing.rs b/src/extensions/tracing.rs index 9bf59059..7b9bf366 100644 --- a/src/extensions/tracing.rs +++ b/src/extensions/tracing.rs @@ -8,6 +8,7 @@ use tracing::{span, Id, Level}; /// # References /// /// https://crates.io/crates/tracing +#[derive(Default)] pub struct Tracing { root_id: Option, fields: BTreeMap, From 895dbfae7c2c6d0dda5009e24a18502d3c4dfcd8 Mon Sep 17 00:00:00 2001 From: D1plo1d Date: Sun, 30 Aug 2020 21:01:53 -0400 Subject: [PATCH 2/3] Refactored tracing extension to allow better span and event filtering and improve signal to noise --- src/extensions/tracing.rs | 51 +++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/src/extensions/tracing.rs b/src/extensions/tracing.rs index 7b9bf366..74e06748 100644 --- a/src/extensions/tracing.rs +++ b/src/extensions/tracing.rs @@ -1,7 +1,8 @@ use crate::extensions::{Extension, ResolveInfo}; -use crate::{QueryPathSegment, Variables}; +use crate::{Variables}; use std::collections::BTreeMap; -use tracing::{span, Id, Level}; +use tracing::{span, event, Id, Level}; +use uuid::Uuid; /// Tracing extension /// @@ -15,12 +16,26 @@ pub struct Tracing { } impl Extension for Tracing { - fn parse_start(&mut self, query_source: &str, _variables: &Variables) { - let root_span = span!(target: "async-graphql", parent:None, Level::INFO, "query", source = query_source); + fn parse_start(&mut self, query_source: &str, variables: &Variables) { + let root_span: tracing::Span = span!( + target: "async_graphql", + parent:None, + Level::INFO, + "graphql", + id = %Uuid::new_v4().to_string(), + ); + if let Some(id) = root_span.id() { tracing::dispatcher::get_default(|d| d.enter(&id)); self.root_id.replace(id); } + + event!( + target: "async_graphql::query", + Level::DEBUG, + %variables, + query = %query_source + ); } fn execution_end(&mut self) { @@ -34,27 +49,15 @@ impl Extension for Tracing { .resolve_id .parent .and_then(|id| self.fields.get(&id)) + .or_else(|| self.root_id.as_ref()) .cloned(); - let span = match &info.path_node.segment { - QueryPathSegment::Index(idx) => span!( - target: "async-graphql", - parent: parent_span, - Level::INFO, - "field", - index = *idx, - parent_type = info.parent_type, - return_type = info.return_type - ), - QueryPathSegment::Name(name) => span!( - target: "async-graphql", - parent: parent_span, - Level::INFO, - "field", - name = name, - parent_type = info.parent_type, - return_type = info.return_type - ), - }; + let span = span!( + target: "async_graphql::field", + parent: parent_span, + Level::INFO, + "field", + path = %info.path_node, + ); if let Some(id) = span.id() { tracing::dispatcher::get_default(|d| d.enter(&id)); self.fields.insert(info.resolve_id.current, id); From 895b075c77629bd0fc1518a0badcaf47109f14e9 Mon Sep 17 00:00:00 2001 From: D1plo1d Date: Sun, 30 Aug 2020 21:11:43 -0400 Subject: [PATCH 3/3] Added async_graphql::graphql tracing namespace --- src/extensions/tracing.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/tracing.rs b/src/extensions/tracing.rs index 74e06748..fbf61be3 100644 --- a/src/extensions/tracing.rs +++ b/src/extensions/tracing.rs @@ -18,7 +18,7 @@ pub struct Tracing { impl Extension for Tracing { fn parse_start(&mut self, query_source: &str, variables: &Variables) { let root_span: tracing::Span = span!( - target: "async_graphql", + target: "async_graphql::graphql", parent:None, Level::INFO, "graphql",