datadog 2.36.0 → 2.38.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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +74 -1
  3. data/ext/datadog_profiling_native_extension/clock_id_from_mach.c +5 -12
  4. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +29 -18
  5. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +17 -3
  6. data/ext/datadog_profiling_native_extension/collectors_stack.c +19 -24
  7. data/ext/datadog_profiling_native_extension/collectors_stack.h +0 -1
  8. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +348 -213
  9. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -0
  10. data/ext/datadog_profiling_native_extension/extconf.rb +11 -3
  11. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +5 -0
  12. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +2 -0
  13. data/ext/datadog_profiling_native_extension/ruby_helpers.c +7 -0
  14. data/ext/datadog_profiling_native_extension/time_helpers.h +12 -7
  15. data/ext/libdatadog_api/di.c +76 -0
  16. data/ext/libdatadog_api/extconf.rb +6 -0
  17. data/ext/libdatadog_extconf_helpers.rb +1 -1
  18. data/lib/datadog/ai_guard/api_client.rb +6 -4
  19. data/lib/datadog/appsec/api_security/route_extractor.rb +7 -4
  20. data/lib/datadog/appsec/configuration.rb +6 -0
  21. data/lib/datadog/appsec/context.rb +4 -2
  22. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +59 -4
  23. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +59 -5
  24. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +1 -1
  25. data/lib/datadog/appsec/contrib/rack/gateway/request.rb +5 -0
  26. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +4 -0
  27. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +4 -17
  28. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +21 -0
  29. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +7 -1
  30. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +60 -7
  31. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +4 -0
  32. data/lib/datadog/appsec/ext.rb +1 -0
  33. data/lib/datadog/appsec/metrics/collector.rb +18 -1
  34. data/lib/datadog/appsec/metrics/exporter.rb +9 -3
  35. data/lib/datadog/appsec/remote.rb +9 -3
  36. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
  37. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
  38. data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
  39. data/lib/datadog/appsec/route_normalizer.rb +80 -0
  40. data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
  41. data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
  42. data/lib/datadog/core/configuration/components.rb +82 -2
  43. data/lib/datadog/core/configuration/components_state.rb +6 -1
  44. data/lib/datadog/core/configuration/settings.rb +4 -7
  45. data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
  46. data/lib/datadog/core/evp.rb +11 -0
  47. data/lib/datadog/core/knuth_sampler.rb +3 -1
  48. data/lib/datadog/core/metrics/client.rb +1 -1
  49. data/lib/datadog/core/remote/client/capabilities.rb +34 -7
  50. data/lib/datadog/core/telemetry/event/app_started.rb +8 -1
  51. data/lib/datadog/core/transport/http/builder.rb +1 -1
  52. data/lib/datadog/core/utils/at_fork_monkey_patch.rb +1 -1
  53. data/lib/datadog/core/utils/time.rb +5 -1
  54. data/lib/datadog/di/base.rb +3 -1
  55. data/lib/datadog/di/boot.rb +3 -0
  56. data/lib/datadog/di/capture_expression.rb +21 -0
  57. data/lib/datadog/di/capture_expression_evaluator.rb +71 -0
  58. data/lib/datadog/di/capture_limits.rb +41 -0
  59. data/lib/datadog/di/code_tracker.rb +5 -2
  60. data/lib/datadog/di/component.rb +112 -38
  61. data/lib/datadog/di/configuration.rb +6 -0
  62. data/lib/datadog/di/context.rb +9 -3
  63. data/lib/datadog/di/el/compiler.rb +1 -1
  64. data/lib/datadog/di/error.rb +10 -0
  65. data/lib/datadog/di/fatal_exceptions.rb +26 -0
  66. data/lib/datadog/di/instrumenter.rb +412 -165
  67. data/lib/datadog/di/probe.rb +61 -2
  68. data/lib/datadog/di/probe_builder.rb +83 -1
  69. data/lib/datadog/di/probe_file_loader.rb +8 -3
  70. data/lib/datadog/di/probe_manager.rb +67 -9
  71. data/lib/datadog/di/probe_notification_builder.rb +52 -8
  72. data/lib/datadog/di/probe_notifier_worker.rb +52 -32
  73. data/lib/datadog/di/redactor.rb +16 -1
  74. data/lib/datadog/di/remote.rb +176 -15
  75. data/lib/datadog/di/serializer.rb +34 -15
  76. data/lib/datadog/di/transport/input.rb +8 -4
  77. data/lib/datadog/di.rb +63 -0
  78. data/lib/datadog/kit/appsec/events/v2.rb +60 -2
  79. data/lib/datadog/open_feature/component.rb +29 -6
  80. data/lib/datadog/open_feature/configuration.rb +8 -0
  81. data/lib/datadog/open_feature/ext.rb +2 -0
  82. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
  83. data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
  84. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +101 -0
  85. data/lib/datadog/open_feature/hooks/{flag_eval_hook.rb → flag_eval_metrics_hook.rb} +1 -1
  86. data/lib/datadog/open_feature/native_evaluator.rb +22 -0
  87. data/lib/datadog/open_feature/provider.rb +59 -27
  88. data/lib/datadog/open_feature/transport.rb +55 -1
  89. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +5 -12
  90. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +4 -11
  91. data/lib/datadog/opentelemetry/sdk.rb +19 -0
  92. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -1
  93. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -3
  94. data/lib/datadog/profiling/collectors/thread_context.rb +9 -1
  95. data/lib/datadog/profiling/component.rb +17 -0
  96. data/lib/datadog/symbol_database/component.rb +164 -47
  97. data/lib/datadog/symbol_database/configuration.rb +12 -4
  98. data/lib/datadog/symbol_database/extensions.rb +19 -0
  99. data/lib/datadog/symbol_database/extractor.rb +124 -87
  100. data/lib/datadog/symbol_database/file_hash.rb +3 -1
  101. data/lib/datadog/symbol_database/remote.rb +8 -3
  102. data/lib/datadog/symbol_database/scope_batcher.rb +7 -3
  103. data/lib/datadog/symbol_database/uploader.rb +9 -2
  104. data/lib/datadog/symbol_database.rb +22 -0
  105. data/lib/datadog/tracing/contrib/active_job/data_streams.rb +62 -0
  106. data/lib/datadog/tracing/contrib/active_job/patcher.rb +12 -0
  107. data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -3
  108. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +12 -12
  109. data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
  110. data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
  111. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
  112. data/lib/datadog/tracing/contrib/sinatra/framework.rb +1 -1
  113. data/lib/datadog/tracing/distributed/baggage.rb +2 -1
  114. data/lib/datadog/tracing/ext.rb +9 -0
  115. data/lib/datadog/tracing/remote.rb +34 -3
  116. data/lib/datadog/tracing/transport/trace_formatter.rb +1 -1
  117. data/lib/datadog/version.rb +1 -1
  118. data/lib/datadog.rb +1 -0
  119. metadata +25 -8
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../data_streams'
4
+ require_relative 'ext'
5
+
6
+ module Datadog
7
+ module Tracing
8
+ module Contrib
9
+ module ActiveJob
10
+ # Propagates Data Streams Monitoring pathway context through the serialized
11
+ # job payload, allowing produce (enqueue) and consume (perform) checkpoints
12
+ # to be connected across the process boundary.
13
+ #
14
+ # The DSM calls are rescued in isolation so a checkpoint failure can never
15
+ # break a job, while a genuine error raised by the underlying serialization
16
+ # still propagates.
17
+ #
18
+ # Only prepended on ActiveJob 5.0+, where `serialize`/`deserialize` are instance
19
+ # methods the framework routes through. ActiveJob 4.2 deserializes via a class
20
+ # method, so the pathway cannot be propagated there.
21
+ module DataStreams
22
+ def serialize
23
+ job_data = super
24
+ return job_data unless Datadog::DataStreams.enabled?
25
+
26
+ begin
27
+ Datadog::DataStreams.set_produce_checkpoint(
28
+ type: Ext::TAG_COMPONENT,
29
+ destination: queue_name,
30
+ auto_instrumentation: true
31
+ ) do |key, value|
32
+ job_data[key] = value
33
+ end
34
+ rescue => e
35
+ Datadog.logger.debug { "Error setting DSM produce checkpoint: #{e.class}: #{e.message}" }
36
+ end
37
+
38
+ job_data
39
+ end
40
+
41
+ def deserialize(job_data)
42
+ super
43
+
44
+ return unless Datadog::DataStreams.enabled?
45
+
46
+ begin
47
+ Datadog::DataStreams.set_consume_checkpoint(
48
+ type: Ext::TAG_COMPONENT,
49
+ source: queue_name,
50
+ auto_instrumentation: true
51
+ ) do |key|
52
+ job_data[key]
53
+ end
54
+ rescue => e
55
+ Datadog.logger.debug { "Error setting DSM consume checkpoint: #{e.class}: #{e.message}" }
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../patcher'
4
+ require_relative 'data_streams'
4
5
  require_relative 'ext'
