ddtrace 0.20.0 → 0.21.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 (116) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -3
  3. data/Rakefile +1 -1
  4. data/docs/GettingStarted.md +25 -7
  5. data/lib/ddtrace.rb +4 -31
  6. data/lib/ddtrace/configuration.rb +13 -46
  7. data/lib/ddtrace/configuration/{resolver.rb → dependency_resolver.rb} +2 -2
  8. data/lib/ddtrace/configuration/option.rb +32 -0
  9. data/lib/ddtrace/configuration/option_definition.rb +27 -0
  10. data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
  11. data/lib/ddtrace/configuration/option_set.rb +6 -0
  12. data/lib/ddtrace/configuration/options.rb +93 -0
  13. data/lib/ddtrace/configuration/pin_setup.rb +1 -1
  14. data/lib/ddtrace/configuration/settings.rb +47 -0
  15. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +8 -0
  16. data/lib/ddtrace/contrib/active_model_serializers/event.rb +6 -0
  17. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +2 -2
  18. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +8 -0
  19. data/lib/ddtrace/contrib/active_record/events/instantiation.rb +7 -0
  20. data/lib/ddtrace/contrib/active_record/events/sql.rb +6 -0
  21. data/lib/ddtrace/contrib/active_record/ext.rb +2 -3
  22. data/lib/ddtrace/contrib/analytics.rb +3 -4
  23. data/lib/ddtrace/contrib/aws/configuration/settings.rb +8 -0
  24. data/lib/ddtrace/contrib/aws/ext.rb +5 -6
  25. data/lib/ddtrace/contrib/aws/instrumentation.rb +7 -0
  26. data/lib/ddtrace/contrib/configuration/settings.rb +4 -14
  27. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +8 -0
  28. data/lib/ddtrace/contrib/dalli/ext.rb +3 -2
  29. data/lib/ddtrace/contrib/dalli/instrumentation.rb +7 -0
  30. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -1
  31. data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -1
  32. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +8 -0
  33. data/lib/ddtrace/contrib/elasticsearch/ext.rb +2 -2
  34. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +11 -1
  35. data/lib/ddtrace/contrib/excon/configuration/settings.rb +8 -0
  36. data/lib/ddtrace/contrib/excon/ext.rb +2 -1
  37. data/lib/ddtrace/contrib/excon/middleware.rb +15 -0
  38. data/lib/ddtrace/contrib/extensions.rb +62 -0
  39. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +8 -0
  40. data/lib/ddtrace/contrib/faraday/ext.rb +2 -1
  41. data/lib/ddtrace/contrib/faraday/middleware.rb +15 -0
  42. data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
  43. data/lib/ddtrace/contrib/grape/endpoint.rb +19 -0
  44. data/lib/ddtrace/contrib/grape/ext.rb +2 -2
  45. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +8 -0
  46. data/lib/ddtrace/contrib/graphql/ext.rb +2 -0
  47. data/lib/ddtrace/contrib/graphql/patcher.rb +8 -2
  48. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +8 -0
  49. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +9 -0
  50. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +4 -0
  51. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
  52. data/lib/ddtrace/contrib/grpc/ext.rb +2 -1
  53. data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -0
  54. data/lib/ddtrace/contrib/http/ext.rb +2 -1
  55. data/lib/ddtrace/contrib/http/instrumentation.rb +54 -19
  56. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +8 -0
  57. data/lib/ddtrace/contrib/mongodb/ext.rb +2 -2
  58. data/lib/ddtrace/contrib/mongodb/subscribers.rb +18 -0
  59. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +8 -0
  60. data/lib/ddtrace/contrib/mysql2/ext.rb +2 -2
  61. data/lib/ddtrace/contrib/mysql2/{client.rb → instrumentation.rb} +32 -12
  62. data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -2
  63. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -1
  64. data/lib/ddtrace/contrib/racecar/ext.rb +1 -1
  65. data/lib/ddtrace/contrib/rack/configuration/settings.rb +1 -1
  66. data/lib/ddtrace/contrib/rack/ext.rb +1 -1
  67. data/lib/ddtrace/contrib/rails/action_controller.rb +3 -0
  68. data/lib/ddtrace/contrib/rails/active_support.rb +1 -0
  69. data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
  70. data/lib/ddtrace/contrib/rails/ext.rb +2 -5
  71. data/lib/ddtrace/contrib/rails/utils.rb +17 -1
  72. data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -1
  73. data/lib/ddtrace/contrib/rake/ext.rb +1 -1
  74. data/lib/ddtrace/contrib/redis/configuration/settings.rb +8 -0
  75. data/lib/ddtrace/contrib/redis/ext.rb +4 -5
  76. data/lib/ddtrace/contrib/redis/tags.rb +24 -6
  77. data/lib/ddtrace/contrib/registerable.rb +1 -1
  78. data/lib/ddtrace/contrib/registry.rb +42 -0
  79. data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -1
  80. data/lib/ddtrace/contrib/resque/ext.rb +1 -1
  81. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +8 -0
  82. data/lib/ddtrace/contrib/rest_client/ext.rb +2 -1
  83. data/lib/ddtrace/contrib/rest_client/request_patch.rb +14 -0
  84. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -1
  85. data/lib/ddtrace/contrib/sequel/database.rb +2 -0
  86. data/lib/ddtrace/contrib/sequel/dataset.rb +2 -0
  87. data/lib/ddtrace/contrib/sequel/ext.rb +2 -2
  88. data/lib/ddtrace/contrib/sequel/utils.rb +32 -14
  89. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -1
  90. data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -1
  91. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -1
  92. data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -1
  93. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +8 -0
  94. data/lib/ddtrace/contrib/sinatra/ext.rb +3 -4
  95. data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -0
  96. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +12 -0
  97. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -1
  98. data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -1
  99. data/lib/ddtrace/environment.rb +15 -0
  100. data/lib/ddtrace/ext/analytics.rb +1 -0
  101. data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
  102. data/lib/ddtrace/propagation/distributed_headers.rb +14 -4
  103. data/lib/ddtrace/span.rb +4 -0
  104. data/lib/ddtrace/tracer.rb +6 -1
  105. data/lib/ddtrace/version.rb +1 -1
  106. metadata +14 -15
  107. data/lib/ddtrace/configurable.rb +0 -83
  108. data/lib/ddtrace/configuration/proxy.rb +0 -25
  109. data/lib/ddtrace/contrib/base.rb +0 -16
  110. data/lib/ddtrace/contrib/configuration/option.rb +0 -33
  111. data/lib/ddtrace/contrib/configuration/option_definition.rb +0 -29
  112. data/lib/ddtrace/contrib/configuration/option_definition_set.rb +0 -20
  113. data/lib/ddtrace/contrib/configuration/option_set.rb +0 -8
  114. data/lib/ddtrace/contrib/configuration/options.rb +0 -95
  115. data/lib/ddtrace/registry.rb +0 -42
  116. data/lib/ddtrace/registry/registerable.rb +0 -20
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/ext/http'
2
+ require 'ddtrace/contrib/analytics'
2
3
  require 'ddtrace/contrib/grpc/ext'
