ddtrace 1.7.0 → 1.9.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 (182) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +100 -1
  3. data/README.md +2 -2
  4. data/ext/ddtrace_profiling_loader/extconf.rb +4 -1
  5. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +1 -1
  6. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +3 -2
  7. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +24 -50
  8. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +1 -1
  9. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +284 -74
  10. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
  11. data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
  12. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
  13. data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
  14. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +32 -32
  15. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +2 -2
  16. data/ext/ddtrace_profiling_native_extension/extconf.rb +21 -7
  17. data/ext/ddtrace_profiling_native_extension/helpers.h +5 -0
  18. data/ext/ddtrace_profiling_native_extension/http_transport.c +50 -49
  19. data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +5 -1
  20. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +42 -12
  21. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +116 -22
  22. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +9 -0
  23. data/ext/ddtrace_profiling_native_extension/profiling.c +205 -0
  24. data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +86 -0
  25. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +28 -6
  26. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +23 -4
  27. data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +4 -0
  28. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +47 -50
  29. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +4 -4
  30. data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
  31. data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
  32. data/lib/datadog/appsec/assets/waf_rules/recommended.json +75 -8
  33. data/lib/datadog/appsec/assets/waf_rules/risky.json +1 -1
  34. data/lib/datadog/appsec/assets/waf_rules/strict.json +1 -1
  35. data/lib/datadog/appsec/assets.rb +1 -1
  36. data/lib/datadog/appsec/configuration/settings.rb +35 -22
  37. data/lib/datadog/appsec/configuration.rb +4 -2
  38. data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
  39. data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -1
  40. data/lib/datadog/appsec/contrib/integration.rb +1 -1
  41. data/lib/datadog/appsec/contrib/patcher.rb +1 -1
  42. data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +1 -1
  43. data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
  44. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +1 -1
  45. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
  46. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
  47. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
  48. data/lib/datadog/appsec/contrib/rack/request.rb +1 -1
  49. data/lib/datadog/appsec/contrib/rack/response.rb +1 -1
  50. data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +1 -1
  51. data/lib/datadog/appsec/contrib/rails/ext.rb +1 -1
  52. data/lib/datadog/appsec/contrib/rails/framework.rb +1 -1
  53. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +1 -1
  54. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
  55. data/lib/datadog/appsec/contrib/rails/request.rb +1 -1
  56. data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
  57. data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +1 -1
  58. data/lib/datadog/appsec/contrib/sinatra/ext.rb +1 -1
  59. data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -1
  60. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +1 -1
  61. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +1 -1
  62. data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
  63. data/lib/datadog/appsec/event.rb +1 -1
  64. data/lib/datadog/appsec/extensions.rb +36 -26
  65. data/lib/datadog/appsec/instrumentation/gateway.rb +3 -3
  66. data/lib/datadog/appsec/processor.rb +15 -19
  67. data/lib/datadog/appsec/rate_limiter.rb +1 -1
  68. data/lib/datadog/appsec/reactive/address_hash.rb +1 -1
  69. data/lib/datadog/appsec/reactive/engine.rb +1 -1
  70. data/lib/datadog/appsec/reactive/operation.rb +2 -2
  71. data/lib/datadog/appsec/reactive/subscriber.rb +1 -1
  72. data/lib/datadog/appsec/response.rb +18 -9
  73. data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
  74. data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
  75. data/lib/datadog/appsec/utils/http.rb +9 -0
  76. data/lib/datadog/appsec/utils.rb +7 -0
  77. data/lib/datadog/appsec.rb +1 -1
  78. data/lib/datadog/ci/ext/environment.rb +57 -13
  79. data/lib/datadog/core/configuration/agent_settings_resolver.rb +2 -2
  80. data/lib/datadog/core/configuration/base.rb +3 -0
  81. data/lib/datadog/core/configuration/components.rb +27 -6
  82. data/lib/datadog/core/configuration/ext.rb +26 -0
  83. data/lib/datadog/core/configuration/option_definition.rb +11 -2
  84. data/lib/datadog/core/configuration/settings.rb +16 -341
  85. data/lib/datadog/core/diagnostics/environment_logger.rb +4 -3
  86. data/lib/datadog/core/diagnostics/health.rb +4 -22
  87. data/lib/datadog/core/environment/variable_helpers.rb +58 -10
  88. data/lib/datadog/core/metrics/client.rb +3 -2
  89. data/lib/datadog/core/metrics/ext.rb +0 -2
  90. data/lib/datadog/core/telemetry/collector.rb +1 -0
  91. data/lib/datadog/core/utils.rb +0 -21
  92. data/lib/datadog/core.rb +21 -1
  93. data/lib/datadog/kit/appsec/events.rb +75 -0
  94. data/lib/datadog/kit/enable_core_dumps.rb +1 -0
  95. data/lib/datadog/kit/identity.rb +8 -7
  96. data/lib/datadog/opentelemetry/api/context.rb +187 -0
  97. data/lib/datadog/opentelemetry/api/trace/span.rb +15 -0
  98. data/lib/datadog/opentelemetry/sdk/configurator.rb +38 -0
  99. data/lib/datadog/opentelemetry/sdk/id_generator.rb +27 -0
  100. data/lib/datadog/opentelemetry/sdk/propagator.rb +91 -0
  101. data/lib/datadog/opentelemetry/sdk/span_processor.rb +92 -0
  102. data/lib/datadog/opentelemetry.rb +48 -0
  103. data/lib/datadog/opentracer/distributed_headers.rb +2 -2
  104. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +16 -5
  105. data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
  106. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
  107. data/lib/datadog/profiling/stack_recorder.rb +14 -0
  108. data/lib/datadog/profiling.rb +2 -0
  109. data/lib/datadog/tracing/configuration/ext.rb +33 -4
  110. data/lib/datadog/tracing/configuration/settings.rb +433 -0
  111. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +4 -1
  112. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
  113. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +4 -1
  114. data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
  115. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +5 -1
  116. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
  117. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +6 -1
  118. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
  119. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +5 -1
  120. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
  121. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +5 -1
  122. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
  123. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +6 -1
  124. data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +9 -4
  125. data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
  126. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -1
  127. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +10 -3
  128. data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +9 -4
  129. data/lib/datadog/tracing/contrib/http/ext.rb +2 -0
  130. data/lib/datadog/tracing/contrib/http/instrumentation.rb +3 -6
  131. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -1
  132. data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -0
  133. data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -4
  134. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -1
  135. data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -0
  136. data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +3 -4
  137. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +5 -1
  138. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  139. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +4 -1
  140. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
  141. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +2 -2
  142. data/lib/datadog/tracing/contrib/patcher.rb +3 -2
  143. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +4 -1
  144. data/lib/datadog/tracing/contrib/pg/ext.rb +1 -0
  145. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +56 -33
  146. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +4 -1
  147. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
  148. data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +1 -0
  149. data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +10 -12
  150. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +4 -1
  151. data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
  152. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +30 -23
  153. data/lib/datadog/tracing/contrib/redis/integration.rb +34 -2
  154. data/lib/datadog/tracing/contrib/redis/patcher.rb +18 -14
  155. data/lib/datadog/tracing/contrib/redis/quantize.rb +12 -9
  156. data/lib/datadog/tracing/contrib/redis/tags.rb +4 -6
  157. data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +72 -0
  158. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +6 -1
  159. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
  160. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
  161. data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
  162. data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
  163. data/lib/datadog/tracing/contrib/stripe/patcher.rb +29 -0
  164. data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
  165. data/lib/datadog/tracing/contrib.rb +1 -0
  166. data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -6
  167. data/lib/datadog/tracing/diagnostics/health.rb +40 -0
  168. data/lib/datadog/tracing/distributed/{b3.rb → b3_multi.rb} +2 -2
  169. data/lib/datadog/tracing/distributed/helpers.rb +2 -1
  170. data/lib/datadog/tracing/distributed/none.rb +19 -0
  171. data/lib/datadog/tracing/distributed/trace_context.rb +378 -0
  172. data/lib/datadog/tracing/metadata/ext.rb +1 -1
  173. data/lib/datadog/tracing/metadata/tagging.rb +6 -0
  174. data/lib/datadog/tracing/sampling/priority_sampler.rb +11 -0
  175. data/lib/datadog/tracing/sampling/rate_sampler.rb +3 -3
  176. data/lib/datadog/tracing/span.rb +3 -19
  177. data/lib/datadog/tracing/span_operation.rb +5 -4
  178. data/lib/datadog/tracing/trace_digest.rb +85 -2
  179. data/lib/datadog/tracing/trace_operation.rb +13 -4
  180. data/lib/datadog/tracing/utils.rb +50 -0
  181. data/lib/ddtrace/version.rb +1 -1
  182. metadata +41 -9
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_AWS_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_AWS_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_AWS_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_AWS_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'aws'.freeze
@@ -26,7 +26,10 @@ module Datadog
26
26
  o.lazy
