ddtrace 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -3
  3. data/Appraisals +1 -0
  4. data/ddtrace.gemspec +3 -0
  5. data/docs/GettingStarted.md +31 -8
  6. data/gemfiles/rails32_postgres_redis.gemfile +1 -0
  7. data/lib/ddtrace.rb +20 -34
  8. data/lib/ddtrace/buffer.rb +1 -7
  9. data/lib/ddtrace/configurable.rb +77 -0
  10. data/lib/ddtrace/configuration.rb +35 -0
  11. data/lib/ddtrace/configuration/proxy.rb +29 -0
  12. data/lib/ddtrace/configuration/resolver.rb +24 -0
  13. data/lib/ddtrace/context.rb +55 -7
  14. data/lib/ddtrace/contrib/active_record/patcher.rb +4 -1
  15. data/lib/ddtrace/contrib/aws/patcher.rb +3 -0
  16. data/lib/ddtrace/contrib/base.rb +14 -0
  17. data/lib/ddtrace/contrib/dalli/patcher.rb +3 -0
  18. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +3 -0
  19. data/lib/ddtrace/contrib/faraday/middleware.rb +5 -6
  20. data/lib/ddtrace/contrib/faraday/patcher.rb +3 -0
  21. data/lib/ddtrace/contrib/grape/patcher.rb +3 -0
  22. data/lib/ddtrace/contrib/http/patcher.rb +22 -7
  23. data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -0
  24. data/lib/ddtrace/contrib/rack/middlewares.rb +21 -35
  25. data/lib/ddtrace/contrib/rails/action_controller.rb +2 -2
  26. data/lib/ddtrace/contrib/rails/action_view.rb +2 -2
  27. data/lib/ddtrace/contrib/rails/active_record.rb +2 -2
  28. data/lib/ddtrace/contrib/rails/active_support.rb +2 -2
  29. data/lib/ddtrace/contrib/rails/framework.rb +36 -58
  30. data/lib/ddtrace/contrib/rails/middlewares.rb +1 -1
  31. data/lib/ddtrace/contrib/rails/patcher.rb +56 -0
  32. data/lib/ddtrace/contrib/rails/railtie.rb +18 -0
  33. data/lib/ddtrace/contrib/rails/utils.rb +1 -1
  34. data/lib/ddtrace/contrib/redis/patcher.rb +4 -0
  35. data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
  36. data/lib/ddtrace/contrib/redis/tags.rb +1 -0
  37. data/lib/ddtrace/contrib/resque/patcher.rb +9 -0
  38. data/lib/ddtrace/contrib/resque/resque_job.rb +6 -6
  39. data/lib/ddtrace/contrib/sidekiq/tracer.rb +11 -11
  40. data/lib/ddtrace/contrib/sinatra/tracer.rb +23 -63
  41. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +3 -0
  42. data/lib/ddtrace/ext/distributed.rb +2 -0
  43. data/lib/ddtrace/ext/redis.rb +6 -0
  44. data/lib/ddtrace/monkey.rb +20 -37
  45. data/lib/ddtrace/propagation/distributed_headers.rb +48 -0
  46. data/lib/ddtrace/propagation/http_propagator.rb +28 -0
  47. data/lib/ddtrace/registry.rb +42 -0
  48. data/lib/ddtrace/registry/registerable.rb +20 -0
  49. data/lib/ddtrace/sampler.rb +61 -1
  50. data/lib/ddtrace/sync_writer.rb +36 -0
  51. data/lib/ddtrace/tracer.rb +23 -21
  52. data/lib/ddtrace/transport.rb +52 -15
  53. data/lib/ddtrace/version.rb +2 -2
  54. data/lib/ddtrace/workers.rb +33 -31
  55. data/lib/ddtrace/writer.rb +20 -1
  56. metadata +42 -3
  57. data/lib/ddtrace/distributed.rb +0 -38
@@ -4,6 +4,9 @@ module Datadog
4
4
  # Patcher enables patching of 'active_record' module.
5
5
  # This is used in monkey.rb to manually apply patches
6
6
  module Patcher
7
+ include Base
8
+ register_as :active_record, auto_patch: false
9
+
7
10
  @patched = false
8
11
 
9
12
  module_function
@@ -41,7 +44,7 @@ module Datadog
41
44
  def self.datadog_trace
42
45
  # TODO: Consider using patcher for Rails as well.
43
46
  # @tracer ||= defined?(::Rails) && ::Rails.configuration.datadog_trace
