ddtrace 1.19.0 → 1.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +93 -2
  3. data/LICENSE-3rdparty.csv +1 -1
  4. data/bin/ddprofrb +15 -0
  5. data/bin/ddtracerb +3 -1
  6. data/ext/{ddtrace_profiling_loader/ddtrace_profiling_loader.c → datadog_profiling_loader/datadog_profiling_loader.c} +2 -2
  7. data/ext/{ddtrace_profiling_loader → datadog_profiling_loader}/extconf.rb +3 -3
  8. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_cpu_and_wall_time_worker.c +237 -65
  9. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +422 -0
  10. data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h +101 -0
  11. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.c +92 -2
  12. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/extconf.rb +5 -2
  13. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/helpers.h +4 -0
  14. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/http_transport.c +10 -14
  15. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/native_extension_helpers.rb +4 -4
  16. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.c +14 -0
  17. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/private_vm_api_access.h +4 -0
  18. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/profiling.c +17 -1
  19. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.c +10 -0
  20. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/ruby_helpers.h +2 -0
  21. data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.h +2 -0
  22. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +2 -1
  23. data/lib/datadog/core/configuration/components.rb +5 -5
  24. data/lib/datadog/core/configuration/option.rb +1 -1
  25. data/lib/datadog/core/configuration/settings.rb +107 -46
  26. data/lib/datadog/core/diagnostics/environment_logger.rb +4 -3
  27. data/lib/datadog/core/environment/class_count.rb +6 -6
  28. data/lib/datadog/core/environment/git.rb +25 -0
  29. data/lib/datadog/core/environment/identity.rb +18 -48
  30. data/lib/datadog/core/git/ext.rb +2 -23
  31. data/lib/datadog/core/remote/component.rb +25 -12
  32. data/lib/datadog/core/remote/ext.rb +1 -0
  33. data/lib/datadog/core/remote/negotiation.rb +2 -2
  34. data/lib/datadog/core/remote/tie/tracing.rb +39 -0
  35. data/lib/datadog/core/remote/tie.rb +27 -0
  36. data/lib/datadog/core/remote/worker.rb +7 -4
  37. data/lib/datadog/core/transport/ext.rb +2 -0
  38. data/lib/datadog/core/utils/url.rb +25 -0
  39. data/lib/datadog/opentelemetry/sdk/propagator.rb +3 -2
  40. data/lib/datadog/opentelemetry.rb +3 -0
  41. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -2
  42. data/lib/datadog/profiling/collectors/info.rb +101 -0
  43. data/lib/datadog/profiling/component.rb +14 -30
  44. data/lib/datadog/profiling/exporter.rb +19 -5
  45. data/lib/datadog/profiling/ext.rb +2 -0
  46. data/lib/datadog/profiling/flush.rb +6 -3
  47. data/lib/datadog/profiling/http_transport.rb +5 -1
  48. data/lib/datadog/profiling/load_native_extension.rb +5 -5
  49. data/lib/datadog/profiling/native_extension.rb +1 -1
  50. data/lib/datadog/profiling/tag_builder.rb +5 -0
  51. data/lib/datadog/profiling/tasks/exec.rb +3 -3
  52. data/lib/datadog/profiling/tasks/help.rb +3 -3
  53. data/lib/datadog/profiling.rb +2 -2
  54. data/lib/datadog/tracing/configuration/ext.rb +0 -1
  55. data/lib/datadog/tracing/configuration/settings.rb +2 -1
  56. data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +1 -0
  57. data/lib/datadog/tracing/contrib/action_cable/ext.rb +1 -0
  58. data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +1 -0
  59. data/lib/datadog/tracing/contrib/action_mailer/ext.rb +1 -0
  60. data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +1 -0
  61. data/lib/datadog/tracing/contrib/action_pack/ext.rb +1 -0
  62. data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +1 -0
  63. data/lib/datadog/tracing/contrib/action_view/ext.rb +1 -0
  64. data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +1 -0
  65. data/lib/datadog/tracing/contrib/active_job/ext.rb +1 -0
  66. data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +1 -0
  67. data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +1 -0
  68. data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -0
  69. data/lib/datadog/tracing/contrib/active_record/ext.rb +1 -0
  70. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -0
  71. data/lib/datadog/tracing/contrib/active_support/ext.rb +1 -0
  72. data/lib/datadog/tracing/contrib/analytics.rb +0 -1
  73. data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -0
  74. data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
  75. data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +20 -0
  76. data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +11 -1
  77. data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -0
  78. data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
  79. data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +1 -0
  80. data/lib/datadog/tracing/contrib/delayed_job/ext.rb +1 -0
  81. data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -0
  82. data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +1 -0
  83. data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -0
  84. data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
  85. data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -0
  86. data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
  87. data/lib/datadog/tracing/contrib/extensions.rb +6 -2
  88. data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -0
  89. data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
  90. data/lib/datadog/tracing/contrib/faraday/middleware.rb +1 -1
  91. data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +1 -0
  92. data/lib/datadog/tracing/contrib/grape/endpoint.rb +5 -0
  93. data/lib/datadog/tracing/contrib/grape/ext.rb +1 -0
  94. data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +1 -0
  95. data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
  96. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -0
  97. data/lib/datadog/tracing/contrib/grpc/ext.rb +1 -0
  98. data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -0
  99. data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +2 -2
  100. data/lib/datadog/tracing/contrib/http/ext.rb +1 -0
  101. data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -0
  102. data/lib/datadog/tracing/contrib/httpclient/ext.rb +1 -0
  103. data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -0
  104. data/lib/datadog/tracing/contrib/httprb/ext.rb +1 -0
  105. data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +1 -0
  106. data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -0
  107. data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -0
  108. data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
  109. data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -0
  110. data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
  111. data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -0
  112. data/lib/datadog/tracing/contrib/opensearch/ext.rb +1 -0
  113. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +1 -0
  114. data/lib/datadog/tracing/contrib/pg/ext.rb +1 -0
  115. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +11 -4
  116. data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -0
  117. data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
  118. data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +1 -0
  119. data/lib/datadog/tracing/contrib/qless/ext.rb +1 -0
  120. data/lib/datadog/tracing/contrib/que/configuration/settings.rb +1 -0
  121. data/lib/datadog/tracing/contrib/que/ext.rb +1 -0
  122. data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -0
  123. data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -0
  124. data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +1 -0
  125. data/lib/datadog/tracing/contrib/rack/ext.rb +1 -0
  126. data/lib/datadog/tracing/contrib/rack/middlewares.rb +37 -6
  127. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -0
  128. data/lib/datadog/tracing/contrib/rails/ext.rb +1 -0
  129. data/lib/datadog/tracing/contrib/rails/patcher.rb +16 -0
  130. data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +1 -0
  131. data/lib/datadog/tracing/contrib/rake/ext.rb +1 -0
  132. data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -0
  133. data/lib/datadog/tracing/contrib/redis/ext.rb +1 -0
  134. data/lib/datadog/tracing/contrib/redis/instrumentation.rb +2 -2
  135. data/lib/datadog/tracing/contrib/redis/patcher.rb +34 -21
  136. data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +1 -0
  137. data/lib/datadog/tracing/contrib/resque/ext.rb +1 -0
  138. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -0
  139. data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
  140. data/lib/datadog/tracing/contrib/roda/configuration/settings.rb +1 -0
  141. data/lib/datadog/tracing/contrib/roda/ext.rb +1 -0
  142. data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +1 -0
  143. data/lib/datadog/tracing/contrib/sequel/ext.rb +1 -0
  144. data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +1 -0
  145. data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -0
  146. data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +1 -0
  147. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  148. data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +1 -0
  149. data/lib/datadog/tracing/contrib/sinatra/ext.rb +1 -0
  150. data/lib/datadog/tracing/contrib/sinatra/tracer.rb +6 -3
  151. data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +1 -0
  152. data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -0
  153. data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +1 -0
  154. data/lib/datadog/tracing/contrib/stripe/ext.rb +1 -0
  155. data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +1 -0
  156. data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +1 -0
  157. data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +58 -0
  158. data/lib/datadog/tracing/contrib/trilogy/ext.rb +27 -0
  159. data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +94 -0
  160. data/lib/datadog/tracing/contrib/trilogy/integration.rb +43 -0
  161. data/lib/datadog/tracing/contrib/trilogy/patcher.rb +31 -0
  162. data/lib/datadog/tracing/contrib.rb +1 -0
  163. data/lib/datadog/tracing/metadata/ext.rb +2 -0
  164. data/lib/datadog/tracing/trace_operation.rb +1 -2
  165. data/lib/datadog/tracing/transport/http.rb +1 -0
  166. data/lib/datadog/tracing/transport/trace_formatter.rb +31 -0
  167. data/lib/datadog/tracing.rb +8 -2
  168. data/lib/ddtrace/version.rb +1 -1
  169. metadata +62 -50
  170. data/ext/ddtrace_profiling_native_extension/pid_controller.c +0 -57
  171. data/ext/ddtrace_profiling_native_extension/pid_controller.h +0 -45
  172. data/lib/datadog/profiling/diagnostics/environment_logger.rb +0 -39
  173. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/NativeExtensionDesign.md +0 -0
  174. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id.h +0 -0
  175. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_from_pthread.c +0 -0
  176. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/clock_id_noop.c +0 -0
  177. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.c +0 -0
  178. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_dynamic_sampling_rate.h +0 -0
  179. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_gc_profiling_helper.c +0 -0
  180. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_gc_profiling_helper.h +0 -0
  181. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.c +0 -0
  182. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_idle_sampling_helper.h +0 -0
  183. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.c +0 -0
  184. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_stack.h +0 -0
  185. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/collectors_thread_context.h +0 -0
  186. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/heap_recorder.c +0 -0
  187. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/heap_recorder.h +0 -0
  188. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.c +0 -0
  189. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/libdatadog_helpers.h +0 -0
  190. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.c +0 -0
  191. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/setup_signal_handler.h +0 -0
  192. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.c +0 -0
  193. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/stack_recorder.h +0 -0
  194. /data/ext/{ddtrace_profiling_native_extension → datadog_profiling_native_extension}/time_helpers.c +0 -0
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../metadata/ext'
4
+ require_relative '../analytics'
5
+ require_relative 'ext'
6
+ require_relative '../ext'
7
+ require_relative '../propagation/sql_comment'
8
+ require_relative '../propagation/sql_comment/mode'
9
+
10
+ module Datadog
11
+ module Tracing
12
+ module Contrib
13
+ module Trilogy
14
+ # Trilogy patch module
15
+ module Instrumentation
16
+ def self.included(base)
17
+ base.prepend(InstanceMethods)
18
+ end
19
+
20
+ # Trilogy patch instance methods
21
+ module InstanceMethods
22
+ def query(sql)
23
+ service = Datadog.configuration_for(self, :service_name) || datadog_configuration[:service_name]
24
+
25
+ Tracing.trace(Ext::SPAN_QUERY, service: service) do |span, trace_op|
26
+ span.resource = sql
27
+ span.span_type = Tracing::Metadata::Ext::SQL::TYPE
28
+
29
+ if datadog_configuration[:peer_service]
30
+ span.set_tag(
31
+ Tracing::Metadata::Ext::TAG_PEER_SERVICE,
32
+ datadog_configuration[:peer_service]
33
+ )
34
+ end
35
+
36
+ # Tag original global service name if not used
37
+ if span.service != Datadog.configuration.service
38
+ span.set_tag(Tracing::Contrib::Ext::Metadata::TAG_BASE_SERVICE, Datadog.configuration.service)
39
+ end
40
+
41
+ span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
42
+ span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
43
+
44
+ span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
45
+ span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_QUERY)
46
+
47
+ span.set_tag(Tracing::Metadata::Ext::TAG_PEER_HOSTNAME, connection_options[:host])
48
+
49
+ # Set analytics sample rate
50
+ Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
51
+
52
+ span.set_tag(Ext::TAG_DB_NAME, connection_options[:database])
53
+ span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_HOST, connection_options[:host])
54
+ span.set_tag(Tracing::Metadata::Ext::NET::TAG_TARGET_PORT, connection_options[:port])
55
+
56
+ Contrib::SpanAttributeSchema.set_peer_service!(span, Ext::PEER_SERVICE_SOURCES)
57
+
58
+ propagation_mode = Contrib::Propagation::SqlComment::Mode.new(comment_propagation)
59
+
60
+ Contrib::Propagation::SqlComment.annotate!(span, propagation_mode)
61
+ sql = Contrib::Propagation::SqlComment.prepend_comment(
62
+ sql,
63
+ span,
64
+ trace_op,
65
+ propagation_mode
66
+ )
67
+
68
+ super(sql)
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def datadog_configuration
75
+ Datadog.configuration.tracing[:trilogy]
76
+ end
77
+
78
+ def analytics_enabled?
79
+ datadog_configuration[:analytics_enabled]
80
+ end
81
+
82
+ def analytics_sample_rate
83
+ datadog_configuration[:analytics_sample_rate]
84
+ end
85
+
86
+ def comment_propagation
87
+ datadog_configuration[:comment_propagation]
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../integration'
4
+ require_relative 'configuration/settings'
5
+ require_relative 'patcher'
6
+
7
+ module Datadog
8
+ module Tracing
9
+ module Contrib
10
+ module Trilogy
11
+ # Description of Trilogy integration
12
+ class Integration
13
+ include Contrib::Integration
14
+
15
+ MINIMUM_VERSION = Gem::Version.new('2.0.0')
16
+
17
+ # @public_api Changing the integration name or integration options can cause breaking changes
18
+ register_as :trilogy
19
+
20
+ def self.version
21
+ Gem.loaded_specs['trilogy'] && Gem.loaded_specs['trilogy'].version
22
+ end
23
+
24
+ def self.loaded?
25
+ !defined?(::Trilogy).nil?
26
+ end
27
+
28
+ def self.compatible?
29
+ super && version >= MINIMUM_VERSION
30
+ end
31
+
32
+ def new_configuration
33
+ Configuration::Settings.new
34
+ end
35
+
36
+ def patcher
37
+ Patcher
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../patcher'
4
+ require_relative 'instrumentation'
5
+
6
+ module Datadog
7
+ module Tracing
8
+ module Contrib
9
+ module Trilogy
10
+ # Patcher enables patching of 'trilogy' module.
11
+ module Patcher
12
+ include Contrib::Patcher
13
+
14
+ module_function
15
+
16
+ def target_version
17
+ Integration.version
18
+ end
19
+
20
+ def patch
21
+ patch_trilogy_client
22
+ end
23
+
24
+ def patch_trilogy_client
25
+ ::Trilogy.include(Instrumentation)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -79,3 +79,4 @@ require_relative 'contrib/sinatra/integration'
79
79
  require_relative 'contrib/sneakers/integration'
