ddtrace 0.36.0 → 0.41.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) 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/.simplecov +38 -0
  6. data/Appraisals +131 -6
  7. data/CHANGELOG.md +198 -1
  8. data/Rakefile +504 -467
  9. data/ddtrace.gemspec +7 -0
  10. data/docker-compose.yml +2 -2
  11. data/docs/DevelopmentGuide.md +16 -0
  12. data/docs/GettingStarted.md +192 -111
  13. data/lib/ddtrace.rb +4 -0
  14. data/lib/ddtrace/buffer.rb +154 -43
  15. data/lib/ddtrace/configuration.rb +39 -5
  16. data/lib/ddtrace/configuration/components.rb +4 -7
  17. data/lib/ddtrace/configuration/options.rb +3 -1
  18. data/lib/ddtrace/configuration/pin_setup.rb +3 -2
  19. data/lib/ddtrace/configuration/settings.rb +32 -4
  20. data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +7 -2
  21. data/lib/ddtrace/contrib/action_cable/ext.rb +5 -2
  22. data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
  23. data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
  24. data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
  25. data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
  26. data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
  27. data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
  28. data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
  29. data/lib/ddtrace/contrib/active_record/events/sql.rb +4 -0
  30. data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
  31. data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
  32. data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
  33. data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
  34. data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
  35. data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +3 -3
  36. data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
  37. data/lib/ddtrace/contrib/aws/ext.rb +5 -2
  38. data/lib/ddtrace/contrib/aws/instrumentation.rb +4 -0
  39. data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
  40. data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
  41. data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
  42. data/lib/ddtrace/contrib/configuration/settings.rb +19 -0
  43. data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
  44. data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
  45. data/lib/ddtrace/contrib/dalli/instrumentation.rb +4 -0
  46. data/lib/ddtrace/contrib/dalli/patcher.rb +1 -5
  47. data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
  48. data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
  49. data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
  50. data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
  51. data/lib/ddtrace/contrib/elasticsearch/patcher.rb +5 -2
  52. data/lib/ddtrace/contrib/ethon/configuration/settings.rb +7 -2
  53. data/lib/ddtrace/contrib/ethon/easy_patch.rb +4 -2
  54. data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
  55. data/lib/ddtrace/contrib/ethon/multi_patch.rb +4 -0
  56. data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
  57. data/lib/ddtrace/contrib/excon/ext.rb +5 -2
  58. data/lib/ddtrace/contrib/excon/middleware.rb +4 -0
  59. data/lib/ddtrace/contrib/extensions.rb +11 -1
  60. data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
  61. data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
  62. data/lib/ddtrace/contrib/faraday/middleware.rb +9 -3
  63. data/lib/ddtrace/contrib/faraday/patcher.rb +13 -5
  64. data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
  65. data/lib/ddtrace/contrib/grape/endpoint.rb +6 -4
  66. data/lib/ddtrace/contrib/grape/ext.rb +5 -2
  67. data/lib/ddtrace/contrib/grape/patcher.rb +1 -1
  68. data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
  69. data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
  70. data/lib/ddtrace/contrib/graphql/patcher.rb +6 -3
  71. data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
  72. data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
  73. data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +5 -3
  74. data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -0
  75. data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
  76. data/lib/ddtrace/contrib/grpc/patcher.rb +1 -5
  77. data/lib/ddtrace/contrib/http/configuration/settings.rb +7 -2
  78. data/lib/ddtrace/contrib/http/ext.rb +5 -2
  79. data/lib/ddtrace/contrib/http/instrumentation.rb +16 -7
  80. data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
  81. data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
  82. data/lib/ddtrace/contrib/httprb/instrumentation.rb +163 -0
  83. data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
  84. data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
  85. data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
  86. data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
  87. data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
  88. data/lib/ddtrace/contrib/kafka/event.rb +51 -0
  89. data/lib/ddtrace/contrib/kafka/events.rb +44 -0
  90. data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
  91. data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
  92. data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
  93. data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
  94. data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
  95. data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
  96. data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
  97. data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
  98. data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
  99. data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
  100. data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
  101. data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
  102. data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
  103. data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
  104. data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
  105. data/lib/ddtrace/contrib/mongodb/subscribers.rb +4 -0
  106. data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
  107. data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
  108. data/lib/ddtrace/contrib/mysql2/instrumentation.rb +5 -1
  109. data/lib/ddtrace/contrib/patcher.rb +14 -8
  110. data/lib/ddtrace/contrib/presto/configuration/settings.rb +7 -2
  111. data/lib/ddtrace/contrib/presto/ext.rb +5 -2
  112. data/lib/ddtrace/contrib/presto/instrumentation.rb +3 -0
  113. data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
  114. data/lib/ddtrace/contrib/que/ext.rb +30 -0
  115. data/lib/ddtrace/contrib/que/integration.rb +42 -0
  116. data/lib/ddtrace/contrib/que/patcher.rb +24 -0
  117. data/lib/ddtrace/contrib/que/tracer.rb +56 -0
  118. data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
  119. data/lib/ddtrace/contrib/racecar/event.rb +4 -0
  120. data/lib/ddtrace/contrib/racecar/events.rb +2 -0
  121. data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
  122. data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
  123. data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
  124. data/lib/ddtrace/contrib/rack/ext.rb +5 -2
  125. data/lib/ddtrace/contrib/rack/middlewares.rb +17 -12
  126. data/lib/ddtrace/contrib/rails/configuration/settings.rb +10 -12
  127. data/lib/ddtrace/contrib/rails/ext.rb +6 -2
  128. data/lib/ddtrace/contrib/rails/framework.rb +14 -21
  129. data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
  130. data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
  131. data/lib/ddtrace/contrib/rails/patcher.rb +15 -0
  132. data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
  133. data/lib/ddtrace/contrib/rake/ext.rb +5 -2
  134. data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
  135. data/lib/ddtrace/contrib/redis/ext.rb +5 -2
  136. data/lib/ddtrace/contrib/redis/patcher.rb +1 -1
  137. data/lib/ddtrace/contrib/redis/tags.rb +4 -0
  138. data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
  139. data/lib/ddtrace/contrib/resque/ext.rb +5 -2
  140. data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
  141. data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
  142. data/lib/ddtrace/contrib/rest_client/request_patch.rb +6 -2
  143. data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
  144. data/lib/ddtrace/contrib/sequel/database.rb +4 -2
  145. data/lib/ddtrace/contrib/sequel/dataset.rb +3 -2
  146. data/lib/ddtrace/contrib/sequel/ext.rb +6 -2
  147. data/lib/ddtrace/contrib/sequel/utils.rb +35 -6
  148. data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
  149. data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
  150. data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +7 -2
  151. data/lib/ddtrace/contrib/sidekiq/ext.rb +6 -2
  152. data/lib/ddtrace/contrib/sidekiq/patcher.rb +8 -1
  153. data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +1 -0
  154. data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
  155. data/lib/ddtrace/contrib/sinatra/env.rb +5 -4
  156. data/lib/ddtrace/contrib/sinatra/ext.rb +5 -2
  157. data/lib/ddtrace/contrib/sinatra/tracer.rb +21 -42
  158. data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +50 -23
  159. data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
  160. data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
  161. data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
  162. data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
  163. data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
  164. data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
  165. data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
  166. data/lib/ddtrace/contrib/sucker_punch/patcher.rb +1 -1
  167. data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
  168. data/lib/ddtrace/environment.rb +17 -3
  169. data/lib/ddtrace/ext/diagnostics.rb +3 -0
  170. data/lib/ddtrace/ext/environment.rb +2 -0
  171. data/lib/ddtrace/ext/integration.rb +8 -0
  172. data/lib/ddtrace/ext/runtime.rb +1 -0
  173. data/lib/ddtrace/ext/transport.rb +1 -0
  174. data/lib/ddtrace/logger.rb +1 -1
  175. data/lib/ddtrace/opentracer/distributed_headers.rb +1 -1
  176. data/lib/ddtrace/pin.rb +25 -2
  177. data/lib/ddtrace/pipeline/span_filter.rb +15 -15
  178. data/lib/ddtrace/propagation/grpc_propagator.rb +2 -2
  179. data/lib/ddtrace/runtime/metrics.rb +24 -6
  180. data/lib/ddtrace/sampler.rb +4 -2
  181. data/lib/ddtrace/span.rb +162 -27
  182. data/lib/ddtrace/tracer.rb +18 -12
  183. data/lib/ddtrace/transport/http.rb +15 -0
  184. data/lib/ddtrace/transport/http/adapters/net.rb +16 -2
  185. data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
  186. data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
  187. data/lib/ddtrace/transport/http/statistics.rb +14 -1
  188. data/lib/ddtrace/transport/response.rb +11 -0
  189. data/lib/ddtrace/transport/traces.rb +7 -2
  190. data/lib/ddtrace/utils.rb +7 -3
  191. data/lib/ddtrace/version.rb +1 -1
  192. data/lib/ddtrace/workers/async.rb +2 -2
  193. data/lib/ddtrace/workers/loop.rb +1 -1
  194. data/lib/ddtrace/workers/polling.rb +1 -1
  195. data/lib/ddtrace/workers/trace_writer.rb +3 -0
  196. data/lib/ddtrace/writer.rb +33 -12
  197. metadata +138 -2