44
- @datadog_trace ||= defined?(::Sinatra) && ::Sinatra::Application.settings.datadog_tracer.cfg
47
+ @datadog_trace ||= defined?(::Sinatra) && Datadog.configuration[:sinatra].to_h
45
48
  end
46
49
 
47
50
  def self.adapter_name
@@ -7,6 +7,9 @@ module Datadog
7
7
 
8
8
  # Responsible for hooking the instrumentation into aws-sdk
9
9
  module Patcher
10
+ include Base
11
+ register_as :aws, auto_patch: true
12
+
10
13
  @patched = false
11
14
 
12
15
  class << self
@@ -0,0 +1,14 @@
1
+ require 'ddtrace/registry'
2
+ require 'ddtrace/configurable'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ # Base provides features that are shared across all integrations
7
+ module Base
8
+ def self.included(base)
9
+ base.send(:include, Registry::Registerable)
10
+ base.send(:include, Configurable)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -8,6 +8,9 @@ module Datadog
8
8
 
9
9
  # Responsible for hooking the instrumentation into `dalli`
10
10
  module Patcher
11
+ include Base
12
+ register_as :dalli, auto_patch: true
13
+
11
14
  @patched = false
12
15
 
13
16
  class << self
@@ -14,6 +14,9 @@ module Datadog
14
14
  # Patcher enables patching of 'elasticsearch/transport' module.
15
15
  # This is used in monkey.rb to automatically apply patches
16
16
  module Patcher
17
+ include Base
18
+ register_as :elasticsearch, auto_patch: true
19
+
17
20
  @patched = false
18
21
 
19
22
  module_function
@@ -1,13 +1,15 @@
1
1
  require 'faraday'
2
2
  require 'ddtrace/ext/http'
3
3
  require 'ddtrace/ext/net'
4
- require 'ddtrace/ext/distributed'
4
+ require 'ddtrace/propagation/http_propagator'
5
5
 
6
6
  module Datadog
7
7
  module Contrib
8
8
  module Faraday
9
9
  # Middleware implements a faraday-middleware for ddtrace instrumentation
10
10
  class Middleware < ::Faraday::Middleware
11
+ include Ext::DistributedTracing
12
+
11
13
  DEFAULT_ERROR_HANDLER = lambda do |env|
12
14
  Ext::HTTP::ERROR_RANGE.cover?(env[:status])
13
15
  end
@@ -26,7 +28,7 @@ module Datadog
26
28
  def call(env)
27
29
  dd_pin.tracer.trace(SERVICE) do |span|
28
30
  annotate!(span, env)
29
- propagate!(span, env) if options[:distributed_tracing]
31
+ propagate!(span, env) if options[:distributed_tracing] && dd_pin.tracer.enabled
30
32
  app.call(env).on_complete { |resp| handle_response(span, resp) }
31
33
  end
32
34
  end
@@ -54,10 +56,7 @@ module Datadog
54
56
  end
55
57
 
56
58
  def propagate!(span, env)
57
- env[:request_headers].merge!(
58
- Ext::DistributedTracing::HTTP_HEADER_TRACE_ID => span.trace_id.to_s,
59
- Ext::DistributedTracing::HTTP_HEADER_PARENT_ID => span.span_id.to_s
60
- )
59
+ Datadog::HTTPPropagator.inject!(span.context, env[:request_headers])
61
60
  end
62
61
 
63
62
  def dd_pin
@@ -6,6 +6,9 @@ module Datadog
6
6
 
7
7
  # Responsible for hooking the instrumentation into faraday
8
8
  module Patcher
9
+ include Base
10
+ register_as :faraday, auto_patch: true
11
+
9
12
  @patched = false
10
13
 
11
14
  class << self
@@ -6,6 +6,9 @@ module Datadog
6
6
  # Patcher that introduces more instrumentation for Grape endpoints, so that
7
7
  # new signals are executed at the beginning of each step (filters, render and run)
8
8
  module Patcher
9
+ include Base
10
+ register_as :grape, auto_patch: true
11
+
9
12
  @patched = false
10
13
 
11
14
  module_function
@@ -12,13 +12,17 @@ module Datadog
12
12
  APP = 'net/http'.freeze
13
13
  SERVICE = 'net/http'.freeze
14
14
 
15
- @distributed_tracing_enabled = false
15
+ module_function
16
16
 