80
80
  require_relative 'contrib/stripe/integration'
81
81
  require_relative 'contrib/sucker_punch/integration'
82
+ require_relative 'contrib/trilogy/integration'
@@ -86,6 +86,8 @@ module Datadog
86
86
  TYPE_TEMPLATE = 'template'
87
87
  TAG_CLIENT_IP = 'http.client_ip'
88
88
  HEADER_USER_AGENT = 'User-Agent'
89
+ TAG_ROUTE = 'http.route'
90
+ TAG_ROUTE_PATH = 'http.route.path'
89
91
 
90
92
  # General header functionality
91
93
  module Headers
@@ -137,13 +137,12 @@ module Datadog
137
137
  end
138
138
 
139
139
  def keep!
140
- self.sampled = true
141
140
  self.sampling_priority = Sampling::Ext::Priority::USER_KEEP
142
141
  set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
142
+ self.sampled = true # Just in case the in-app sampler had decided to drop this span, we revert that decision.
143
143
  end
144
144
 
145
145
  def reject!
146
- self.sampled = false
147
146
  self.sampling_priority = Sampling::Ext::Priority::USER_REJECT
148
147
  set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
149
148
  end
@@ -71,6 +71,7 @@ module Datadog
71
71
  Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Datadog::Core::Environment::Ext::LANG_VERSION,
72
72
  Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER =>
73
73
  Datadog::Core::Environment::Ext::LANG_INTERPRETER,
74
+ Datadog::Core::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER_VENDOR => Core::Environment::Ext::LANG_ENGINE,
74
75
  Datadog::Core::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION =>
75
76
  Datadog::Core::Environment::Ext::TRACER_VERSION
76
77
  }.tap do |headers|
@@ -2,6 +2,8 @@
2
2
 
3
3
  require_relative '../../core/environment/identity'
4
4
  require_relative '../../core/environment/socket'
5
+ require_relative '../../core/environment/git'
6
+ require_relative '../../core/git/ext'
5
7
  require_relative '../../core/runtime/ext'
6
8
  require_relative '../metadata/ext'
7
9
  require_relative '../trace_segment'
@@ -13,6 +15,7 @@ module Datadog
13
15
  class TraceFormatter
14
16
  attr_reader \
15
17
  :root_span,
18
+ :first_span,
16
19
  :trace
17
20
 
18
21
  def self.format!(trace)
@@ -22,6 +25,9 @@ module Datadog
22
25
  def initialize(trace)
23
26
  @trace = trace
24
27
  @root_span = find_root_span(trace)
28
+ # source code integration uses the "first span in trace chunk" concept instead of root span
29
+ # see: https://github.com/DataDog/dd-trace-rb/pull/3424
30
+ @first_span = trace.spans.first
25
31
  end