3
4
 
4
5
  module Datadog
@@ -44,6 +45,9 @@ module Datadog
44
45
  next if reserved_headers.include?(header)
45
46
  span.set_tag(header, value)
46
47
  end
48
+
49
+ # Set analytics sample rate
50
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
47
51
  rescue StandardError => e
48
52
  Datadog::Tracer.log.debug("GRPC client trace failed: #{e}")
49
53
  end
@@ -4,8 +4,9 @@ module Datadog
4
4
  # gRPC integration constants
5
5
  module Ext
6
6
  APP = 'grpc'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
7
9
  SERVICE_NAME = 'grpc'.freeze
8
-
9
10
  SPAN_CLIENT = 'grpc.client'.freeze
10
11
  SPAN_SERVICE = 'grpc.service'.freeze
11
12
  end
@@ -7,6 +7,14 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the HTTP integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :analytics_enabled,
11
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
12
+ lazy: true
13
+
14
+ option :analytics_sample_rate,
15
+ default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
16
+ lazy: true
17
+
10
18
  option :distributed_tracing, default: true
11
19
  option :service_name, default: Ext::SERVICE_NAME
12
20
  end
@@ -4,8 +4,9 @@ module Datadog
4
4
  # HTTP integration constants
5
5
  module Ext
6
6
  APP = 'net/http'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