17
- class << self
18
- attr_accessor :distributed_tracing_enabled
17
+ # TODO: Remove this once we drop support for legacy configuration
18
+ def distributed_tracing_enabled
19
+ Datadog.configuration[:http][:distributed_tracing_enabled]
19
20
  end
20
21
 
21
- module_function
22
+ # TODO: Remove this once we drop support for legacy configuration
23
+ def distributed_tracing_enabled=(value)
24
+ Datadog.configuration[:http][:distributed_tracing_enabled] = value
25
+ end
22
26
 
23
27
  def should_skip_tracing?(req, address, port, transport, pin)
24
28
  # we don't want to trace our own call to the API (they use net/http)
@@ -42,15 +46,20 @@ module Datadog
42
46
  end
43
47
 
44
48
  def should_skip_distributed_tracing?(pin)
49
+ global_value = Datadog.configuration[:http][:distributed_tracing_enabled]
45
50
  unless pin.config.nil?
46
- return !pin.config.fetch(:distributed_tracing_enabled, @distributed_tracing_enabled)
51
+ return !pin.config.fetch(:distributed_tracing_enabled, global_value)
47
52
  end
48
- !@distributed_tracing_enabled
53
+ !global_value
49
54
  end
50
55
 
51
56
  # Patcher enables patching of 'net/http' module.
52
57
  # This is used in monkey.rb to automatically apply patches
53
58
  module Patcher
59
+ include Base
60
+ register_as :http, auto_patch: true
61
+ option :distributed_tracing_enabled, default: false
62
+
54
63
  @patched = false
55
64
 
56
65
  module_function
@@ -120,9 +129,15 @@ module Datadog
120
129
  span.set_tag(Datadog::Ext::HTTP::URL, req.path)
121
130
  span.set_tag(Datadog::Ext::HTTP::METHOD, req.method)
122
131
 
123
- unless Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
132
+ if pin.tracer.enabled && !Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
124
133
  req.add_field(Datadog::Ext::DistributedTracing::HTTP_HEADER_TRACE_ID, span.trace_id)
125
134
  req.add_field(Datadog::Ext::DistributedTracing::HTTP_HEADER_PARENT_ID, span.span_id)
135
+ if span.context.sampling_priority
136
+ req.add_field(
137
+ Datadog::Ext::DistributedTracing::HTTP_HEADER_SAMPLING_PRIORITY,
138
+ span.context.sampling_priority
139
+ )
140
+ end
126
141
  end
127
142
  rescue StandardError => e
128
143
  Datadog::Tracer.log.error("error preparing span for http request: #{e}")
@@ -11,6 +11,9 @@ module Datadog
11
11
  # Use the `Datadog::Monkey.patch_module(:mongodb)` to activate tracing for
12
12
  # this module.
13
13
  module Patcher
14
+ include Base
15
+ register_as :mongo, auto_patch: true
16
+
14
17
  @patched = false
15
18
 
16
19
  module_function
@@ -1,41 +1,32 @@
1
1
  require 'ddtrace/ext/app_types'
2
2
  require 'ddtrace/ext/http'
3
- require 'ddtrace/distributed'
3
+ require 'ddtrace/propagation/http_propagator'
4
4
 
5
5
  module Datadog
6
6
  module Contrib
7
7
  # Rack module includes middlewares that are required to trace any framework
8
8
  # and application built on top of Rack.
9
9
  module Rack
10
- # RACK headers to test when doing distributed tracing.
11
- # They are slightly different from real headers as Rack uppercases everything
12
-
13
- # Header used to transmit the trace ID.
14
- HTTP_HEADER_TRACE_ID = 'HTTP_X_DATADOG_TRACE_ID'.freeze
15
-
16
- # Header used to transmit the parent ID.
17
- HTTP_HEADER_PARENT_ID = 'HTTP_X_DATADOG_PARENT_ID'.freeze
18
-
19
10
  # TraceMiddleware ensures that the Rack Request is properly traced
20
11
  # from the beginning to the end. The middleware adds the request span
21
12
  # in the Rack environment so that it can be retrieved by the underlying
22
13
  # application. If request tags are not set by the app, they will be set using
23
14
  # information available at the Rack level.
24
15
  class TraceMiddleware
25
- DEFAULT_CONFIG = {
26
- tracer: Datadog.tracer,
27
- default_service: 'rack',
28
- distributed_tracing_enabled: false
29
- }.freeze
16
+ include Base
17
+ register_as :rack
18
+
19
+ option :tracer, default: Datadog.tracer
20
+ option :default_service, default: 'rack'
21
+ option :distributed_tracing_enabled, default: false
30
22
 
