ddtrace 0.35.2 → 0.40.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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +59 -1
  3. data/.gitignore +2 -0
  4. data/.gitlab-ci.yml +27 -0
  5. data/.rubocop.yml +4 -0
  6. data/.simplecov +38 -0
  7. data/Appraisals +139 -12
  8. data/CHANGELOG.md +185 -1
  9. data/Rakefile +524 -464
  10. data/ddtrace.gemspec +6 -0
  11. data/docker-compose.yml +37 -2
  12. data/docs/DevelopmentGuide.md +16 -0
  13. data/docs/GettingStarted.md +192 -111
  14. data/lib/ddtrace.rb +4 -0
  15. data/lib/ddtrace/configuration.rb +36 -5
  16. data/lib/ddtrace/configuration/components.rb +4 -7
  17. data/lib/ddtrace/configuration/pin_setup.rb +3 -2
  18. data/lib/ddtrace/configuration/settings.rb +27 -3
  19. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
  20. data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
  21. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
  22. data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
  23. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
  24. data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
  25. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
  26. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
  27. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
  28. data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
  29. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
  30. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
  31. data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
  32. data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
  33. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +1 -1
  34. data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
  35. data/lib/ddtrace/contrib/aws/ext.rb +5 -2
  36. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
  37. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
  38. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  39. data/lib/ddtrace/contrib/configuration/settings.rb +19 -0
  40. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
  41. data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
  42. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -5
  43. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
  44. data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
  45. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
  46. data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
  47. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -2
  48. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
  49. data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
  50. data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
  51. data/lib/ddtrace/contrib/excon/ext.rb +5 -2
  52. data/lib/ddtrace/contrib/extensions.rb +39 -5
  53. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
  54. data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
  55. data/lib/ddtrace/contrib/faraday/middleware.rb +5 -3
  56. data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
  57. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
  58. data/lib/ddtrace/contrib/grape/ext.rb +5 -2
  59. data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
  60. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
  61. data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
  62. data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
  63. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
  64. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
  65. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -3
  66. data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
  67. data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
  68. data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
  69. data/lib/ddtrace/contrib/http/ext.rb +5 -2
  70. data/lib/ddtrace/contrib/http/instrumentation.rb +12 -7
  71. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
  72. data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
  73. data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
  74. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  75. data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
  76. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
  77. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  78. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  79. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  80. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  81. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  82. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  83. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  84. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  85. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  86. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  87. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  88. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  89. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  90. data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
  91. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  92. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  93. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
  94. data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
  95. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
  96. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
  97. data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
  98. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
  99. data/lib/ddtrace/contrib/patcher.rb +14 -8
  100. data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
  101. data/lib/ddtrace/contrib/presto/ext.rb +5 -2
  102. data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
  103. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  104. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  105. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  106. data/lib/ddtrace/contrib/que/tracer.rb +56 -0
  107. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
  108. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  109. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  110. data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
  111. data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
  112. data/lib/ddtrace/contrib/rack/ext.rb +5 -2
  113. data/lib/ddtrace/contrib/rack/middlewares.rb +17 -12
  114. data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -11
  115. data/lib/ddtrace/contrib/rails/ext.rb +6 -2
  116. data/lib/ddtrace/contrib/rails/framework.rb +52 -46
  117. data/lib/ddtrace/contrib/rails/integration.rb +1 -1
  118. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  119. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  120. data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
  121. data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
  122. data/lib/ddtrace/contrib/rake/ext.rb +5 -2
  123. data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
  124. data/lib/ddtrace/contrib/redis/ext.rb +5 -2
  125. data/lib/ddtrace/contrib/redis/patcher.rb +1 -1
  126. data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
  127. data/lib/ddtrace/contrib/resque/ext.rb +5 -2
  128. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
  129. data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
  130. data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
  131. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
  132. data/lib/ddtrace/contrib/sequel/database.rb +1 -1
  133. data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
  134. data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
  135. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
  136. data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
  137. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
  138. data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
  139. data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
  140. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
  141. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
  142. data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
  143. data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
  144. data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
  145. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
  146. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
  147. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  148. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  149. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  150. data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
  151. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
  152. data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
  153. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +1 -1
  154. data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
  155. data/lib/ddtrace/environment.rb +17 -3
  156. data/lib/ddtrace/ext/diagnostics.rb +3 -0
  157. data/lib/ddtrace/ext/environment.rb +2 -0
  158. data/lib/ddtrace/ext/transport.rb +1 -0
  159. data/lib/ddtrace/logger.rb +1 -1
  160. data/lib/ddtrace/pin.rb +39 -15
  161. data/lib/ddtrace/pipeline/span_filter.rb +15 -15
  162. data/lib/ddtrace/runtime/metrics.rb +18 -4
  163. data/lib/ddtrace/sampler.rb +2 -0
  164. data/lib/ddtrace/span.rb +10 -0
  165. data/lib/ddtrace/tracer.rb +15 -8
  166. data/lib/ddtrace/transport/http.rb +15 -0
  167. data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
  168. data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
  169. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
  170. data/lib/ddtrace/transport/response.rb +11 -0
  171. data/lib/ddtrace/version.rb +2 -2
  172. data/lib/ddtrace/workers/async.rb +2 -2
  173. data/lib/ddtrace/workers/loop.rb +1 -1
  174. data/lib/ddtrace/workers/polling.rb +1 -1
  175. data/lib/ddtrace/workers/trace_writer.rb +3 -0
  176. data/lib/ddtrace/writer.rb +33 -12
  177. metadata +124 -4