7
9
  SERVICE_NAME = 'net/http'.freeze
8
-
9
10
  SPAN_REQUEST = 'http.request'.freeze
10
11
  end
11
12
  end
@@ -4,6 +4,7 @@ require 'ddtrace/ext/app_types'
4
4
  require 'ddtrace/ext/http'
5
5
  require 'ddtrace/ext/net'
6
6
  require 'ddtrace/ext/distributed'
7
+ require 'ddtrace/contrib/analytics'
7
8
 
8
9
  module Datadog
9
10
  module Contrib
@@ -22,6 +23,17 @@ module Datadog
22
23
  end
23
24
  end
24
25
 
26
+ # Span hook invoked after request is completed.
27
+ def self.after_request(&block)
28
+ if block_given?
29
+ # Set hook
30
+ @after_request = block
31
+ else
32
+ # Get hook
33
+ @after_request ||= nil
34
+ end
35
+ end
36
+
25
37
  # Compatibility shim for Rubies not supporting `.prepend`
26
38
  module InstanceMethodsCompatibility
27
39
  def self.included(base)
@@ -38,7 +50,6 @@ module Datadog
38
50
 
39
51
  # InstanceMethods - implementing instrumentation
40
52
  module InstanceMethods
41
- # rubocop:disable Metrics/MethodLength
42
53
  def request(req, body = nil, &block) # :yield: +response+
43
54
  pin = datadog_pin
44
55
  return super(req, body, &block) unless pin && pin.tracer
@@ -53,12 +64,7 @@ module Datadog
53
64
  begin
54
65
  span.service = pin.service
55
66
  span.span_type = Datadog::Ext::HTTP::TYPE
56
-
57
67
  span.resource = req.method
58
- # Using the method as a resource, as URL/path can trigger
59
- # a possibly infinite number of resources.
60
- span.set_tag(Datadog::Ext::HTTP::URL, req.path)
61
- span.set_tag(Datadog::Ext::HTTP::METHOD, req.method)
62
68
 
63
69
  if pin.tracer.enabled && !Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
64
70
  req.add_field(Datadog::Ext::DistributedTracing::HTTP_HEADER_TRACE_ID, span.trace_id)
@@ -75,26 +81,41 @@ module Datadog
75
81
  ensure
76
82
  response = super(req, body, &block)
77
83
  end
78
- span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
79
- if req.respond_to?(:uri) && req.uri
80
- span.set_tag(Datadog::Ext::NET::TARGET_HOST, req.uri.host)
81
- span.set_tag(Datadog::Ext::NET::TARGET_PORT, req.uri.port.to_s)
82
- else
83
- span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
84
- span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
85
- end
86
84
 
87
- case response.code.to_i / 100
88
- when 4
89
- span.set_error(response)
90
- when 5
91
- span.set_error(response)
85
+ # Add additional tags to the span.
86
+ annotate_span!(span, req, response)
87
+
88
+ # Invoke hook, if set.
89
+ unless Contrib::HTTP::Instrumentation.after_request.nil?
90
+ Contrib::HTTP::Instrumentation.after_request.call(span, self, req, response)
92
91
  end
93
92
 
94
93
  response
95
94
  end
96
95
  end
97
96
 
97
+ def annotate_span!(span, request, response)
98
+ span.set_tag(Datadog::Ext::HTTP::URL, request.path)
99
+ span.set_tag(Datadog::Ext::HTTP::METHOD, request.method)
100
+ span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
101
+
102
+ if request.respond_to?(:uri) && request.uri
103
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, request.uri.host)
104
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, request.uri.port.to_s)
105
+ else
106
+ span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
107
+ span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
108
+ end
109
+
110
+ # Set analytics sample rate
111
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
112
+
113
+ case response.code.to_i
114
+ when 400...599
115
+ span.set_error(response)
116
+ end
117
+ end
118
+
98
119
  def datadog_pin