27
27
  end
28
28
 
29
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
29
+ option :service_name do |o|
30
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
31
+ o.lazy
32
+ end
30
33
  end
31
34
  end
32
35
  end
@@ -10,6 +10,7 @@ module Datadog
10
10
  ENV_ENABLED = 'DD_TRACE_DALLI_ENABLED'.freeze
11
11
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_DALLI_ANALYTICS_ENABLED'.freeze
12
12
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_DALLI_ANALYTICS_SAMPLE_RATE'.freeze
13
+ ENV_SERVICE_NAME = 'DD_TRACE_DALLI_SERVICE_NAME'.freeze
13
14
  QUANTIZE_MAX_CMD_LENGTH = 100
14
15
  DEFAULT_PEER_SERVICE_NAME = 'memcached'.freeze
15
16
  SPAN_COMMAND = 'memcached.command'.freeze
@@ -27,7 +27,11 @@ module Datadog
27
27
  end
28
28
 
29
29
  option :quantize, default: {}
30
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
30
+
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
31
35
  end
32
36
  end
33
37
  end
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_ELASTICSEARCH_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_ELASTICSEARCH_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ELASTICSEARCH_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'elasticsearch'.freeze
@@ -27,8 +27,13 @@ module Datadog
27
27
  end
28
28
 