5
6
  require_relative 'events'
6
7
  require_relative 'log_injection'
@@ -22,6 +23,7 @@ module Datadog
22
23
  def patch
23
24
  Events.subscribe!
24
25
  inject_log_correlation
26
+ inject_data_streams
25
27
  end
26
28
 
27
29
  def inject_log_correlation
@@ -33,6 +35,16 @@ module Datadog
33
35
  end
34
36
  end
35
37
  end
38
+
39
+ def inject_data_streams
40
+ # ActiveJob 4.2 deserializes jobs through a class method rather than the
41
+ # instance method, so the DSM pathway can only be propagated on 5.0+.
42
+ return if ::ActiveJob.gem_version < Gem::Version.new('5.0.0')
43
+
44
+ ::ActiveSupport.on_load(:active_job) do
45
+ prepend DataStreams
46
+ end
47
+ end
36
48
  end
37
49
  end
38
50
  end
@@ -18,10 +18,9 @@ module Datadog
18
18
 
19
19
  def supported?
20
20
  Gem.loaded_specs['active_model_serializers'] \
21
- && (
22
- Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.9') \
21
+ &&
22
+ Gem.loaded_specs['active_model_serializers'].version >= Gem::Version.new('0.9') \
23
23
  && Gem.loaded_specs['active_model_serializers'].version < Gem::Version.new('0.10')
24
- )
25
24
  end