99
120
  @datadog_pin ||= begin
100
121
  service = Datadog.configuration[:http][:service_name]
@@ -103,6 +124,20 @@ module Datadog
103
124
  Datadog::Pin.new(service, app: Ext::APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
104
125
  end
105
126
  end
127
+
128
+ private
129
+
130
+ def datadog_configuration
131
+ Datadog.configuration[:http]
132
+ end
133
+
134
+ def analytics_enabled?
135
+ Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
136
+ end
137
+
138
+ def analytics_sample_rate
139
+ datadog_configuration[:analytics_sample_rate]
140
+ end
106
141
  end
107
142
  end
108
143
  end
@@ -9,6 +9,14 @@ module Datadog
9
9
  class Settings < Contrib::Configuration::Settings
10
10
  DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
11
11
 
12
+ option :analytics_enabled,
13
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
14
+ lazy: true
15
+
16
+ option :analytics_sample_rate,
17
+ default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
18
+ lazy: true
19
+
12
20
  option :quantize, default: DEFAULT_QUANTIZE
13
21
  option :service_name, default: Ext::SERVICE_NAME
14
22
  end
@@ -4,11 +4,11 @@ module Datadog
4
4
  # MongoDB integration constants
5
5
  module Ext
6
6
  APP = 'mongodb'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_MONGO_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
7
9
  SERVICE_NAME = 'mongodb'.freeze
8
-
9
10
  SPAN_COMMAND = 'mongo.cmd'.freeze
10
11
  SPAN_TYPE_COMMAND = 'mongodb'.freeze
11
-
12
12
  TAG_COLLECTION = 'mongodb.collection'.freeze
13
13
  TAG_DB = 'mongodb.db'.freeze
14
14
  TAG_OPERATION = 'mongodb.operation'.freeze
@@ -1,3 +1,4 @@
1
+ require 'ddtrace/contrib/analytics'
1
2
  require 'ddtrace/contrib/mongodb/ext'
2
3
  require 'ddtrace/contrib/mongodb/parsers'
3
4
 
@@ -23,6 +24,11 @@ module Datadog
23
24
  query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
24
25
  serialized_query = query.to_s
25
26
 
27
+ # Set analytics sample rate
28
+ if analytics_enabled?
29
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
30
+ end
31
+
26
32
  # add operation tags; the full query is stored and used as a resource,
27
33
  # since it has been quantized and reduced
28
34
  span.set_tag(Ext::TAG_DB, query['database'])
@@ -84,6 +90,18 @@ module Datadog
84
90
  return if Thread.current[:datadog_mongo_span].nil?
85
91
  Thread.current[:datadog_mongo_span].delete(event.request_id)
86
92
  end
93
+
94
+ def analytics_enabled?
95
+ Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
96
+ end
97
+
98
+ def analytics_sample_rate
99
+ datadog_configuration[:analytics_sample_rate]
100
+ end
101
+
102
+ def datadog_configuration
103
+ Datadog.configuration[:mongo]
104
+ end
87
105
  end
88
106
  end
89
107
  end
@@ -7,6 +7,14 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Mysql2 integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :analytics_enabled,
11
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
12
+ lazy: true
13
+
14
+ option :analytics_sample_rate,
15
+ default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
16
+ lazy: true
17
+
10
18
  option :service_name, default: Ext::SERVICE_NAME
11
19
  end
12
20
  end
@@ -4,10 +4,10 @@ module Datadog
4
4
  # Mysql2 integration constants
5
5
  module Ext
6
6
  APP = 'mysql2'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_MYSQL2_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_MYSQL2_ANALYTICS_SAMPLE_RATE'.freeze
7
9
  SERVICE_NAME = 'mysql2'.freeze
8
-
9
10
  SPAN_QUERY = 'mysql2.query'.freeze
10
-
11
11
  TAG_DB_NAME = 'mysql2.db.name'.freeze
12
12
  end
13
13
  end
@@ -1,20 +1,19 @@
1
1
  require 'ddtrace/ext/app_types'
2
2
  require 'ddtrace/ext/net'
3
3
  require 'ddtrace/ext/sql'
4
+ require 'ddtrace/contrib/analytics'
4
5
  require 'ddtrace/contrib/mysql2/ext'
5
6
 
6
7
  module Datadog
7
8
  module Contrib
8
9
  module Mysql2
9
10
  # Mysql2::Client patch module
10
- module Client
11
- module_function
12
-
13
- def included(base)
11
+ module Instrumentation
12
+ def self.included(base)
14
13
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
15
14
  base.class_eval do
16
- alias_method :aliased_query, :query
17
- remove_method :query
15
+ # Instance methods
16
+ include InstanceMethodsCompatibility
18
17
  include InstanceMethods
19
18
  end
20
19
  else
@@ -24,22 +23,29 @@ module Datadog
24
23
 
25
24
  # Mysql2::Client patch 1.9.3 instance methods
26
25
  module InstanceMethodsCompatibility
27
- def query(*args)
28
- aliased_query(*args)
26
+ def self.included(base)
27
+ base.class_eval do
28
+ alias_method :query_without_datadog, :query
29
+ remove_method :query
30
+ end
31
+ end
32
+
33
+ def query(*args, &block)
34
+ query_without_datadog(*args, &block)
29
35
  end
30
36
  end
31
37
 
32
38
  # Mysql2::Client patch instance methods
33
39
  module InstanceMethods
34
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.0.0')
35
- include InstanceMethodsCompatibility
36
- end
37
-
38
40
  def query(sql, options = {})
39
41
  datadog_pin.tracer.trace(Ext::SPAN_QUERY) do |span|
40
42
  span.resource = sql
41
43
  span.service = datadog_pin.service
42
44
  span.span_type = Datadog::Ext::SQL::TYPE
45
+
46
+ # Set analytics sample rate
47
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
48
+
43
49
  span.set_tag(Ext::TAG_DB_NAME, query_options[:database])
44
50
  span.set_tag(Datadog::Ext::NET::TARGET_HOST, query_options[:host])
45
51
  span.set_tag(Datadog::Ext::NET::TARGET_PORT, query_options[:port])
@@ -55,6 +61,20 @@ module Datadog
55
61
  tracer: Datadog.configuration[:mysql2][:tracer]
56
62
  )