29
29
  option :distributed_tracing, default: true
30
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
30
+
31
31
  option :split_by_domain, default: false
32
+
33
+ option :service_name do |o|
34
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
35
+ o.lazy
36
+ end
32
37
  end
33
38
  end
34
39
  end
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_ETHON_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_ETHON_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_ETHON_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_ETHON_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'ethon'.freeze
@@ -28,8 +28,12 @@ module Datadog
28
28
 
29
29
  option :distributed_tracing, default: true
30
30
  option :error_handler
31
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
32
31
  option :split_by_domain, default: false
32
+
33
+ option :service_name do |o|
34
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
35
+ o.lazy
36
+ end
33
37
  end
34
38
  end
35
39
  end
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_EXCON_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_EXCON_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_EXCON_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EXCON_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'excon'.freeze
@@ -32,8 +32,12 @@ module Datadog
32
32
 
33
33
  option :distributed_tracing, default: true
34
34
  option :error_handler, default: DEFAULT_ERROR_HANDLER
35
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
36
35
  option :split_by_domain, default: false
36
+
37
+ option :service_name do |o|
38
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
39
+ o.lazy
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_FARADAY_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_FARADAY_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_FARADAY_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'faraday'.freeze
@@ -28,7 +28,12 @@ module Datadog
28
28
  end
29
29
 
30
30
  option :distributed_tracing, default: true
31
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
31
+
32
+ option :service_name do |o|
33
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
34
+ o.lazy
35
+ end
36
+
32
37
  option :error_handler, default: Tracing::SpanOperation::Events::DEFAULT_ON_ERROR
33
38
  end
34
39
  end
@@ -2,10 +2,12 @@
2
2
  # typed: true
3
3
 
4
4
  require_relative 'fetcher'
5
- require_relative '../../../distributed/b3'
5
+ require_relative '../../../distributed/b3_multi'
6
6
  require_relative '../../../distributed/b3_single'
7
7
  require_relative '../../../distributed/datadog'
8
+ require_relative '../../../distributed/none'
8
9
  require_relative '../../../distributed/propagation'
10
+ require_relative '../../../distributed/trace_context'
9
11
 
10
12
  module Datadog
11
13
  module Tracing
@@ -18,12 +20,15 @@ module Datadog
18
20
  def initialize