31
23
  def initialize(app, options = {})
32
24
  # update options with our configuration, unless it's already available
33
25
  [:tracer, :default_service, :distributed_tracing_enabled].each do |k|
34
- options[k] ||= DEFAULT_CONFIG[k]
26
+ Datadog.configuration[:rack][k] = options[k] unless options[k].nil?
35
27
  end
36
28
 
37
29
  @app = app
38
- @options = options
39
30
  end
40
31
 
41
32
  def configure
@@ -43,9 +34,9 @@ module Datadog
43
34
  return clean_context if @tracer && @service
44
35
 
45
36
  # retrieve the current tracer and service
46
- @tracer = @options.fetch(:tracer)
47
- @service = @options.fetch(:default_service)
48
- @distributed_tracing_enabled = @options.fetch(:distributed_tracing_enabled)
37
+ @tracer = Datadog.configuration[:rack][:tracer]
38
+ @service = Datadog.configuration[:rack][:default_service]
39
+ @distributed_tracing_enabled = Datadog.configuration[:rack][:distributed_tracing_enabled]
49
40
 
50
41
  # configure the Rack service
51
42
  @tracer.set_service_info(
@@ -66,21 +57,16 @@ module Datadog
66
57
  span_type: Datadog::Ext::HTTP::TYPE
67
58
  }
68
59
 
69
- # start a new request span and attach it to the current Rack environment;
70
- # we must ensure that the span `resource` is set later
71
- request_span = @tracer.trace('rack.request', trace_options)
72
-
73
- if @distributed_tracing_enabled
74
- # Merge distributed trace ids if present
75
- #
76
- # Use integer values for tests, as it will catch both
77
- # a non-existing header or a badly formed one.
78
- trace_id, parent_id = Datadog::Distributed.parse_trace_headers(
79
- env[Datadog::Contrib::Rack::HTTP_HEADER_TRACE_ID],
80
- env[Datadog::Contrib::Rack::HTTP_HEADER_PARENT_ID]
81
- )
82
- request_span.trace_id = trace_id unless trace_id.nil?
83
- request_span.parent_id = parent_id unless parent_id.nil?
60
+ request_span = nil
61
+ begin
62
+ if @distributed_tracing_enabled
63
+ context = HTTPPropagator.extract(env)
64
+ @tracer.provider.context = context if context.trace_id
65
+ end
66
+ ensure
67
+ # start a new request span and attach it to the current Rack environment;
68
+ # we must ensure that the span `resource` is set later
69
+ request_span = @tracer.trace('rack.request', trace_options)
84
70
  end
85
71
 
86
72
  env[:datadog_rack_request_span] = request_span
@@ -13,8 +13,8 @@ module Datadog
13
13
 
14
14
  def self.start_processing(payload)
15
15
  # trace the execution
16
- tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
17
- service = ::Rails.configuration.datadog_trace.fetch(:default_controller_service)
16
+ tracer = Datadog.configuration[:rails][:tracer]
17
+ service = Datadog.configuration[:rails][:default_controller_service]
18
18
  type = Datadog::Ext::HTTP::TYPE
19
19
  span = tracer.trace('rails.action_controller', service: service, span_type: type)
20
20
 
@@ -15,7 +15,7 @@ module Datadog
15
15
  tracing_context = payload.fetch(:tracing_context)
16
16
 
17
17
  # create a new Span and add it to the tracing context
18
- tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
18
+ tracer = Datadog.configuration[:rails][:tracer]
19
19
  span = tracer.trace('rails.render_template', span_type: Datadog::Ext::HTTP::TEMPLATE)
20
20
  tracing_context[:dd_rails_template_span] = span
21
21
  rescue StandardError => e
@@ -48,7 +48,7 @@ module Datadog
48
48
  # retrieve the tracing context
49
49
  tracing_context = payload.fetch(:tracing_context)
50
50
 
51
- tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
51
+ tracer = Datadog.configuration[:rails][:tracer]
52
52
  span = tracer.trace('rails.render_partial', span_type: Datadog::Ext::HTTP::TEMPLATE)
53
53
  tracing_context[:dd_rails_partial_span] = span
54
54
  rescue StandardError => e
@@ -18,8 +18,8 @@ module Datadog
18
18
  end
19
19
 
20
20
  def self.sql(_name, start, finish, _id, payload)