57
63
  end
64
+
65
+ private
66
+
67
+ def datadog_configuration
68
+ Datadog.configuration[:mysql2]
69
+ end
70
+
71
+ def analytics_enabled?
72
+ datadog_configuration[:analytics_enabled]
73
+ end
74
+
75
+ def analytics_sample_rate
76
+ datadog_configuration[:analytics_sample_rate]
77
+ end
58
78
  end
59
79
  end
60
80
  end
@@ -1,5 +1,5 @@
1
1
  require 'ddtrace/contrib/patcher'
2
- require 'ddtrace/contrib/mysql2/client'
2
+ require 'ddtrace/contrib/mysql2/instrumentation'
3
3
 
4
4
  module Datadog
5
5
  module Contrib
@@ -25,7 +25,7 @@ module Datadog
25
25
  end
26
26
 
27
27
  def patch_mysql2_client
28
- ::Mysql2::Client.send(:include, Client)
28
+ ::Mysql2::Client.send(:include, Instrumentation)
29
29
  end
30
30
  end
31
31
  end
@@ -8,7 +8,7 @@ module Datadog
8
8
  # Custom settings for the Racecar integration
9
9
  class Settings < Contrib::Configuration::Settings
10
10
  option :analytics_enabled,
11
- default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENALBED, nil) },
11
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) },
12
12
  lazy: true
13
13
 
14
14
  option :analytics_sample_rate,
@@ -4,7 +4,7 @@ module Datadog
4
4
  # Racecar integration constants
5
5
  module Ext
6
6
  APP = 'racecar'.freeze