@@ -0,0 +1,29 @@
1
+ require 'ddtrace/contrib/kafka/ext'
2
+ require 'ddtrace/contrib/kafka/event'
3
+ require 'ddtrace/contrib/kafka/consumer_event'
4
+ require 'ddtrace/contrib/kafka/consumer_group_event'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Kafka
9
+ module Events
10
+ module ConsumerGroup
11
+ # Defines instrumentation for sync_group.consumer.kafka event
12
+ module SyncGroup
13
+ include Kafka::Event
14
+ extend Kafka::ConsumerEvent
15
+ extend Kafka::ConsumerGroupEvent
16
+
17
+ EVENT_NAME = 'sync_group.consumer.kafka'.freeze
18
+
19
+ module_function
20
+
21
+ def span_name
22
+ Ext::SPAN_CONSUMER_SYNC_GROUP
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,32 @@
1
+ require 'ddtrace/contrib/kafka/ext'
2
+ require 'ddtrace/contrib/kafka/event'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Kafka
7
+ module Events
8
+ module ProduceOperation
9
+ # Defines instrumentation for send_messages.producer.kafka event
10
+ module SendMessages
11
+ include Kafka::Event
12
+
13
+ EVENT_NAME = 'send_messages.producer.kafka'.freeze
14
+
15
+ def self.process(span, _event, _id, payload)
16
+ super
17
+
18
+ span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
19
+ span.set_tag(Ext::TAG_SENT_MESSAGE_COUNT, payload[:sent_message_count]) if payload.key?(:sent_message_count)
20
+ end
21
+
22
+ module_function
23
+
24
+ def span_name
25
+ Ext::SPAN_SEND_MESSAGES
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ require 'ddtrace/contrib/kafka/ext'
2
+ require 'ddtrace/contrib/kafka/event'
3
+
4
+ module Datadog
5
+ module Contrib
6
+ module Kafka
7
+ module Events
8
+ module Producer
9
+ # Defines instrumentation for deliver_messages.producer.kafka event
10
+ module DeliverMessages
11
+ include Kafka::Event
12
+
13
+ EVENT_NAME = 'deliver_messages.producer.kafka'.freeze
14
+
15
+ def self.process(span, _event, _id, payload)
16
+ super
17
+
18
+ span.set_tag(Ext::TAG_ATTEMPTS, payload[:attempts]) if payload.key?(:attempts)
19
+ span.set_tag(Ext::TAG_MESSAGE_COUNT, payload[:message_count]) if payload.key?(:message_count)
20
+ if payload.key?(:delivered_message_count)
21
+ span.set_tag(Ext::TAG_DELIVERED_MESSAGE_COUNT, payload[:delivered_message_count])
22
+ end
23
+ end
24
+
25
+ module_function
26
+
27
+ def span_name
28
+ Ext::SPAN_DELIVER_MESSAGES
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,41 @@
1
+ module Datadog
2
+ module Contrib
3
+ module Kafka
4
+ # Kafka integration constants
5
+ module Ext
6
+ APP = 'kafka'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_KAFKA_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_KAFKA_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_KAFKA_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_KAFKA_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_KAFKA_ANALYTICS_SAMPLE_RATE'.freeze
12
+ SERVICE_NAME = 'kafka'.freeze
13
+ SPAN_CONNECTION_REQUEST = 'kafka.connection.request'.freeze
14
+ SPAN_CONSUMER_HEARTBEAT = 'kafka.consumer.heartbeat'.freeze
15
+ SPAN_CONSUMER_JOIN_GROUP = 'kafka.consumer.join_group'.freeze
16
+ SPAN_CONSUMER_LEAVE_GROUP = 'kafka.consumer.leave_group'.freeze
17
+ SPAN_CONSUMER_SYNC_GROUP = 'kafka.consumer.sync_group'.freeze
18
+ SPAN_DELIVER_MESSAGES = 'kafka.producer.deliver_messages'.freeze
19
+ SPAN_PROCESS_BATCH = 'kafka.consumer.process_batch'.freeze
20
+ SPAN_PROCESS_MESSAGE = 'kafka.consumer.process_message'.freeze
21
+ SPAN_SEND_MESSAGES = 'kafka.producer.send_messages'.freeze
22
+ TAG_ATTEMPTS = 'kafka.attempts'.freeze
23
+ TAG_API = 'kafka.api'.freeze
24
+ TAG_CLIENT = 'kafka.client'.freeze
25
+ TAG_GROUP = 'kafka.group'.freeze
26
+ TAG_HIGHWATER_MARK_OFFSET = 'kafka.highwater_mark_offset'.freeze
27
+ TAG_MESSAGE_COUNT = 'kafka.message_count'.freeze
28
+ TAG_MESSAGE_KEY = 'kafka.message_key'.freeze
29
+ TAG_DELIVERED_MESSAGE_COUNT = 'kafka.delivered_message_count'.freeze
30
+ TAG_OFFSET = 'kafka.offset'.freeze
31
+ TAG_OFFSET_LAG = 'kafka.offset_lag'.freeze
32
+ TAG_PARTITION = 'kafka.partition'.freeze
33
+ TAG_REQUEST_SIZE = 'kafka.request_size'.freeze
34
+ TAG_RESPONSE_SIZE = 'kafka.response_size'.freeze
35
+ TAG_SENT_MESSAGE_COUNT = 'kafka.sent_message_count'.freeze
36
+ TAG_TOPIC = 'kafka.topic'.freeze
37
+ TAG_TOPIC_PARTITIONS = 'kafka.topic_partitions'.freeze
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,39 @@
1
+ require 'ddtrace/contrib/integration'
2
+ require 'ddtrace/contrib/kafka/configuration/settings'
3
+ require 'ddtrace/contrib/kafka/patcher'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Kafka
8
+ # Description of Kafka integration
9
+ class Integration
10
+ include Contrib::Integration
11
+
12
+ MINIMUM_VERSION = Gem::Version.new('0.7.10')
13
+
14
+ register_as :kafka, auto_patch: false
15
+
16
+ def self.version
17
+ Gem.loaded_specs['ruby-kafka'] && Gem.loaded_specs['ruby-kafka'].version
18
+ end
19
+
20
+ def self.loaded?
21
+ !defined?(::Kafka).nil? \
22
+ && !defined?(::ActiveSupport::Notifications).nil?
23
+ end
24
+
25
+ def self.compatible?
26
+ super && version >= MINIMUM_VERSION
27
+ end
28
+
29
+ def default_configuration
30
+ Configuration::Settings.new
31
+ end
32
+
33
+ def patcher
34
+ Patcher
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ require 'ddtrace/contrib/patcher'
2
+ require 'ddtrace/ext/app_types'
3
+ require 'ddtrace/contrib/kafka/ext'
4
+ require 'ddtrace/contrib/kafka/events'
5
+
6
+ module Datadog
7
+ module Contrib
8
+ module Kafka
9
+ # Patcher enables patching of 'kafka' module.
10
+ module Patcher
11
+ include Contrib::Patcher
12
+
13
+ module_function
14
+
15
+ def target_version
16
+ Integration.version
17
+ end
18
+
19
+ def patch
20
+ # Subscribe to Kafka events
21
+ Events.subscribe!
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -9,13 +9,18 @@ module Datadog
9
9
  class Settings < Contrib::Configuration::Settings
