Skip to content

Commit 3adaba5

Browse files
authored
Merge pull request #4776 from TonyCTHsu/tonycthsu/datadog-tracing-span-type-change
Remove `span_type` method call on SpanOperation
2 parents 6ac6dc2 + 15f0ddb commit 3adaba5

File tree

4 files changed

+29
-84
lines changed

4 files changed

+29
-84
lines changed

guides/queries/tracing.md

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,10 @@ To add [Datadog](https://www.datadoghq.com) instrumentation:
150150

151151
```ruby
152152
class MySchema < GraphQL::Schema
153-
trace_with GraphQL::Tracing::DataDogTrace, options
153+
trace_with GraphQL::Tracing::DataDogTrace
154154
end
155155
```
156156

157-
You may provide `options` as a `Hash` with the following values:
158-
159-
| Key | Description | Default |
160-
| --- | ----------- | ------- |
161-
| `service` | Service name used for `graphql` instrumentation | `'ruby-graphql'` |
162-
| `tracer` | `Datadog::Tracer` used to perform instrumentation. Usually you don't need to set this. | `Datadog.tracer` |
163-
164157
For more details about Datadog's tracing API, check out the [Ruby documentation](https://github.com/DataDog/dd-trace-rb/blob/master/docs/GettingStarted.md) or the [APM documentation](https://docs.datadoghq.com/tracing/) for more product information.
165158

166159
## Prometheus

lib/graphql/tracing/data_dog_trace.rb

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,18 @@
33
module GraphQL
44
module Tracing
55
module DataDogTrace
6+
# @param tracer [#trace] Deprecated
67
# @param analytics_enabled [Boolean] Deprecated
78
# @param analytics_sample_rate [Float] Deprecated
8-
def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service: "ruby-graphql", **rest)
9+
def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0, service: nil, **rest)
910
if tracer.nil?
1011
tracer = defined?(Datadog::Tracing) ? Datadog::Tracing : Datadog.tracer
1112
end
1213
@tracer = tracer
1314

14-
analytics_available = defined?(Datadog::Contrib::Analytics) \
15-
&& Datadog::Contrib::Analytics.respond_to?(:enabled?) \
16-
&& Datadog::Contrib::Analytics.respond_to?(:set_sample_rate)
17-
18-
@analytics_enabled = analytics_available && Datadog::Contrib::Analytics.enabled?(analytics_enabled)
15+
@analytics_enabled = analytics_enabled
1916
@analytics_sample_rate = analytics_sample_rate
17+
2018
@service_name = service
2119
@has_prepare_span = respond_to?(:prepare_span)
2220
super
@@ -34,12 +32,9 @@ def initialize(tracer: nil, analytics_enabled: false, analytics_sample_rate: 1.0
3432
}.each do |trace_method, trace_key|
3533
module_eval <<-RUBY, __FILE__, __LINE__
3634
def #{trace_method}(**data)
37-
@tracer.trace("#{trace_key}", service: @service_name) do |span|
38-
span.span_type = 'custom'
39-
if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
40-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
41-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, '#{trace_method}')
42-
end
35+
@tracer.trace("#{trace_key}", service: @service_name, type: 'custom') do |span|
36+
span.set_tag('component', 'graphql')
37+
span.set_tag('operation', '#{trace_method}')
4338
4439
#{
4540
if trace_method == 'execute_multiplex'
@@ -54,10 +49,8 @@ def #{trace_method}(**data)
5449
end
5550
span.resource = resource if resource
5651
57-
# For top span of query, set the analytics sample rate tag, if available.
58-
if @analytics_enabled
59-
Datadog::Contrib::Analytics.set_sample_rate(span, @analytics_sample_rate)
60-
end
52+
# [Deprecated] will be removed in the future
53+
span.set_metric('_dd1.sr.eausr', @analytics_sample_rate) if @analytics_enabled
6154
RUBY
6255
elsif trace_method == 'execute_query'
6356
<<-RUBY
@@ -89,12 +82,10 @@ def execute_field_span(span_key, query, field, ast_node, arguments, object)
8982
nil
9083
end
9184
if platform_key && trace_field
92-
@tracer.trace(platform_key, service: @service_name) do |span|
93-
span.span_type = 'custom'
94-
if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
95-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
96-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
97-
end
85+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
86+
span.set_tag('component', 'graphql')
87+
span.set_tag('operation', span_key)
88+
9889
if @has_prepare_span
9990
prepare_span_data = { query: query, field: field, ast_node: ast_node, arguments: arguments, object: object }
10091
prepare_span(span_key, prepare_span_data, span)
@@ -125,12 +116,10 @@ def authorized(query:, type:, object:)
125116
126117
def authorized_span(span_key, object, type, query)
127118
platform_key = @platform_key_cache[DataDogTrace].platform_authorized_key_cache[type]
128-
@tracer.trace(platform_key, service: @service_name) do |span|
129-
span.span_type = 'custom'
130-
if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
131-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
132-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
133-
end
119+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
120+
span.set_tag('component', 'graphql')
121+
span.set_tag('operation', span_key)
122+
134123
if @has_prepare_span
135124
prepare_span(span_key, {object: object, type: type, query: query}, span)
136125
end
@@ -158,12 +147,10 @@ def resolve_type_lazy(object:, type:, query:)
158147
159148
def resolve_type_span(span_key, object, type, query)
160149
platform_key = @platform_key_cache[DataDogTrace].platform_resolve_type_key_cache[type]
161-
@tracer.trace(platform_key, service: @service_name) do |span|
162-
span.span_type = 'custom'
163-
if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
164-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
165-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, span_key)
166-
end
150+
@tracer.trace(platform_key, service: @service_name, type: 'custom') do |span|
151+
span.set_tag('component', 'graphql')
152+
span.set_tag('operation', span_key)
153+
167154
if @has_prepare_span
168155
prepare_span(span_key, {object: object, type: type, query: query}, span)
169156
end