@@ -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
@@ -1,6 +1,7 @@
1
1
  require 'ddtrace/contrib/analytics'
2
2
  require 'ddtrace/contrib/mongodb/ext'
3
3
  require 'ddtrace/contrib/mongodb/parsers'
4
+ require 'ddtrace/ext/integration'
4
5
 
5
6
  module Datadog
6
7
  module Contrib
@@ -24,6 +25,9 @@ module Datadog
24
25
  query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
25
26
  serialized_query = query.to_s
26
27
 
28
+ # Tag as an external peer service
29
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
30
+
27
31
  # Set analytics sample rate
28
32
  if analytics_enabled?
29
33
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
@@ -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
@@ -1,4 +1,5 @@
1
1
  require 'ddtrace/ext/app_types'
2
+ require 'ddtrace/ext/integration'
2
3
  require 'ddtrace/ext/net'
3
4
  require 'ddtrace/ext/sql'
4
5
  require 'ddtrace/contrib/analytics'
@@ -21,6 +22,9 @@ module Datadog
21
22
  span.service = datadog_pin.service
22
23
  span.span_type = Datadog::Ext::SQL::TYPE
23
24
 
25
+ # Tag as an external peer service
26
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
27
+
24
28
  # Set analytics sample rate
25
29
  Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
26
30
 
@@ -36,7 +40,7 @@ module Datadog
36
40
  Datadog.configuration[:mysql2][:service_name],
37
41
  app: Ext::APP,
38
42
  app_type: Datadog::Ext::AppTypes::DB,
39
- tracer: Datadog.configuration[:mysql2][:tracer]
43
+ tracer: -> { Datadog.configuration[:mysql2][:tracer] }
40
44
  )
41
45
  end
42
46
 
@@ -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
@@ -90,6 +90,9 @@ module Datadog
90
90
  set_nilable_tag!(span, :http_proxy, Ext::TAG_PROXY)
91
91
  set_nilable_tag!(span, :model_version, Ext::TAG_MODEL_VERSION)
92
92
 
93
+ # Tag as an external peer service
94
+ span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
95
+
93
96
  # Set analytics sample rate
94
97
  if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
95
98
  Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
@@ -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