10
10
  DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
11
11
 
12
+ option :enabled do |o|
13
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
14
+ o.lazy
15
+ end
16
+
12
17
  option :analytics_enabled do |o|
13
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
18
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
14
19
  o.lazy
15
20
  end
16
21
 
17
22
  option :analytics_sample_rate do |o|
18
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
23
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
19
24
  o.lazy
20
25
  end
21
26
 
@@ -4,8 +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
+ ENV_ENABLED = 'DD_TRACE_MONGO_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_MONGO_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_MONGO_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'mongodb'.freeze
10
13
  SPAN_COMMAND = 'mongo.cmd'.freeze
11
14
  SPAN_TYPE_COMMAND = 'mongodb'.freeze
@@ -49,14 +49,13 @@ module Datadog
49
49
  module InstanceMethods
50
50
  def datadog_pin
51
51
  @datadog_pin ||= begin
52
- tracer = Datadog.configuration[:mongo][:tracer]
53
52
  service = Datadog.configuration[:mongo][:service_name]
54
53
 
55
54
  Datadog::Pin.new(
56
55
  service,
57
56
  app: Datadog::Contrib::MongoDB::Ext::APP,
58
57
  app_type: Datadog::Ext::AppTypes::DB,
59
- tracer: tracer
58
+ tracer: -> { Datadog.configuration[:mongo][:tracer] }
60
59
  )