lib/graphql/tracing/data_dog_tracing.rb

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,9 @@ class DataDogTracing < PlatformTracing
1515
}
1616

1717
def platform_trace(platform_key, key, data)
18-
tracer.trace(platform_key, service: service_name) do |span|
19-
span.span_type = 'custom'
20-
if defined?(Datadog::Tracing::Metadata::Ext) # Introduced in ddtrace 1.0
21-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT, 'graphql')
22-
span.set_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION, key)
23-
end
18+
tracer.trace(platform_key, service: options[:service], type: 'custom') do |span|
19+
span.set_tag('component', 'graphql')
20+
span.set_tag('operation', key)
2421

2522
if key == 'execute_multiplex'
2623
operations = data[:multiplex].queries.map(&:selected_operation_name).join(', ')
@@ -33,10 +30,8 @@ def platform_trace(platform_key, key, data)
3330
end
3431
span.resource = resource if resource
3532

36-
# For top span of query, set the analytics sample rate tag, if available.
37-
if analytics_enabled?
38-
Datadog::Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
39-
end
33+
# [Deprecated] will be removed in the future
34+
span.set_metric('_dd1.sr.eausr', analytics_sample_rate) if analytics_enabled?
4035
end
4136

4237
if key == 'execute_query'
@@ -51,10 +46,6 @@ def platform_trace(platform_key, key, data)
5146
end
5247
end
5348

54-
def service_name
55-
options.fetch(:service, 'ruby-graphql')
56-
end
57-
5849
# Implement this method in a subclass to apply custom tags to datadog spans
5950
# @param key [String] The event being traced
6051
# @param data [Hash] The runtime data for this event (@see GraphQL::Tracing for keys for each event)
@@ -65,18 +56,13 @@ def prepare_span(key, data, span)
6556
def tracer
6657
default_tracer = defined?(Datadog::Tracing) ? Datadog::Tracing : Datadog.tracer
6758

59+
# [Deprecated] options[:tracer] will be removed in the future
6860
options.fetch(:tracer, default_tracer)
6961
end
7062

71-
def analytics_available?
72-
defined?(Datadog::Contrib::Analytics) \
73-
&& Datadog::Contrib::Analytics.respond_to?(:enabled?) \
74-
&& Datadog::Contrib::Analytics.respond_to?(:set_sample_rate)
75-
end
76-
7763
def analytics_enabled?
7864
# [Deprecated] options[:analytics_enabled] will be removed in the future
79-
analytics_available? && Datadog::Contrib::Analytics.enabled?(options.fetch(:analytics_enabled, false))
65+
options.fetch(:analytics_enabled, false)
8066
end
8167

8268
def analytics_sample_rate

spec/support/datadog.rb

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,6 @@ def self.clear_all
1717
SPAN_TAGS.clear
1818
end
1919

20-
21-
module Contrib
22-
module Analytics
23-
def self.set_sample_rate(rate)
24-
rate
25-
end
26-
27-
def self.enabled?(_bool)
28-
nil
29-
end
30-
end
31-
end
32-
3320
class DummyTracer
3421
def trace(platform_key, *args)
3522
yield DummySpan.new
@@ -41,7 +28,6 @@ def resource=(resource_name)
4128
SPAN_RESOURCE_NAMES << resource_name
4229
end
4330

44-
def span_type=(*args)end
4531
def set_tag(key, value)
4632
SPAN_TAGS << [key, value]
4733
end
@@ -51,12 +37,5 @@ module Tracing
5137
def self.trace(platform_key, *args)
5238
yield DummySpan.new
5339
end
54-
55-
module Metadata
56-
module Ext
57-
TAG_COMPONENT = 'component'
58-
TAG_OPERATION = 'operation'
59-
end
60-
end
6140
end
6241
end

0 commit comments

Comments
 (0)