26
25
 
27
26
  def event_name
@@ -28,19 +28,19 @@ module Datadog
28
28
  end
29
29
  end
30
30
 
31
- def exec_params(sql, params, *args, &block)
31
+ def exec_params(sql, *args, &block)
32
32
  return super unless enabled?
33
33
 
34
34
  trace(Ext::SPAN_EXEC_PARAMS, sql: sql, block: block) do |sql_statement, wrapped_block|
35
- super(sql_statement, params, *args, &wrapped_block)
35
+ super(sql_statement, *args, &wrapped_block)
36
36
  end
37
37
  end
38
38
 
39
- def exec_prepared(statement_name, params, *args, &block)
39
+ def exec_prepared(statement_name, *args, &block)
40
40
  return super unless enabled?
41
41
 
42
42
  trace(Ext::SPAN_EXEC_PREPARED, statement_name: statement_name, block: block) do |_, wrapped_block|
43
- super(statement_name, params, *args, &wrapped_block)
43
+ super(statement_name, *args, &wrapped_block)
44
44
  end
45
45
  end
46
46
 
@@ -54,20 +54,20 @@ module Datadog
54
54
  end
55
55
 
56
56
  # async_exec_params is an alias to exec_params
57
- def async_exec_params(sql, params, *args, &block)
57
+ def async_exec_params(sql, *args, &block)
58
58
  return super unless enabled?
59
59
 
60
60
  trace(Ext::SPAN_ASYNC_EXEC_PARAMS, sql: sql, block: block) do |sql_statement, wrapped_block|
61
- super(sql_statement, params, *args, &wrapped_block)
61
+ super(sql_statement, *args, &wrapped_block)
62
62
  end