61
60
  end
62
61
  end
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Mysql2 integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ 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
+ ENV_ENABLED = 'DD_TRACE_MYSQL2_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_MYSQL2_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_MYSQL2_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MYSQL2_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_MYSQL2_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'mysql2'.freeze
10
13
  SPAN_QUERY = 'mysql2.query'.freeze
11
14
  TAG_DB_NAME = 'mysql2.db.name'.freeze
@@ -36,7 +36,7 @@ module Datadog
36
36
  Datadog.configuration[:mysql2][:service_name],
37
37
  app: Ext::APP,
38
38
  app_type: Datadog::Ext::AppTypes::DB,
39
- tracer: Datadog.configuration[:mysql2][:tracer]
39
+ tracer: -> { Datadog.configuration[:mysql2][:tracer] }
40
40
  )
41
41
  end
42
42
 
@@ -31,18 +31,24 @@ module Datadog
31
31
  Datadog.health_metrics.instrumentation_patched(1, tags: default_tags)
32
32
  end
33
33
  rescue StandardError => e
34
- # Log the error
35
- Datadog.logger.error("Failed to apply #{patch_name} patch. Cause: #{e} Location: #{e.backtrace.first}")
36
-
37
- # Emit a metric
38
- tags = default_tags
39
- tags << "error:#{e.class.name}"
40
-
41
- Datadog.health_metrics.error_instrumentation_patch(1, tags: tags)
34
+ on_patch_error(e)
42
35
  end
43
36
  end
44
37
  end
45
38
 
39
+ # Processes patching errors. This default implementation logs the error and reports relevant metrics.
40
+ # @param e [Exception]
41
+ def on_patch_error(e)
42
+ # Log the error
43
+ Datadog.logger.error("Failed to apply #{patch_name} patch. Cause: #{e} Location: #{e.backtrace.first}")
44
+
45
+ # Emit a metric
46
+ tags = default_tags
47
+ tags << "error:#{e.class.name}"
48
+
49
+ Datadog.health_metrics.error_instrumentation_patch(1, tags: tags)
50
+ end
51
+
46
52
  private
47
53
 
48
54
  def default_tags
@@ -7,13 +7,18 @@ module Datadog
7
7
  module Configuration
8
8
  # Custom settings for the Presto integration
9
9
  class Settings < Contrib::Configuration::Settings
10
+ option :enabled do |o|
11
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
12
+ o.lazy
13
+ end
14
+
10
15
  option :analytics_enabled do |o|
11
- o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
16
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
12
17
  o.lazy