21
- tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
22
- database_service = ::Rails.configuration.datadog_trace.fetch(:default_database_service)
21
+ tracer = Datadog.configuration[:rails][:tracer]
22
+ database_service = Datadog.configuration[:rails][:default_database_service]
23
23
  adapter_name = ::ActiveRecord::Base.connection_config[:adapter]
24
24
  adapter_name = Datadog::Contrib::Rails::Utils.normalize_vendor(adapter_name)
25
25
  span_type = Datadog::Ext::SQL::TYPE
@@ -12,7 +12,7 @@ module Datadog
12
12
  end
13
13
 
14
14
  def self.start_trace_cache(payload)
15
- tracer = ::Rails.configuration.datadog_trace.fetch(:tracer)
15
+ tracer = Datadog.configuration[:rails][:tracer]
16
16
  tracing_context = payload.fetch(:tracing_context)
17
17
 
18
18
  # In most of the cases Rails ``fetch()`` and ``read()`` calls are nested.
@@ -26,7 +26,7 @@ module Datadog
26
26
  payload[:action] == 'GET'
27
27
 
28
28
  # create a new ``Span`` and add it to the tracing context
29
- service = ::Rails.configuration.datadog_trace.fetch(:default_cache_service)
29
+ service = Datadog.configuration[:rails][:default_cache_service]
30
30
  type = Datadog::Ext::CACHE::TYPE
31
31
  span = tracer.trace('rails.cache', service: service, span_type: type)
32
32
  span.resource = payload.fetch(:action)
@@ -30,82 +30,60 @@ module Datadog
30
30
  # - handle configuration entries which are specific to Datadog tracing
31
31
  # - instrument parts of the framework when needed
32
32
  module Framework
33
- # default configurations for the Rails integration; by default
34
- # the Datadog.tracer is enabled, while the Rails auto instrumentation
35
- # is kept disabled.
36
- DEFAULT_CONFIG = {
37
- enabled: true,
38
- auto_instrument: false,
39
- auto_instrument_redis: false,
40
- auto_instrument_grape: false,
41
- default_service: 'rails-app',
42
- default_controller_service: 'rails-controller',
43
- default_cache_service: 'rails-cache',
44
- default_grape_service: 'grape',
45
- template_base_path: 'views/',
46
- tracer: Datadog.tracer,
47
- debug: false,
48
- trace_agent_hostname: Datadog::Writer::HOSTNAME,
49
- trace_agent_port: Datadog::Writer::PORT,
50
- env: nil,
51
- tags: {}
52
- }.freeze
53
-
54
33
  # configure Datadog settings
55
34
  # rubocop:disable Metrics/MethodLength