19
21
  super(
20
22
  propagation_styles: {
21
- Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3 =>
22
- Tracing::Distributed::B3.new(fetcher: Fetcher),
23
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_MULTI_HEADER =>
24
+ Tracing::Distributed::B3Multi.new(fetcher: Fetcher),
23
25
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER =>
24
26
  Tracing::Distributed::B3Single.new(fetcher: Fetcher),
25
27
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG =>
26
- Tracing::Distributed::Datadog.new(fetcher: Fetcher)
28
+ Tracing::Distributed::Datadog.new(fetcher: Fetcher),
29
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
30
+ Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
31
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
27
32
  })
28
33
  end
29
34
 
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_GRPC_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_GRPC_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_GRPC_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'grpc'.freeze
@@ -27,7 +27,17 @@ module Datadog
27
27
  end
28
28
 
29
29
  option :distributed_tracing, default: true
30
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
30
+
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
35
+
36
+ option :error_status_codes do |o|
37
+ o.default { env_to_list(Ext::ENV_ERROR_STATUS_CODES, 400...600, comma_separated_only: false) }
38
+ o.lazy
39
+ end
40
+
31
41
  option :split_by_domain, default: false
32
42
  end
33
43
  end
@@ -8,13 +8,20 @@ module Datadog
8
8
  module Contrib
9
9
  module HTTP
10
10
  module Distributed
11
- # Retrieves Rack formatted headers from HTTP headers.
11
+ # Retrieves HTTP headers from carrier.
12
+ # Headers will also match if Rack-formatted:
13
+ # 'my-header' will match 'my-header' and 'HTTP_MY_HEADER'.
14
+ #
15
+ # In case both variants are present, the verbatim match will be used.
12
16
  class Fetcher < Tracing::Distributed::Fetcher
13
- # TODO: Don't assume Rack format.
14
- # Make distributed tracing headers apathetic.
15
17
  # DEV: Should we try to parse both verbatim an Rack-formatted headers,
16
18
  # DEV: given Rack-formatted is the most common format in Ruby?
17
19
  def [](name)
20
+ # Try to fetch with the plain key
21
+ value = super(name)
22
+ return value if value && !value.empty?
23
+
24
+ # If not found, try the Rack-formatted key
18
25
  rack_header = "HTTP-#{name}"
19
26
  rack_header.upcase!
20
27
  rack_header.tr!('-'.freeze, '_'.freeze)
@@ -3,9 +3,11 @@
3
3
 
4
4
  require_relative 'fetcher'
5
5
  require_relative '../../../distributed/propagation'
6
- require_relative '../../../distributed/b3'
6
+ require_relative '../../../distributed/b3_multi'
7
7
  require_relative '../../../distributed/b3_single'
8
8
  require_relative '../../../distributed/datadog'
9
+ require_relative '../../../distributed/none'
10
+ require_relative '../../../distributed/trace_context'
9
11
 
10
12
  module Datadog
11
13
  module Tracing
@@ -17,12 +19,15 @@ module Datadog
17
19
  def initialize
18
20
  super(
19
21
  propagation_styles: {
20
- Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3 =>
21
- Tracing::Distributed::B3.new(fetcher: Fetcher),
22
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_MULTI_HEADER =>
23
+ Tracing::Distributed::B3Multi.new(fetcher: Fetcher),
22
24
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_B3_SINGLE_HEADER =>
23
25
  Tracing::Distributed::B3Single.new(fetcher: Fetcher),
24
26
  Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_DATADOG =>
25
- Tracing::Distributed::Datadog.new(fetcher: Fetcher)
27
+ Tracing::Distributed::Datadog.new(fetcher: Fetcher),
28
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_TRACE_CONTEXT =>
29
+ Tracing::Distributed::TraceContext.new(fetcher: Fetcher),
30
+ Tracing::Configuration::Ext::Distributed::PROPAGATION_STYLE_NONE => Tracing::Distributed::None.new
26
31
  })
27
32
  end
28
33
  end
@@ -8,8 +8,10 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_HTTP_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_NET_HTTP_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTP_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
14
+ ENV_ERROR_STATUS_CODES = 'DD_TRACE_HTTP_ERROR_STATUS_CODES'.freeze
13
15
  DEFAULT_PEER_SERVICE_NAME = 'net/http'.freeze
14
16
  SPAN_REQUEST = 'http.request'.freeze
15
17
  TAG_COMPONENT = 'net/http'.freeze
@@ -58,7 +58,7 @@ module Datadog
58
58
  end
59
59
 
60
60
  # Add additional response specific tags to the span.
61
- annotate_span_with_response!(span, response)
61
+ annotate_span_with_response!(span, response, request_options)
62
62
 
63
63
  # Invoke hook, if set.
64
64
  unless Contrib::HTTP::Instrumentation.after_request.nil?
@@ -90,15 +90,12 @@ module Datadog
90
90
  set_analytics_sample_rate(span, request_options)
91
91
  end
92
92
 
93
- def annotate_span_with_response!(span, response)
93
+ def annotate_span_with_response!(span, response, request_options)
94
94
  return unless response && response.code
95
95
 
96
96
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.code)
97
97
 
98
- case response.code.to_i
99
- when 400...599
100
- span.set_error(response)
101
- end
98
+ span.set_error(response) if request_options[:error_status_codes].include? response.code.to_i
102
99
  end
103
100
 
104
101
  def annotate_span_with_error!(span, error)
@@ -27,7 +27,17 @@ module Datadog
27
27
  end
28
28
 
29
29
  option :distributed_tracing, default: true
30
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
30
+
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
35
+
36
+ option :error_status_codes do |o|
37
+ o.default { env_to_list(Ext::ENV_ERROR_STATUS_CODES, 400...600, comma_separated_only: false) }
38
+ o.lazy
39
+ end
40
+
31
41
  option :split_by_domain, default: false
32
42
  end
33
43
  end
@@ -8,8 +8,10 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_HTTPCLIENT_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_HTTPCLIENT_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTPCLIENT_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_HTTPCLIENT_ANALYTICS_SAMPLE_RATE'.freeze
14
+ ENV_ERROR_STATUS_CODES = 'DD_TRACE_HTTPCLIENT_ERROR_STATUS_CODES'.freeze
13
15
  DEFAULT_PEER_SERVICE_NAME = 'httpclient'.freeze
14
16
  SPAN_REQUEST = 'httpclient.request'.freeze
15
17
  TAG_COMPONENT = 'httpclient'.freeze
@@ -42,7 +42,7 @@ module Datadog
42
42
  end
43
43
 
44
44
  # Add additional response specific tags to the span.
45
- annotate_span_with_response!(span, res)
45
+ annotate_span_with_response!(span, res, request_options)
46
46
 
47
47
  res
48
48
  end
@@ -72,13 +72,12 @@ module Datadog
72
72
  set_analytics_sample_rate(span, req_options)
73
73
  end
74
74
 
75
- def annotate_span_with_response!(span, response)
75
+ def annotate_span_with_response!(span, response, request_options)
76
76
  return unless response && response.status
77
77
 
78
78
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.status)
79
79
 
80
- case response.status.to_i
81
- when 400...599
80
+ if request_options[:error_status_codes].include? response.code.to_i
82
81
  span.set_error(["Error #{response.status}", response.body])
83
82
  end
84
83
  end
@@ -27,7 +27,17 @@ module Datadog
27
27
  end
28
28
 
29
29
  option :distributed_tracing, default: true
30
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
30
+
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
35
+
36
+ option :error_status_codes do |o|
37
+ o.default { env_to_list(Ext::ENV_ERROR_STATUS_CODES, 400...600, comma_separated_only: false) }
38
+ o.lazy
39
+ end
40
+
31
41
  option :split_by_domain, default: false
32
42
  end
33
43
  end
@@ -8,8 +8,10 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_HTTPRB_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_HTTPRB_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_HTTPRB_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_EHTTPRB_ANALYTICS_SAMPLE_RATE'.freeze
14
+ ENV_ERROR_STATUS_CODES = 'DD_TRACE_HTTPCLIENT_ERROR_STATUS_CODES'.freeze
13
15
  DEFAULT_PEER_SERVICE_NAME = 'httprb'.freeze
14
16
  SPAN_REQUEST = 'httprb.request'.freeze
15
17
  TAG_COMPONENT = 'httprb'.freeze
@@ -42,7 +42,7 @@ module Datadog
42
42
  end
43
43
 
44
44
  # Add additional response specific tags to the span.
45
- annotate_span_with_response!(span, res)
45
+ annotate_span_with_response!(span, res, request_options)
46
46
 
47
47
  res
48
48
  end