13
18
  end
14
19
 
15
20
  option :analytics_sample_rate do |o|
16
- o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
21
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
17
22
  o.lazy
18
23
  end
19
24
 
@@ -4,8 +4,11 @@ module Datadog
4
4
  # Presto integration constants
5
5
  module Ext
6
6
  APP = 'presto'.freeze
7
- ENV_ANALYTICS_ENABLED = 'DD_PRESTO_ANALYTICS_ENABLED'.freeze
8
- ENV_ANALYTICS_SAMPLE_RATE = 'DD_PRESTO_ANALYTICS_SAMPLE_RATE'.freeze
7
+ ENV_ENABLED = 'DD_TRACE_PRESTO_ENABLED'.freeze
8
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_PRESTO_ANALYTICS_ENABLED'.freeze
9
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_PRESTO_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_PRESTO_ANALYTICS_SAMPLE_RATE'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_PRESTO_ANALYTICS_SAMPLE_RATE'.freeze
9
12
  SERVICE_NAME = 'presto'.freeze
10
13
  SPAN_QUERY = 'presto.query'.freeze
11
14
  SPAN_RESUME = 'presto.resume_query'.freeze
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ddtrace/contrib/configuration/settings'
4
+
5
+ module Datadog
6
+ module Contrib
7
+ module Que
8
+ module Configuration
9
+ # Default settings for the Que integration
10
+ class Settings < Datadog::Contrib::Configuration::Settings
11
+ option :service_name, default: Ext::SERVICE_NAME
12
+ option :distributed_tracing, default: true
13
+
14
+ option :enabled do |o|
15
+ o.default { env_to_bool(Ext::ENV_ENABLED, true) }
16
+ o.lazy
17
+ end
18
+
19
+ option :analytics_enabled do |o|
20
+ o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
21
+ o.lazy
22
+ end
23
+
24
+ option :analytics_sample_rate do |o|
25
+ o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
26
+ o.lazy
27
+ end
28
+
29
+ option :tag_args do |o|
30
+ o.default { env_to_bool(Ext::ENV_TAG_ARGS_ENABLED, false) }
31
+ o.lazy
32
+ end
33
+
34
+ option :tag_data do |o|
35
+ o.default { env_to_bool(Ext::ENV_TAG_DATA_ENABLED, false) }
36
+ o.lazy
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Contrib
5
+ module Que
6
+ # Que integration constants
7
+ module Ext
8
+ APP = 'que'.freeze
9
+ ENV_ANALYTICS_ENABLED = 'DD_TRACE_QUE_ANALYTICS_ENABLED'.freeze
10
+ ENV_ANALYTICS_ENABLED_OLD = 'DD_QUE_ANALYTICS_ENABLED'.freeze
11
+ ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_QUE_ANALYTICS_SAMPLE_RATE'.freeze
12
+ ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_QUE_ANALYTICS_SAMPLE_RATE'.freeze
13
+ ENV_ENABLED = 'DD_TRACE_QUE_ENABLED'.freeze
14
+ ENV_TAG_ARGS_ENABLED = 'DD_TRACE_QUE_TAG_ARGS_ENABLED'.freeze
15
+ ENV_TAG_DATA_ENABLED = 'DD_TRACE_QUE_TAG_DATA_ENABLED'.freeze
16
+ SERVICE_NAME = 'que'.freeze
17
+ SPAN_JOB = 'que.job'.freeze
18
+ TAG_JOB_ARGS = 'que.job.args'.freeze
19
+ TAG_JOB_DATA = 'que.job.data'.freeze
20
+ TAG_JOB_ERROR_COUNT = 'que.job.error_count'.freeze
21
+ TAG_JOB_EXPIRED_AT = 'que.job.expired_at'.freeze
22
+ TAG_JOB_FINISHED_AT = 'que.job.finished_at'.freeze
23
+ TAG_JOB_ID = 'que.job.id'.freeze
24
+ TAG_JOB_PRIORITY = 'que.job.priority'.freeze
25
+ TAG_JOB_QUEUE = 'que.job.queue'.freeze
26
+ TAG_JOB_RUN_AT = 'que.job.run_at'.freeze
27
+ end
28
+ end
29
+ end
30
+ end