63
63
  end
64
64
 
65
65
  # async_exec_prepared is an alias to exec_prepared
66
- def async_exec_prepared(statement_name, params, *args, &block)
66
+ def async_exec_prepared(statement_name, *args, &block)
67
67
  return super unless enabled?
68
68
 
69
69
  trace(Ext::SPAN_ASYNC_EXEC_PREPARED, statement_name: statement_name, block: block) do |_, wrapped_block|
70
- super(statement_name, params, *args, &wrapped_block)
70
+ super(statement_name, *args, &wrapped_block)
71
71
  end
72
72
  end
73
73
 
@@ -79,19 +79,19 @@ module Datadog
79
79
  end
80
80
  end
81
81
 
82
- def sync_exec_params(sql, params, *args, &block)
82
+ def sync_exec_params(sql, *args, &block)
83
83
  return super unless enabled?
84
84
 
85
85
  trace(Ext::SPAN_SYNC_EXEC_PARAMS, sql: sql, block: block) do |sql_statement, wrapped_block|
86
- super(sql_statement, params, *args, &wrapped_block)
86
+ super(sql_statement, *args, &wrapped_block)
87
87
  end
88
88
  end
89
89
 
90
- def sync_exec_prepared(statement_name, params, *args, &block)
90
+ def sync_exec_prepared(statement_name, *args, &block)
91
91
  return super unless enabled?
92
92
 
93
93
  trace(Ext::SPAN_SYNC_EXEC_PREPARED, statement_name: statement_name, block: block) do |_, wrapped_block|
94
- super(statement_name, params, *args, &wrapped_block)
94
+ super(statement_name, *args, &wrapped_block)
95
95
  end
96
96
  end
97
97
 
@@ -56,7 +56,7 @@ module Datadog
56
56
  end
57
57
  end
58
58
 
59
- following = (middleware.instance_variable_get('@app') if middleware.instance_variable_defined?('@app'))
59
+ following = (middleware.instance_variable_get(:@app) if middleware.instance_variable_defined?(:@app))
60
60
 
61
61
  retain_middleware_name(following)
62
62
  end
@@ -34,8 +34,8 @@ module Datadog
34
34
 
35
35
  def parse_opts(sql, opts, db_opts, dataset = nil)
36
36
  # Prepared statements don't provide their sql query in the +sql+ parameter.
37
- if !sql.is_a?(String) && (dataset&.respond_to?(:prepared_sql) &&
38
- (resolved_sql = dataset.prepared_sql))
37
+ if !sql.is_a?(String) && dataset&.respond_to?(:prepared_sql) &&
38
+ (resolved_sql = dataset.prepared_sql)
39
39
  # The dataset contains the resolved SQL query and prepared statement name.
40
40
  prepared_name = dataset.prepared_statement_name
41
41
  sql = resolved_sql
@@ -69,7 +69,7 @@ module Datadog
69
69
 
70
70
  args = job['args']
71
71
  if args && !args.empty?
72
- span.set_tag(Ext::TAG_JOB_ARGS, Contrib::Utils::Quantization::HashFormatter.format(args, (@quantize[:args] || {})))
72
+ span.set_tag(Ext::TAG_JOB_ARGS, Contrib::Utils::Quantization::HashFormatter.format(args, @quantize[:args] || {}))
73
73
  end
74
74
 
75
75
  yield
@@ -81,7 +81,7 @@ module Datadog
81
81
  # The block gets passed prepared arguments for the caller to decide
82
82
  # how to insert.
83
83
  def self.insert_middleware(builder, middleware, args, block)
84
- use = builder.instance_variable_get('@use')
84
+ use = builder.instance_variable_get(:@use)
85
85
  wrapped = wrap_middleware(middleware, *args, &block)
86
86
 
87
87
  # Makes the insert idempotent
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../ext'
3
4
  require_relative '../metadata/ext'
4
5
  require_relative '../trace_digest'
5
6
  require_relative 'datadog_tags_codec'