7
- ENV_ANALYTICS_ENALBED = 'DD_RACECAR_ANALYTICS_ENABLED'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_RACECAR_ANALYTICS_ENABLED'.freeze
8
8
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
9
9
  SERVICE_NAME = 'racecar'.freeze
10
10
  SPAN_BATCH = 'racecar.batch'.freeze
@@ -15,7 +15,7 @@ module Datadog
15
15
  }.freeze
16
16
 
17
17
  option :analytics_enabled,
18
- default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENALBED, nil) },
18
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) },
19
19
  lazy: true
20
20
 
21
21
  option :analytics_sample_rate,
@@ -4,7 +4,7 @@ module Datadog
4
4
  # Rack integration constants
5
5
  module Ext
6
6
  APP = 'rack'.freeze
7
- ENV_ANALYTICS_ENALBED = 'DD_RACK_ANALYTICS_ENABLED'.freeze
7
+ ENV_ANALYTICS_ENABLED = 'DD_RACK_ANALYTICS_ENABLED'.freeze
8
8
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_RACK_ANALYTICS_SAMPLE_RATE'.freeze
9
9
  RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
10
10
  SERVICE_NAME = 'rack'.freeze
@@ -50,6 +50,9 @@ module Datadog
50
50
  rack_request_span.resource = span.resource if rack_request_span
51
51
  end
52
52
 
53
+ # Set analytics sample rate
54
+ Utils.set_analytics_sample_rate(span)
55
+
53
56
  span.set_tag(Ext::TAG_ROUTE_ACTION, payload.fetch(:action))
54
57
  span.set_tag(Ext::TAG_ROUTE_CONTROLLER, payload.fetch(:controller))
55
58
 
@@ -53,6 +53,7 @@ module Datadog
53
53
  normalized_key = ::ActiveSupport::Cache.expand_cache_key(payload.fetch(:key))
54
54
  cache_key = Datadog::Utils.truncate(normalized_key, Ext::QUANTIZE_CACHE_MAX_KEY_SIZE)
55
55
  span.set_tag(Ext::TAG_CACHE_KEY, cache_key)
56
+
56
57
  span.set_error(payload[:exception]) if payload[:exception]
57
58
  ensure
58
59
  span.finish
@@ -6,6 +6,14 @@ module Datadog
6
6
  module Configuration
7
7
  # Custom settings for the Rails integration
8
8
  class Settings < Contrib::Configuration::Settings
9
+ option :analytics_enabled,
10
+ default: -> { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) },
11
+ lazy: true
12
+
13
+ option :analytics_sample_rate,
14
+ default: -> { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) },
15
+ lazy: true
16
+
9
17
  option :cache_service
10
18
  option :controller_service
11
19
  option :database_service, depends_on: [:service_name] do |value|
@@ -4,20 +4,17 @@ module Datadog
4
4
  # Rails integration constants
5
5
  module Ext
6
6
  APP = 'rails'.freeze
7
-
7
+ ENV_ANALYTICS_ENABLED = 'DD_RAILS_ANALYTICS_ENABLED'.freeze
8
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
8
9
  QUANTIZE_CACHE_MAX_KEY_SIZE = 300
9
-
10
10
  RESOURCE_CACHE_DELETE = 'DELETE'.freeze
11
11
  RESOURCE_CACHE_GET = 'GET'.freeze
12
12
  RESOURCE_CACHE_SET = 'SET'.freeze
13
-
14
13
  SPAN_ACTION_CONTROLLER = 'rails.action_controller'.freeze
15
14
  SPAN_CACHE = 'rails.cache'.freeze
16
15
  SPAN_RENDER_PARTIAL = 'rails.render_partial'.freeze
17
16
  SPAN_RENDER_TEMPLATE = 'rails.render_template'.freeze
18
-
19
17
  SPAN_TYPE_CACHE = 'cache'.freeze
20
-
21
18
  TAG_CACHE_BACKEND = 'rails.cache.backend'.freeze
22
19
  TAG_CACHE_KEY = 'rails.cache.key'.freeze
23
20
  TAG_LAYOUT = 'rails.layout'.freeze