26
32
 
27
33
  # Modifies a trace so suitable for transport
@@ -54,6 +60,11 @@ module Datadog
54
60
  tag_sampling_priority!
55
61
  tag_profiling_enabled!
56
62
 
63
+ if first_span
64
+ tag_git_repository_url!
65
+ tag_git_commit_sha!
66
+ end
67
+
57
68
  trace
58
69
  end
59
70
 
@@ -185,6 +196,18 @@ module Datadog
185
196
  )
186
197
  end
187
198
 
199
+ def tag_git_repository_url!
200
+ return if git_repository_url.nil?
201
+
202
+ first_span.set_tag(Core::Git::Ext::TAG_REPOSITORY_URL, git_repository_url)
203
+ end
204
+
205
+ def tag_git_commit_sha!
206
+ return if git_commit_sha.nil?
207
+
208
+ first_span.set_tag(Core::Git::Ext::TAG_COMMIT_SHA, git_commit_sha)
209
+ end
210
+
188
211
  private
189
212
 
190
213
  def partial?
@@ -203,6 +226,14 @@ module Datadog
203
226
  # when root span is not found, fall back to last span (partial flush)
204
227
  root_span || trace.spans.last
205
228
  end
229
+
230
+ def git_repository_url
231
+ Core::Environment::Git.git_repository_url
232
+ end
233
+
234
+ def git_commit_sha
235
+ Core::Environment::Git.git_commit_sha
236
+ end
206
237
  end
207
238
  end
208
239
  end
@@ -73,8 +73,14 @@ module Datadog
73
73
  # (see Datadog::Tracing::Tracer#active_correlation)
74
74
  # @public_api
75
75
  def correlation
76
- current_tracer = tracer
77
- return unless current_tracer
76
+ # We access this in this way as:
77
+ # * If the components have not been initialized, it doesn't make sense to initialize ddtrace just to say
78
+ # 'nil' here
79
+ # * It prevents recursive initialization attempts, see https://github.com/DataDog/dd-trace-rb/issues/3385
80
+ components = Datadog.send(:components, allow_initialization: false)
81
+ current_tracer = components.tracer if components
82
+
83
+ return Datadog::Tracing::Correlation::Identifier.new unless current_tracer
78
84
 
79
85
  current_tracer.active_correlation
80
86
  end
@@ -3,7 +3,7 @@
3
3
  module DDTrace
4
4
  module VERSION
5
5
  MAJOR = 1
6
- MINOR = 19
6
+ MINOR = 21
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ddtrace
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
11
+ date: 2024-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -58,28 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 5.0.0.1.0
61
+ version: 6.0.0.2.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 5.0.0.1.0
68
+ version: 6.0.0.2.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: datadog-ci
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.6.0
75
+ version: 0.8.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.6.0
82
+ version: 0.8.1
83
83
  description: |
84
84
  ddtrace is Datadog's tracing client for Ruby. It is used to trace requests
85
85
  as they flow across web servers, databases and microservices so that developers
@@ -88,9 +88,10 @@ email:
88
88
  - dev@datadoghq.com
89
89
  executables:
90
90
  - ddtracerb
91
+ - ddprofrb
91
92
  extensions:
92
- - ext/ddtrace_profiling_native_extension/extconf.rb
93
- - ext/ddtrace_profiling_loader/extconf.rb
93
+ - ext/datadog_profiling_native_extension/extconf.rb
94
+ - ext/datadog_profiling_loader/extconf.rb
94
95
  extra_rdoc_files: []
95
96
  files:
96
97
  - CHANGELOG.md
@@ -100,45 +101,46 @@ files:
100
101
  - LICENSE.BSD3
101
102
  - NOTICE
102
103
  - README.md
104
+ - bin/ddprofrb
103
105
  - bin/ddtracerb