@@ -243,7 +244,7 @@ module Datadog
243
244
  # Record telemetry metrics for baggage operations
244
245
  def record_telemetry_metric(metric_name, value, tags)
245
246
  telemetry = ::Datadog.send(:components).telemetry
246
- telemetry.inc('instrumentation_telemetry_data.tracers', metric_name, value, tags: tags)
247
+ telemetry.inc(Tracing::Ext::TELEMETRY_METRICS_NAMESPACE, metric_name, value, tags: tags)
247
248
  end
248
249
  end
249
250
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Datadog
4
+ module Tracing
5
+ module Ext
6
+ TELEMETRY_METRICS_NAMESPACE = 'tracers'
7
+ end
8
+ end
9
+ end
@@ -15,6 +15,9 @@ module Datadog
15
15
  1 << 13, # APM_TRACING_LOGS_INJECTION: Dynamic trace logs injection configuration
16
16
  1 << 14, # APM_TRACING_HTTP_HEADER_TAGS: Dynamic trace HTTP header tags configuration
17
17
  1 << 29, # APM_TRACING_SAMPLE_RULES: Dynamic trace sampling rules configuration
18
+ # APM_TRACING_ENABLE_DYNAMIC_INSTRUMENTATION (bit 38) is declared in
19
+ # DI::Remote.capabilities, not here, so it is registered only when DI
20
+ # is not explicitly disabled and the runtime supports DI.
18
21
  ].freeze
19
22
 
20
23
  def products
@@ -25,7 +28,7 @@ module Datadog
25
28
  CAPABILITIES
26
29
  end
27
30
 
28
- def process_config(config, content)
31
+ def process_config(config, content, repository = nil)
29
32
  lib_config = config['lib_config']
30
33
 
31
34
  env_vars = Datadog::Tracing::Configuration::Dynamic::OPTIONS.map do |name, env_var, option|
@@ -39,9 +42,37 @@ module Datadog
39
42
  [env_var, value]
40
43
  end
41
44
 
45
+ if (di_enabled = lib_config['dynamic_instrumentation_enabled']) != nil # rubocop:disable Style/NonNilCheck
46
+ # repository is forwarded so that an enable signal can reconcile DI
47
+ # against probes delivered in an earlier poll while DI was stopped
48
+ # (see Datadog::DI::Remote.handle_rc_enablement).
49
+ Datadog::DI::Remote.handle_rc_enablement(di_enabled, repository)
50
+
51
+ if di_enabled
52
+ # DI was just (implicitly) enabled. A Symbol Database upload signal
53
+ # received in an earlier poll while DI was inactive was deferred by
54
+ # the component's DI-active gate; re-attempt it now. Mirrors the DI
55
+ # probe replay in handle_rc_enablement above. allow_initialization:
56
+ # false because this runs on the remote-config worker thread.
57
+ Datadog.send(:components, allow_initialization: false)&.symbol_database&.resume_pending_upload
58
+ else
59
+ # DI was disabled via remote configuration. In the nil-default
60
+ # (follows-DI) case, stop Symbol Database too so its TracePoint and
61
+ # scheduler don't keep uploading while DI is off. An explicit
62
+ # symbol_database.enabled = true is independent and keeps running.
63
+ Datadog.send(:components, allow_initialization: false)&.symbol_database&.stop_for_di_disable
64
+ end
65
+ end
66
+
42
67
  content.applied
43
68
 
44
- Datadog.send(:components).telemetry.client_configuration_change!(env_vars)
69
+ # allow_initialization: false because process_config runs on the
70
+ # remote-config worker thread. If components haven't been built yet
71
+ # (e.g. during a teardown/reset window), the default `true` would
72
+ # synchronously build the entire component tree from this thread.
73
+ # The &. chain matches the pattern used by DI::Remote.handle_rc_enablement
74
+ # in the same dispatch path.
75
+ Datadog.send(:components, allow_initialization: false)&.telemetry&.client_configuration_change!(env_vars)
45
76
  rescue => e
46
77
  content.errored("#{e.class}: #{e.message}: #{Array(e.backtrace).join("\n")}")