@@ -81,13 +81,12 @@ module Datadog
81
81
  set_analytics_sample_rate(span, req_options)
82
82
  end
83
83
 
84
- def annotate_span_with_response!(span, response)
84
+ def annotate_span_with_response!(span, response, request_options)
85
85
  return unless response && response.code
86
86
 
87
87
  span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_STATUS_CODE, response.code)
88
88
 
89
- case response.code.to_i
90
- when 400...599
89
+ if request_options[:error_status_codes].include? response.code.to_i
91
90
  # https://github.com/DataDog/dd-trace-rb/issues/1116
92
91
  # parsing the response body message will alter downstream application behavior
93
92
  span.set_error(["Error #{response.code}", 'Error'])
@@ -29,7 +29,11 @@ module Datadog
29
29
  end
30
30
 
31
31
  option :quantize, default: DEFAULT_QUANTIZE
32
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
32
+
33
+ option :service_name do |o|
34
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
35
+ o.lazy
36
+ end
33
37
  end
34
38
  end
35
39
  end
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_MONGO_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_MONGO_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_MONGO_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'mongodb'.freeze
@@ -28,7 +28,10 @@ module Datadog
28
28
  o.lazy
29
29
  end
30
30
 
31
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
32
35
 
33
36
  option :comment_propagation do |o|
34
37
  o.default do
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_MYSQL2_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_MYSQL2_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_MYSQL2_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_MYSQL2_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'mysql2'.freeze
@@ -22,7 +22,7 @@ module Datadog
22
22
  def query(sql, options = {})
23
23
  service = Datadog.configuration_for(self, :service_name) || datadog_configuration[:service_name]
24
24
 
25
- Tracing.trace(Ext::SPAN_QUERY, service: service) do |span|
25
+ Tracing.trace(Ext::SPAN_QUERY, service: service) do |span, trace_op|
26
26
  span.resource = sql
27
27
  span.span_type = Tracing::Metadata::Ext::SQL::TYPE
28
28
 
@@ -46,7 +46,7 @@ module Datadog
46
46
  propagation_mode = Contrib::Propagation::SqlComment::Mode.new(comment_propagation)
47
47
 
48
48
  Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
49
- sql = Contrib::Propagation::SqlComment.prepend_comment(sql, span, propagation_mode)
49
+ sql = Contrib::Propagation::SqlComment.prepend_comment(sql, span, trace_op, propagation_mode)
50
50
 
51
51
  super(sql, options)
52
52
  end
@@ -66,14 +66,15 @@ module Datadog
66
66
  Datadog.health_metrics.error_instrumentation_patch(1, tags: tags)
67
67
  end
68
68
 
69
- private
70
-
71
69
  def default_tags
72
70
  ["patcher:#{patch_name}"].tap do |tags|
73
71
  tags << "target_version:#{target_version}" if respond_to?(:target_version) && !target_version.nil?
72
+ super.each { |t| tags << t } if defined?(super)
74
73
  end
75
74
  end
76
75
 
76
+ private
77
+
77
78
  def patch_only_once
78
79
  # NOTE: This is not thread-safe
79
80
  @patch_only_once ||= Core::Utils::OnlyOnce.new
@@ -28,7 +28,10 @@ module Datadog
28
28
  o.lazy
29
29
  end
30
30
 
31
- option :service_name, default: Ext::DEFAULT_PEER_SERVICE_NAME
31
+ option :service_name do |o|
32
+ o.default { ENV.fetch(Ext::ENV_SERVICE_NAME, Ext::DEFAULT_PEER_SERVICE_NAME) }
33
+ o.lazy
34
+ end
32
35
 
33
36
  option :comment_propagation do |o|
34
37
  o.default do
@@ -8,6 +8,7 @@ module Datadog
8
8
  # @public_api Changing resource names, tag names, or environment variables creates breaking changes.
9
9
  module Ext
10
10
  ENV_ENABLED = 'DD_TRACE_PG_ENABLED'.freeze
11
+ ENV_SERVICE_NAME = 'DD_TRACE_PG_SERVICE_NAME'.freeze
11
12
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_PG_ANALYTICS_ENABLED'.freeze
12
13
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_PG_ANALYTICS_SAMPLE_RATE'.freeze
13
14
  DEFAULT_PEER_SERVICE_NAME = 'pg'.freeze