104
- - ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c
105
- - ext/ddtrace_profiling_loader/extconf.rb
106
- - ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md
107
- - ext/ddtrace_profiling_native_extension/clock_id.h
108
- - ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c
109
- - ext/ddtrace_profiling_native_extension/clock_id_noop.c
110
- - ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c
111
- - ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c
112
- - ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h
113
- - ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.c
114
- - ext/ddtrace_profiling_native_extension/collectors_gc_profiling_helper.h
115
- - ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c
116
- - ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h
117
- - ext/ddtrace_profiling_native_extension/collectors_stack.c
118
- - ext/ddtrace_profiling_native_extension/collectors_stack.h
119
- - ext/ddtrace_profiling_native_extension/collectors_thread_context.c
120
- - ext/ddtrace_profiling_native_extension/collectors_thread_context.h
121
- - ext/ddtrace_profiling_native_extension/extconf.rb
122
- - ext/ddtrace_profiling_native_extension/heap_recorder.c
123
- - ext/ddtrace_profiling_native_extension/heap_recorder.h
124
- - ext/ddtrace_profiling_native_extension/helpers.h
125
- - ext/ddtrace_profiling_native_extension/http_transport.c
126
- - ext/ddtrace_profiling_native_extension/libdatadog_helpers.c
127
- - ext/ddtrace_profiling_native_extension/libdatadog_helpers.h
128
- - ext/ddtrace_profiling_native_extension/native_extension_helpers.rb
129
- - ext/ddtrace_profiling_native_extension/pid_controller.c
130
- - ext/ddtrace_profiling_native_extension/pid_controller.h
131
- - ext/ddtrace_profiling_native_extension/private_vm_api_access.c
132
- - ext/ddtrace_profiling_native_extension/private_vm_api_access.h
133
- - ext/ddtrace_profiling_native_extension/profiling.c
134
- - ext/ddtrace_profiling_native_extension/ruby_helpers.c
135
- - ext/ddtrace_profiling_native_extension/ruby_helpers.h
136
- - ext/ddtrace_profiling_native_extension/setup_signal_handler.c
137
- - ext/ddtrace_profiling_native_extension/setup_signal_handler.h
138
- - ext/ddtrace_profiling_native_extension/stack_recorder.c
139
- - ext/ddtrace_profiling_native_extension/stack_recorder.h
140
- - ext/ddtrace_profiling_native_extension/time_helpers.c
141
- - ext/ddtrace_profiling_native_extension/time_helpers.h
106
+ - ext/datadog_profiling_loader/datadog_profiling_loader.c
107
+ - ext/datadog_profiling_loader/extconf.rb
108
+ - ext/datadog_profiling_native_extension/NativeExtensionDesign.md
109
+ - ext/datadog_profiling_native_extension/clock_id.h
110
+ - ext/datadog_profiling_native_extension/clock_id_from_pthread.c
111
+ - ext/datadog_profiling_native_extension/clock_id_noop.c
112
+ - ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c
113
+ - ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c
114
+ - ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.h
115
+ - ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.c
116
+ - ext/datadog_profiling_native_extension/collectors_dynamic_sampling_rate.h
117
+ - ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.c
118
+ - ext/datadog_profiling_native_extension/collectors_gc_profiling_helper.h
119
+ - ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c
120
+ - ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.h
121
+ - ext/datadog_profiling_native_extension/collectors_stack.c
122
+ - ext/datadog_profiling_native_extension/collectors_stack.h
123
+ - ext/datadog_profiling_native_extension/collectors_thread_context.c
124
+ - ext/datadog_profiling_native_extension/collectors_thread_context.h
125
+ - ext/datadog_profiling_native_extension/extconf.rb
126
+ - ext/datadog_profiling_native_extension/heap_recorder.c
127
+ - ext/datadog_profiling_native_extension/heap_recorder.h
128
+ - ext/datadog_profiling_native_extension/helpers.h
129
+ - ext/datadog_profiling_native_extension/http_transport.c
130
+ - ext/datadog_profiling_native_extension/libdatadog_helpers.c
131
+ - ext/datadog_profiling_native_extension/libdatadog_helpers.h
132
+ - ext/datadog_profiling_native_extension/native_extension_helpers.rb
133
+ - ext/datadog_profiling_native_extension/private_vm_api_access.c
134
+ - ext/datadog_profiling_native_extension/private_vm_api_access.h
135
+ - ext/datadog_profiling_native_extension/profiling.c
136
+ - ext/datadog_profiling_native_extension/ruby_helpers.c
137
+ - ext/datadog_profiling_native_extension/ruby_helpers.h
138
+ - ext/datadog_profiling_native_extension/setup_signal_handler.c
139
+ - ext/datadog_profiling_native_extension/setup_signal_handler.h
140
+ - ext/datadog_profiling_native_extension/stack_recorder.c
141
+ - ext/datadog_profiling_native_extension/stack_recorder.h
142
+ - ext/datadog_profiling_native_extension/time_helpers.c
143
+ - ext/datadog_profiling_native_extension/time_helpers.h
142
144
  - lib/datadog/appsec.rb
143
145
  - lib/datadog/appsec/assets.rb
144
146
  - lib/datadog/appsec/assets/blocked.html
@@ -243,6 +245,7 @@ files:
243
245
  - lib/datadog/core/environment/execution.rb
244
246
  - lib/datadog/core/environment/ext.rb
245
247
  - lib/datadog/core/environment/gc.rb
248
+ - lib/datadog/core/environment/git.rb
246
249
  - lib/datadog/core/environment/identity.rb
247
250
  - lib/datadog/core/environment/platform.rb
248
251
  - lib/datadog/core/environment/socket.rb
@@ -276,6 +279,8 @@ files:
276
279
  - lib/datadog/core/remote/dispatcher.rb
277
280
  - lib/datadog/core/remote/ext.rb
278
281
  - lib/datadog/core/remote/negotiation.rb
282
+ - lib/datadog/core/remote/tie.rb
283
+ - lib/datadog/core/remote/tie/tracing.rb
279
284
  - lib/datadog/core/remote/transport/config.rb
280
285
  - lib/datadog/core/remote/transport/http.rb
281
286
  - lib/datadog/core/remote/transport/http/api.rb
@@ -334,6 +339,7 @@ files:
334
339
  - lib/datadog/core/utils/safe_dup.rb
335
340
  - lib/datadog/core/utils/sequence.rb
336
341
  - lib/datadog/core/utils/time.rb
342
+ - lib/datadog/core/utils/url.rb
337
343
  - lib/datadog/core/vendor/ipaddr.rb
338
344
  - lib/datadog/core/vendor/multipart-post/LICENSE
339
345
  - lib/datadog/core/vendor/multipart-post/multipart.rb
@@ -383,10 +389,10 @@ files:
383
389
  - lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb
384
390
  - lib/datadog/profiling/collectors/dynamic_sampling_rate.rb
385
391
  - lib/datadog/profiling/collectors/idle_sampling_helper.rb
392
+ - lib/datadog/profiling/collectors/info.rb
386
393
  - lib/datadog/profiling/collectors/stack.rb
387
394
  - lib/datadog/profiling/collectors/thread_context.rb
388
395
  - lib/datadog/profiling/component.rb
389
- - lib/datadog/profiling/diagnostics/environment_logger.rb
390
396
  - lib/datadog/profiling/exporter.rb
391
397
  - lib/datadog/profiling/ext.rb
392
398
  - lib/datadog/profiling/ext/forking.rb
@@ -513,6 +519,7 @@ files:
513
519
  - lib/datadog/tracing/contrib/aws/service/sqs.rb
514
520
  - lib/datadog/tracing/contrib/aws/service/states.rb
515
521
  - lib/datadog/tracing/contrib/aws/services.rb
522
+ - lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb
516
523
  - lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb
517
524
  - lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb
518
525
  - lib/datadog/tracing/contrib/concurrent_ruby/ext.rb
@@ -792,6 +799,11 @@ files:
792
799
  - lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb
793
800
  - lib/datadog/tracing/contrib/sucker_punch/integration.rb
794
801
  - lib/datadog/tracing/contrib/sucker_punch/patcher.rb
802
+ - lib/datadog/tracing/contrib/trilogy/configuration/settings.rb
803
+ - lib/datadog/tracing/contrib/trilogy/ext.rb
804
+ - lib/datadog/tracing/contrib/trilogy/instrumentation.rb
805
+ - lib/datadog/tracing/contrib/trilogy/integration.rb
806
+ - lib/datadog/tracing/contrib/trilogy/patcher.rb
795
807
  - lib/datadog/tracing/contrib/utils/database.rb
796
808
  - lib/datadog/tracing/contrib/utils/quantization/hash.rb
797
809
  - lib/datadog/tracing/contrib/utils/quantization/http.rb
@@ -877,7 +889,7 @@ licenses:
877
889
  metadata:
878
890
  allowed_push_host: https://rubygems.org
879
891
  changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/master/CHANGELOG.md
880
- post_install_message:
892
+ post_install_message:
881
893
  rdoc_options: []
882
894
  require_paths:
883
895
  - lib
@@ -896,7 +908,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
896
908
  version: 2.0.0
897
909
  requirements: []
898
910
  rubygems_version: 3.4.10
899
- signing_key:
911
+ signing_key:
900
912
  specification_version: 4
901
913
  summary: Datadog tracing code for your Ruby applications
902
914
  test_files: []
@@ -1,57 +0,0 @@
1
- /*
2
- * Copyright 2023 Datadog, Inc
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- // Originally imported from https://github.com/DataDog/java-profiler/blob/11fe6206c31a14c6e5134e8401eaec8b22c618d7/ddprof-lib/src/main/cpp/pidController.cpp
18
-
19
- #include "pid_controller.h"
20
-
21
- #include <math.h>
22
-
23
- inline static double computeAlpha(float cutoff) {
24
- if (cutoff <= 0)
25
- return 1;
26
- // α(fₙ) = cos(2πfₙ) - 1 + √( cos(2πfₙ)² - 4 cos(2πfₙ) + 3 )
27
- const double c = cos(2 * ((double) M_PI) * cutoff);
28
- return c - 1 + sqrt(c * c - 4 * c + 3);
29
- }
30
-
31
- void pid_controller_init(pid_controller *controller, u64 target_per_second, double proportional_gain, double integral_gain, double derivative_gain, int sampling_window, double cutoff_secs) {
32
- controller->_target = target_per_second * sampling_window;
33
- controller->_proportional_gain = proportional_gain;
34
- controller->_integral_gain = integral_gain * sampling_window;
35
- controller->_derivative_gain = derivative_gain / sampling_window;
36
- controller->_alpha = computeAlpha(sampling_window / cutoff_secs);
37
- controller->_avg_error= 0;
38
- controller->_integral_value = 0;
39
- }
40
-
41
- double pid_controller_compute(pid_controller *controller, u64 input, double time_delta_coefficient) {
42
- // time_delta_coefficient allows variable sampling window
43
- // the values are linearly scaled using that coefficient to reinterpret the given value within the expected sampling window
44
- double absolute_error = (((double) controller->_target) - ((double) input)) * time_delta_coefficient;
45
-
46
- double avg_error = (controller->_alpha * absolute_error) + ((1 - controller->_alpha) * controller->_avg_error);
47
- double derivative = avg_error - controller->_avg_error;
48
-
49
- // PID formula:
50
- // u[k] = Kp e[k] + Ki e_i[k] + Kd e_d[k], control signal
51
- double signal = controller->_proportional_gain * absolute_error + controller->_integral_gain * controller->_integral_value + controller->_derivative_gain * derivative;
52
-
53
- controller->_integral_value += absolute_error;
54
- controller->_avg_error = avg_error;
55
-
56
- return signal;
57
- }
@@ -1,45 +0,0 @@
1
- /*
2
- * Copyright 2023 Datadog, Inc
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- // Originally imported from https://github.com/DataDog/java-profiler/blob/11fe6206c31a14c6e5134e8401eaec8b22c618d7/ddprof-lib/src/main/cpp/pidController.h
18
-
19
- #ifndef _PIDCONTROLLER_H
20
- #define _PIDCONTROLLER_H
21
-
22
- // From arch.h in java-profiler
23
- typedef unsigned long long u64;
24
-
25
- /*
26
- * A simple implementation of a PID controller.
27
- * Heavily influenced by https://tttapa.github.io/Pages/Arduino/Control-Theory/Motor-Fader/PID-Cpp-Implementation.html
28
- */
29
-
30
- typedef struct {
31
- u64 _target;
32
- double _proportional_gain;
33
- double _derivative_gain;
34
- double _integral_gain;
35
- double _alpha;
36
-
37
- double _avg_error;
38
- long long _integral_value;
39
- } pid_controller;
40
-
41
- void pid_controller_init(pid_controller *controller, u64 target_per_second, double proportional_gain, double integral_gain, double derivative_gain, int sampling_window, double cutoff_secs);
42
-
43
- double pid_controller_compute(pid_controller *controller, u64 input, double time_delta_seconds);
44
-
45
- #endif