47
78
  end
@@ -55,7 +86,7 @@ module Datadog
55
86
  case content.path.product
56
87
  when PRODUCT
57
88
  config = parse_content(content)
58
- process_config(config, content)
89
+ process_config(config, content, repository)
59
90
  end
60
91
  end
61
92
  end
@@ -117,7 +117,7 @@ module Datadog
117
117
 
118
118
  root_span.set_tag(
119
119
  Tracing::Metadata::Ext::Distributed::TAG_KNUTH_SAMPLING_RATE,
120
- format('%.6f', (rate * 1e6).round / 1e6.to_f).sub(/\.?0+\z/, '')
120
+ format('%.6f', (rate * 1e6).round / 1e6).sub(/\.?0+\z/, '')
121
121
  )
122
122
  end
123
123
 
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 36
6
+ MINOR = 38
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
data/lib/datadog.rb CHANGED
@@ -12,6 +12,7 @@ require_relative 'datadog/profiling'
12
12
  require_relative 'datadog/ai_guard'
13
13
  require_relative 'datadog/appsec'
14
14
  require_relative 'datadog/di'
15
+ require_relative 'datadog/symbol_database/extensions'
15
16
  require_relative 'datadog/data_streams'
16
17
  require_relative 'datadog/open_feature'
17
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.36.0
4
+ version: 2.38.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '3.5'
33
33
  - - ">="
34
34
  - !ruby/object:Gem::Version
35
- version: 3.5.2
35
+ version: 3.5.3
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  version: '3.5'
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: 3.5.2
45
+ version: 3.5.3
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: libddwaf
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -63,14 +63,14 @@ dependencies:
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 35.0.0.1.0
66
+ version: 36.0.0.1.0
67
67
  type: :runtime
68
68
  prerelease: false
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: 35.0.0.1.0
73
+ version: 36.0.0.1.0
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: logger
76
76
  requirement: !ruby/object:Gem::Requirement
@@ -316,6 +316,10 @@ files:
316
316
  - lib/datadog/appsec/rate_limiter.rb
317
317
  - lib/datadog/appsec/remote.rb
318
318
  - lib/datadog/appsec/response.rb
319
+ - lib/datadog/appsec/route_normalizer.rb
320
+ - lib/datadog/appsec/route_normalizer/rails_route_pattern.rb
321
+ - lib/datadog/appsec/route_normalizer/route_pattern.rb
322
+ - lib/datadog/appsec/route_normalizer/route_text.rb
319
323
  - lib/datadog/appsec/sample_rate.rb
320
324
  - lib/datadog/appsec/security_engine.rb
321
325
  - lib/datadog/appsec/security_engine/engine.rb
@@ -328,6 +332,7 @@ files:
328
332
  - lib/datadog/appsec/utils/hash_coercion.rb
329
333
  - lib/datadog/appsec/utils/http.rb
330
334
  - lib/datadog/appsec/utils/http/body.rb
335
+ - lib/datadog/appsec/utils/http/body_reader.rb
331
336
  - lib/datadog/appsec/utils/http/media_range.rb
332
337
  - lib/datadog/appsec/utils/http/media_type.rb
333
338
  - lib/datadog/appsec/utils/http/url_encoded.rb
@@ -380,6 +385,7 @@ files:
380
385
  - lib/datadog/core/environment/vm_cache.rb
381
386
  - lib/datadog/core/environment/yjit.rb
382
387
  - lib/datadog/core/error.rb
388
+ - lib/datadog/core/evp.rb
383
389
  - lib/datadog/core/extensions.rb
384
390
  - lib/datadog/core/feature_flags.rb
385
391
  - lib/datadog/core/git/ext.rb
@@ -514,6 +520,9 @@ files:
514
520
  - lib/datadog/di.rb
515
521
  - lib/datadog/di/base.rb
516
522
  - lib/datadog/di/boot.rb
523
+ - lib/datadog/di/capture_expression.rb
524
+ - lib/datadog/di/capture_expression_evaluator.rb
525
+ - lib/datadog/di/capture_limits.rb
517
526
  - lib/datadog/di/code_tracker.rb