56
- def self.configure(config)
57
- # tracer defaults
58
- # merge default configurations with users settings
59
- user_config = config[:config].datadog_trace rescue {}
60
- datadog_config = DEFAULT_CONFIG.merge(user_config)
61
- datadog_config[:tracer].enabled = datadog_config[:enabled]
62
-
63
- # set debug logging
64
- Datadog::Tracer.debug_logging = datadog_config[:debug]
65
-
66
- # set the address of the trace agent
67
- datadog_config[:tracer].configure(
68
- hostname: datadog_config[:trace_agent_hostname],
69
- port: datadog_config[:trace_agent_port]
35
+ # rubocop:disable Metrics/AbcSize
36
+ def self.configure(rails_config)
37
+ user_config = rails_config[:config].datadog_trace rescue {}
38
+ Datadog.configuration.use(:rails, user_config)
39
+ tracer = Datadog.configuration[:rails][:tracer]
40
+
41
+ tracer.enabled = Datadog.configuration[:rails][:enabled]
42
+ tracer.class.debug_logging = Datadog.configuration[:rails][:debug]
43
+
44
+ tracer.configure(
45
+ hostname: Datadog.configuration[:rails][:trace_agent_hostname],
46
+ port: Datadog.configuration[:rails][:trace_agent_port],
47
+ priority_sampling: Datadog.configuration[:rails][:priority_sampling]
70
48
  )
71
49
 
72
- # set default tracer tags
73
- datadog_config[:tracer].set_tags(datadog_config[:tags])
74
-
75
- datadog_config[:tracer].set_tags('env' => datadog_config[:env]) if datadog_config[:env]
50
+ tracer.set_tags(Datadog.configuration[:rails][:tags])
51
+ tracer.set_tags('env' => Datadog.configuration[:rails][:env]) if Datadog.configuration[:rails][:env]
76
52
 
77
- # set default service details
78
- datadog_config[:tracer].set_service_info(
79
- datadog_config[:default_service],
53
+ tracer.set_service_info(
54
+ Datadog.configuration[:rails][:default_service],
80
55
  'rack',
81
56
  Datadog::Ext::AppTypes::WEB
82
57
  )
83
58
 
84
- datadog_config[:tracer].set_service_info(
85
- datadog_config[:default_controller_service],
59
+ tracer.set_service_info(
60
+ Datadog.configuration[:rails][:default_controller_service],
86
61
  'rails',
87
62
  Datadog::Ext::AppTypes::WEB
88
63
  )
89
-
90
- datadog_config[:tracer].set_service_info(
91
- datadog_config[:default_cache_service],
64
+ tracer.set_service_info(
65
+ Datadog.configuration[:rails][:default_cache_service],
92
66
  'rails',
93
67
  Datadog::Ext::AppTypes::CACHE
94
68
  )
95
69
 
96
70
  # By default, default service would be guessed from the script
97
71
  # being executed, but here we know better, get it from Rails config.
98
- datadog_config[:tracer].default_service = datadog_config[:default_service]
72
+ tracer.default_service = Datadog.configuration[:rails][:default_service]
73
+
74
+ Datadog.configuration[:rack][:tracer] = tracer
75
+ Datadog.configuration[:rack][:default_service] = Datadog.configuration[:rails][:default_service]
76
+ Datadog.configuration[:rack][:distributed_tracing_enabled] = \
77
+ Datadog.configuration[:rails][:distributed_tracing_enabled]
99
78
 
100
79
  if defined?(::ActiveRecord)
101
80
  begin
102
81
  # set default database service details and store it in the configuration
103
82
  conn_cfg = ::ActiveRecord::Base.connection_config()
104
83
  adapter_name = Datadog::Contrib::Rails::Utils.normalize_vendor(conn_cfg[:adapter])
105
- database_service = datadog_config.fetch(:default_database_service, adapter_name)
106
- datadog_config[:default_database_service] = database_service
107
- datadog_config[:tracer].set_service_info(
108
- database_service,
84
+ Datadog.configuration[:rails][:default_database_service] ||= adapter_name
85
+ tracer.set_service_info(
86
+ Datadog.configuration[:rails][:default_database_service],
109
87
  adapter_name,
110
88
  Datadog::Ext::AppTypes::DB
111
89
  )
@@ -115,11 +93,11 @@ module Datadog
115
93
  end
116
94
 
117
95
  # update global configurations
118
- ::Rails.configuration.datadog_trace = datadog_config
96
+ ::Rails.configuration.datadog_trace = Datadog.registry[:rails].to_h
119
97
  end
120
98
 
121
99
  def self.auto_instrument_redis
122
- return unless ::Rails.configuration.datadog_trace[:auto_instrument_redis]
100
+ return unless Datadog.configuration[:rails][:auto_instrument_redis]
123
101
  Datadog::Tracer.log.debug('Enabling auto-instrumentation for Redis client')
124
102
 
125
103
  # patch the Redis library and reload the CacheStore if it was using Redis
@@ -142,7 +120,7 @@ module Datadog
142
120
  end
143
121
 
144
122
  def self.auto_instrument_grape
145
- return unless ::Rails.configuration.datadog_trace[:auto_instrument_grape]
123
+ return unless Datadog.configuration[:rails][:auto_instrument_grape]
146
124
 
147
125
  # patch the Grape library so that endpoints are traced
148
126
  Datadog::Monkey.patch_module(:grape)
@@ -150,13 +128,13 @@ module Datadog
150
128
  # update the Grape pin object
151
129
  pin = Datadog::Pin.get_from(::Grape)
152
130
  return unless pin && pin.enabled?
153
- pin.tracer = ::Rails.configuration.datadog_trace[:tracer]
154
- pin.service = ::Rails.configuration.datadog_trace[:default_grape_service]
131
+ pin.tracer = Datadog.configuration[:rails][:tracer]
132
+ pin.service = Datadog.configuration[:rails][:default_grape_service]
155
133
  end
156
134
 
157
135
  # automatically instrument all Rails component
158
136
  def self.auto_instrument
159
- return unless ::Rails.configuration.datadog_trace[:auto_instrument]
137
+ return unless Datadog.configuration[:rails][:auto_instrument]
160
138
  Datadog::Tracer.log.debug('Enabling auto-instrumentation for core components')
161
139
 
162
140
  # instrumenting Rails framework