518
527
  - lib/datadog/di/component.rb
519
528
  - lib/datadog/di/configuration.rb
@@ -527,6 +536,7 @@ files:
527
536
  - lib/datadog/di/el/expression.rb
528
537
  - lib/datadog/di/error.rb
529
538
  - lib/datadog/di/extensions.rb
539
+ - lib/datadog/di/fatal_exceptions.rb
530
540
  - lib/datadog/di/instrumenter.rb
531
541
  - lib/datadog/di/logger.rb
532
542
  - lib/datadog/di/preload.rb
@@ -572,7 +582,10 @@ files:
572
582
  - lib/datadog/open_feature/exposures/reporter.rb
573
583
  - lib/datadog/open_feature/exposures/worker.rb
574
584
  - lib/datadog/open_feature/ext.rb
575
- - lib/datadog/open_feature/hooks/flag_eval_hook.rb
585
+ - lib/datadog/open_feature/flag_evaluation/aggregator.rb
586
+ - lib/datadog/open_feature/flag_evaluation/writer.rb
587
+ - lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb
588
+ - lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb
576
589
  - lib/datadog/open_feature/metrics/flag_eval_metrics.rb
577
590
  - lib/datadog/open_feature/native_evaluator.rb
578
591
  - lib/datadog/open_feature/noop_evaluator.rb
@@ -588,6 +601,7 @@ files:
588
601
  - lib/datadog/opentelemetry/ext.rb
589
602
  - lib/datadog/opentelemetry/logs.rb
590
603
  - lib/datadog/opentelemetry/metrics.rb
604
+ - lib/datadog/opentelemetry/sdk.rb
591
605
  - lib/datadog/opentelemetry/sdk/configurator.rb
592
606
  - lib/datadog/opentelemetry/sdk/id_generator.rb
593
607
  - lib/datadog/opentelemetry/sdk/logs_exporter.rb
@@ -629,6 +643,7 @@ files:
629
643
  - lib/datadog/symbol_database.rb
630
644
  - lib/datadog/symbol_database/component.rb
631
645
  - lib/datadog/symbol_database/configuration.rb
646
+ - lib/datadog/symbol_database/extensions.rb
632
647
  - lib/datadog/symbol_database/extractor.rb
633
648
  - lib/datadog/symbol_database/file_hash.rb
634
649
  - lib/datadog/symbol_database/logger.rb
@@ -691,6 +706,7 @@ files:
691
706
  - lib/datadog/tracing/contrib/action_view/patcher.rb
692
707
  - lib/datadog/tracing/contrib/action_view/utils.rb
693
708
  - lib/datadog/tracing/contrib/active_job/configuration/settings.rb
709
+ - lib/datadog/tracing/contrib/active_job/data_streams.rb
694
710
  - lib/datadog/tracing/contrib/active_job/event.rb
695
711
  - lib/datadog/tracing/contrib/active_job/events.rb
696
712
  - lib/datadog/tracing/contrib/active_job/events/discard.rb
@@ -1081,6 +1097,7 @@ files:
1081
1097
  - lib/datadog/tracing/distributed/propagation_policy.rb
1082
1098
  - lib/datadog/tracing/distributed/trace_context.rb
1083
1099
  - lib/datadog/tracing/event.rb
1100
+ - lib/datadog/tracing/ext.rb
1084
1101
  - lib/datadog/tracing/flush.rb
1085
1102
  - lib/datadog/tracing/metadata.rb
1086
1103
  - lib/datadog/tracing/metadata/analytics.rb
@@ -1140,8 +1157,8 @@ licenses:
1140
1157
  - Apache-2.0
1141
1158
  metadata:
1142
1159
  allowed_push_host: https://rubygems.org
1143
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.36.0/CHANGELOG.md
1144
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.36.0
1160
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.38.0/CHANGELOG.md
1161
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.38.0
1145
1162
  post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
1146
1163
  rdoc_options: []
1147
1164
  require_paths: