datadog 2.17.0 → 2.19.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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +90 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +63 -56
  4. data/ext/datadog_profiling_native_extension/collectors_stack.c +263 -76
  5. data/ext/datadog_profiling_native_extension/collectors_stack.h +20 -3
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +62 -12
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -0
  8. data/ext/datadog_profiling_native_extension/extconf.rb +7 -0
  9. data/ext/datadog_profiling_native_extension/heap_recorder.c +239 -363
  10. data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -6
  11. data/ext/datadog_profiling_native_extension/libdatadog_helpers.c +22 -0
  12. data/ext/datadog_profiling_native_extension/libdatadog_helpers.h +8 -5
  13. data/ext/datadog_profiling_native_extension/private_vm_api_access.c +38 -26
  14. data/ext/datadog_profiling_native_extension/private_vm_api_access.h +6 -4
  15. data/ext/datadog_profiling_native_extension/ruby_helpers.c +1 -13
  16. data/ext/datadog_profiling_native_extension/ruby_helpers.h +3 -11
  17. data/ext/datadog_profiling_native_extension/stack_recorder.c +154 -57
  18. data/ext/libdatadog_api/extconf.rb +2 -2
  19. data/ext/libdatadog_api/library_config.c +54 -12
  20. data/ext/libdatadog_api/library_config.h +6 -0
  21. data/ext/libdatadog_api/process_discovery.c +2 -7
  22. data/ext/libdatadog_extconf_helpers.rb +1 -1
  23. data/lib/datadog/appsec/api_security/lru_cache.rb +9 -2
  24. data/lib/datadog/appsec/api_security/route_extractor.rb +71 -0
  25. data/lib/datadog/appsec/api_security/sampler.rb +59 -0
  26. data/lib/datadog/appsec/api_security.rb +14 -0
  27. data/lib/datadog/appsec/assets/waf_rules/recommended.json +257 -85
  28. data/lib/datadog/appsec/assets/waf_rules/strict.json +10 -78
  29. data/lib/datadog/appsec/component.rb +30 -54
  30. data/lib/datadog/appsec/configuration/settings.rb +60 -2
  31. data/lib/datadog/appsec/context.rb +6 -6
  32. data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
  33. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +27 -16
  34. data/lib/datadog/appsec/instrumentation/gateway/argument.rb +1 -1
  35. data/lib/datadog/appsec/processor/rule_loader.rb +5 -6
  36. data/lib/datadog/appsec/remote.rb +15 -55
  37. data/lib/datadog/appsec/security_engine/engine.rb +194 -0
  38. data/lib/datadog/appsec/security_engine/runner.rb +10 -11
  39. data/lib/datadog/appsec.rb +4 -7
  40. data/lib/datadog/core/configuration/agent_settings.rb +52 -0
  41. data/lib/datadog/core/configuration/agent_settings_resolver.rb +1 -43
  42. data/lib/datadog/core/configuration/components.rb +2 -4
  43. data/lib/datadog/core/configuration/option.rb +9 -9
  44. data/lib/datadog/core/configuration/settings.rb +42 -10
  45. data/lib/datadog/core/configuration/stable_config.rb +1 -2
  46. data/lib/datadog/core/crashtracking/tag_builder.rb +4 -22
  47. data/lib/datadog/core/process_discovery/tracer_memfd.rb +15 -0
  48. data/lib/datadog/core/process_discovery.rb +5 -1
  49. data/lib/datadog/core/remote/configuration/repository.rb +12 -0
  50. data/lib/datadog/core/tag_builder.rb +56 -0
  51. data/lib/datadog/core/telemetry/component.rb +8 -4
  52. data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +1 -0
  53. data/lib/datadog/core/telemetry/event/app_started.rb +148 -40
  54. data/lib/datadog/core/telemetry/logger.rb +5 -4
  55. data/lib/datadog/core/telemetry/logging.rb +11 -5
  56. data/lib/datadog/core/transport/http/adapters/net.rb +17 -2
  57. data/lib/datadog/core/transport/http/builder.rb +2 -2
  58. data/lib/datadog/core/transport/http/env.rb +8 -0
  59. data/lib/datadog/core/utils.rb +7 -0
  60. data/lib/datadog/di/instrumenter.rb +48 -5
  61. data/lib/datadog/di/probe_notification_builder.rb +37 -42
  62. data/lib/datadog/di/probe_notifier_worker.rb +9 -1
  63. data/lib/datadog/di/serializer.rb +10 -2
  64. data/lib/datadog/di/transport/http/input.rb +10 -0
  65. data/lib/datadog/di/transport/input.rb +10 -2
  66. data/lib/datadog/di.rb +0 -6
  67. data/lib/datadog/kit/appsec/events/v2.rb +195 -0
  68. data/lib/datadog/profiling/collectors/code_provenance.rb +17 -8
  69. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +6 -0
  70. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -0
  71. data/lib/datadog/profiling/collectors/info.rb +41 -0
  72. data/lib/datadog/profiling/collectors/thread_context.rb +16 -1
  73. data/lib/datadog/profiling/component.rb +8 -9
  74. data/lib/datadog/profiling/exporter.rb +9 -3
  75. data/lib/datadog/profiling/ext.rb +0 -12
  76. data/lib/datadog/profiling/http_transport.rb +2 -2
  77. data/lib/datadog/profiling/profiler.rb +2 -0
  78. data/lib/datadog/profiling/scheduler.rb +2 -1
  79. data/lib/datadog/profiling/sequence_tracker.rb +44 -0
  80. data/lib/datadog/profiling/stack_recorder.rb +5 -5
  81. data/lib/datadog/profiling/tag_builder.rb +7 -37
  82. data/lib/datadog/profiling/tasks/setup.rb +2 -0
  83. data/lib/datadog/profiling.rb +1 -0
  84. data/lib/datadog/single_step_instrument.rb +9 -0
  85. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +15 -0
  86. data/lib/datadog/tracing/contrib/action_pack/action_dispatch/instrumentation.rb +19 -12
  87. data/lib/datadog/tracing/contrib/action_pack/ext.rb +2 -0
  88. data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +7 -1
  89. data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
  90. data/lib/datadog/tracing/contrib/lograge/patcher.rb +4 -2
  91. data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
  92. data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
  93. data/lib/datadog/tracing/contrib/rails/runner.rb +61 -40
  94. data/lib/datadog/tracing/contrib/sidekiq/ext.rb +1 -0
  95. data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -2
  96. data/lib/datadog/tracing/diagnostics/environment_logger.rb +3 -1
  97. data/lib/datadog/tracing/span_event.rb +1 -1
  98. data/lib/datadog/tracing/span_operation.rb +22 -0
  99. data/lib/datadog/tracing/sync_writer.rb +1 -1
  100. data/lib/datadog/tracing/trace_operation.rb +12 -4
  101. data/lib/datadog/tracing/tracer.rb +6 -2
  102. data/lib/datadog/version.rb +1 -1
  103. data/lib/datadog.rb +7 -0
  104. metadata +14 -10
  105. data/lib/datadog/appsec/assets/waf_rules/processors.json +0 -321
  106. data/lib/datadog/appsec/assets/waf_rules/scanners.json +0 -1023
  107. data/lib/datadog/appsec/processor/rule_merger.rb +0 -171
  108. data/lib/datadog/appsec/processor.rb +0 -107
@@ -10,34 +10,48 @@ module Datadog
10
10
  # * `-`: for code provided through the STDIN.
11
11
  # * File path: for code provided through a local file.
12
12
  # * `inline code`: for code provided directly as a command line argument.
13
+ #
14
+ # The difficulty in instrumenting the Rails Runner is that
15
+ # the Rails application (and as a consequence the Datadog tracing library)
16
+ # is loaded very late in the runner execution.
17
+ # The Rails application is loaded inside the same method the method
18
+ # that directly executes the code the user wants the runner to execute:
19
+ #
20
+ # ```ruby
21
+ # def perform(code_or_file = nil, *command_argv)
22
+ # boot_application! # Loads the Rails and Datadog
23
+ #
24
+ # if code_or_file == "-"
25
+ # eval($stdin.read, TOPLEVEL_BINDING, "stdin") # Calls the user code for this Runner
26
+ # # ...
27
+ # ```
28
+ #
29
+ # This means that there's no time to instrument the calling method, `perform`, which
30
+ # would be ideal. Instead, we resort to instrumenting `eval` and `load`, but
31
+ # only for calls from the `Rails::Command::RunnerCommand` class.
32
+ #
13
33
  # @see https://guides.rubyonrails.org/v6.1/command_line.html#bin-rails-runner
14
34
  module Runner
15
35
  # Limit the maximum size of the source code captured in the source tag.
16
36
  MAX_TAG_VALUE_SIZE = 4096
17
37
  private_constant :MAX_TAG_VALUE_SIZE
18
38
 
19
- def runner(code_or_file = nil, *_command_argv)
20
- if code_or_file == '-'
39
+ # Instruments the `Kernel.eval` method, but only for the
40
+ # `Rails::Command::RunnerCommand` class.
41
+ def eval(*args)
42
+ source = args[0]
43
+
44
+ if args[2] == 'stdin'
21
45
  name = Ext::SPAN_RUNNER_STDIN
22
- resource = nil
23
46
  operation = Ext::TAG_OPERATION_STDIN
24
- # The source is not yet available for STDIN, but it will be captured in `eval`.
25
- elsif File.exist?(code_or_file)
26
- name = Ext::SPAN_RUNNER_FILE
27
- resource = code_or_file
28
- operation = Ext::TAG_OPERATION_FILE
29
- source = File.read(code_or_file)
30
47
  else
31
48
  name = Ext::SPAN_RUNNER_INLINE
32
- resource = nil
33
49
  operation = Ext::TAG_OPERATION_INLINE
34
- source = code_or_file
35
50
  end
36
51
 
37
52
  Tracing.trace(
38
53
  name,
39
54
  service: Datadog.configuration.tracing[:rails][:service_name],
40
- resource: resource,
41
55
  tags: {
42
56
  Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
43
57
  Tracing::Metadata::Ext::TAG_OPERATION => operation,
@@ -55,39 +69,46 @@ module Datadog
55
69
  end
56
70
  end
57
71
 
58
- # Capture the executed source code when provided from STDIN.
59
- def eval(*args)
60
- span = Datadog::Tracing.active_span
61
- if span&.name == Ext::SPAN_RUNNER_STDIN
62
- source = args[0]
63
- span.set_tag(
64
- Ext::TAG_RUNNER_SOURCE,
65
- Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
66
- )
67
- end
68
-
69
- super
72
+ def self.prepend(base)
73
+ base.const_set(:Kernel, Kernel)
70
74
  end
71
75
 
72
- ruby2_keywords :eval if respond_to?(:ruby2_keywords, true)
73
- end
76
+ # Instruments the `Kernel.load` method, but only for the
77
+ # `Rails::Command::RunnerCommand` class.
78
+ module Kernel
79
+ def self.load(file, wrap = true)
80
+ name = Ext::SPAN_RUNNER_FILE
81
+ resource = file
82
+ operation = Ext::TAG_OPERATION_FILE
83
+
84
+ begin
85
+ # Reads one more byte than the limit to allow us to check if the source exceeds the limit.
86
+ source = File.read(file, MAX_TAG_VALUE_SIZE + 1)
87
+ rescue => e
88
+ Datadog.logger.debug("Failed to read file '#{file}' for Rails runner: #{e.message}")
89
+ end
74
90
 
75
- # The instrumentation target, {Rails::Command::RunnerCommand} is only loaded
76
- # right before `bin/rails runner` is executed. This means there's not much
77
- # opportunity to patch it ahead of time.
78
- # To ensure we can patch it successfully, we patch it's caller, {Rails::Command}
79
- # and promptly patch {Rails::Command::RunnerCommand} when it is loaded.
80
- module Command
81
- def find_by_namespace(*args)
82
- ret = super
83
- # Patch RunnerCommand if it is loaded and not already patched.
84
- if defined?(::Rails::Command::RunnerCommand) && !(::Rails::Command::RunnerCommand < Runner)
85
- ::Rails::Command::RunnerCommand.prepend(Runner)
91
+ Tracing.trace(
92
+ name,
93
+ service: Datadog.configuration.tracing[:rails][:service_name],
94
+ resource: resource,
95
+ tags: {
96
+ Tracing::Metadata::Ext::TAG_COMPONENT => Ext::TAG_COMPONENT,
97
+ Tracing::Metadata::Ext::TAG_OPERATION => operation,
98
+ }
99
+ ) do |span|
100
+ if source
101
+ span.set_tag(
102
+ Ext::TAG_RUNNER_SOURCE,
103
+ Core::Utils.truncate(source, MAX_TAG_VALUE_SIZE)
104
+ )
105
+ end
106
+ Contrib::Analytics.set_rate!(span, Datadog.configuration.tracing[:rails])
107
+
108
+ super
109
+ end
86
110
  end
87
- ret
88
111
  end
89
-
90
- ruby2_keywords :find_by_namespace if respond_to?(:ruby2_keywords, true)
91
112
  end
92
113
  end
93
114
  end
@@ -13,6 +13,7 @@ module Datadog
13
13
  ENV_ANALYTICS_ENABLED = 'DD_TRACE_SIDEKIQ_ANALYTICS_ENABLED'
14
14
  ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_SIDEKIQ_ANALYTICS_SAMPLE_RATE'
15
15
  SERVICE_NAME = 'sidekiq'
16
+ SIDEKIQ_8_SECONDS_PER_INTEGER = 0.001 # Sidekiq 8 uses integer epoch milliseconds, rather than epoch floats
16
17
  SPAN_PUSH = 'sidekiq.push'
17
18
  SPAN_JOB = 'sidekiq.job'
18
19
  SPAN_JOB_FETCH = 'sidekiq.job_fetch'
@@ -22,7 +22,7 @@ module Datadog
22
22
  @quantize = options[:quantize] || configuration[:quantize]
23
23
  end
24
24
 
25
- def call(worker, job, queue)
25
+ def call(worker, job, queue) # rubocop:disable Metrics/MethodLength
26
26
  resource = job_resource(job)
27
27
 
28
28
  if @distributed_tracing
@@ -61,7 +61,10 @@ module Datadog
61
61
  span.set_tag(Ext::TAG_JOB_RETRY_COUNT, job['retry_count'])
62
62
  span.set_tag(Ext::TAG_JOB_QUEUE, job['queue'])
63
63
  span.set_tag(Ext::TAG_JOB_WRAPPER, job['class']) if job['wrapped']
64
- span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Core::Utils::Time.now.utc.to_f - job['enqueued_at'].to_f))
64
+
65
+ enqueued_at = job['enqueued_at']
66
+ enqueued_at *= Ext::SIDEKIQ_8_SECONDS_PER_INTEGER if enqueued_at.is_a?(Integer)
67
+ span.set_tag(Ext::TAG_JOB_DELAY, 1000.0 * (Core::Utils::Time.now.utc.to_f - enqueued_at.to_f))
65
68
 
66
69
  args = job['args']
67
70
  if args && !args.empty?
@@ -84,7 +84,7 @@ module Datadog
84
84
  # @return [Numeric, nil] tracer sample rate configured
85
85
  def sample_rate
86
86
  sampler = Datadog.configuration.tracing.sampler
87
- return nil unless sampler
87
+ return Datadog.configuration.tracing.sampling.default_rate unless sampler
88
88
 
89
89
  sampler.sample_rate(nil) rescue nil
90
90
  end
@@ -97,6 +97,8 @@ module Datadog
97
97
  # @return [Hash, nil] sample rules configured
98
98
  def sampling_rules
99
99
  sampler = Datadog.configuration.tracing.sampler
100
+ return Datadog.configuration.tracing.sampling.rules unless sampler
101
+
100
102
  return nil unless sampler.is_a?(Tracing::Sampling::PrioritySampler) &&
101
103
  sampler.priority_sampler.is_a?(Tracing::Sampling::RuleSampler)
102
104
 
@@ -56,7 +56,7 @@ module Datadog
56
56
  attr = {}
57
57
  @attributes.each do |key, value|
58
58
  attr[key] = if value.is_a?(Array)
59
- { type: ARRAY_TYPE, array_value: value.map { |v| serialize_native_attribute(v) } }
59
+ { type: ARRAY_TYPE, array_value: { values: value.map { |v| serialize_native_attribute(v) } } }
60
60
  else
61
61
  serialize_native_attribute(value)
62
62
  end
@@ -297,6 +297,28 @@ module Datadog
297
297
  set_error_tags(e)
298
298
  end
299
299
 
300
+ # Record an exception during the execution of this span. Multiple exceptions
301
+ # can be recorded on a span.
302
+ #
303
+ # @param [Exception] exception The exception to record
304
+ # @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
305
+ # attributes One or more key:value pairs, where the keys must be
306
+ # strings and the values may be (array of) string, boolean or numeric
307
+ # type.
308
+ #
309
+ # @return [void]
310
+ def record_exception(exception, attributes: {})
311
+ exc = Core::Error.build_from(exception)
312
+
313
+ event_attributes = {
314
+ 'exception.type' => exc.type,
315
+ 'exception.message' => exc.message,
316
+ 'exception.stacktrace' => exc.backtrace,
317
+ }
318
+
319
+ @span_events << SpanEvent.new('exception', attributes: event_attributes.merge!(attributes)) # steep:ignore
320
+ end
321
+
300
322
  # Return a string representation of the span.
301
323
  def to_s
302
324
  "SpanOperation(name:#{@name},sid:#{@id},tid:#{@trace_id},pid:#{@parent_id})"
@@ -25,7 +25,7 @@ module Datadog
25
25
  # @param [Datadog::Tracing::Transport::Traces::Transport] transport a custom transport instance.
26
26
  # If provided, overrides `transport_options` and `agent_settings`.
27
27
  # @param [Hash<Symbol,Object>] transport_options options for the default transport instance.
28
- # @param [Datadog::Tracing::Configuration::AgentSettingsResolver::AgentSettings] agent_settings agent options for
28
+ # @param [Datadog::Tracing::Configuration::AgentSettings] agent_settings agent options for
29
29
  # the default transport instance.
30
30
  def initialize(transport: nil, transport_options: {}, agent_settings: nil, logger: Datadog.logger)
31
31
  @logger = logger
@@ -79,7 +79,7 @@ module Datadog
79
79
  trace_state: nil,
80
80
  trace_state_unknown_fields: nil,
81
81
  remote_parent: false,
82
- tracer: nil,
82
+ tracer: nil, # DEV-3.0: deprecated, remove in 3.0
83
83
  baggage: nil
84
84
  )
85
85
  @logger = logger
@@ -106,7 +106,6 @@ module Datadog
106
106
  @apm_tracing_enabled = apm_tracing_enabled
107
107
  @trace_state = trace_state
108
108
  @trace_state_unknown_fields = trace_state_unknown_fields
109
- @tracer = tracer
110
109
  @baggage = baggage
111
110
 
112
111
  # Generic tags
@@ -329,7 +328,7 @@ module Datadog
329
328
  span_id = @active_span && @active_span.id
330
329
  span_id ||= @parent_span_id unless finished?
331
330
  # sample the trace_operation with the tracer
332
- @tracer&.sample_trace(self) unless sampling_priority
331
+ events.trace_propagated.publish(self)
333
332
 
334
333
  TraceDigest.new(
335
334
  span_id: span_id,
@@ -399,12 +398,14 @@ module Datadog
399
398
  attr_reader \
400
399
  :span_before_start,
401
400
  :span_finished,
402
- :trace_finished
401
+ :trace_finished,
402
+ :trace_propagated
403
403
 
404
404
  def initialize
405
405
  @span_before_start = SpanBeforeStart.new
406
406
  @span_finished = SpanFinished.new
407
407
  @trace_finished = TraceFinished.new
408
+ @trace_propagated = TracePropagated.new
408
409
  end
409
410
 
410
411
  # Triggered before a span starts.
@@ -421,6 +422,13 @@ module Datadog
421
422
  end
422
423
  end
423
424
 
425
+ # Triggered when trace is being propagated between applications or contexts
426
+ class TracePropagated < Tracing::Event
427
+ def initialize
428
+ super(:trace_propagated)
429
+ end
430
+ end
431
+
424
432
  # Triggered when the trace finishes, regardless of error.
425
433
  class TraceFinished < Tracing::Event
426
434
  def initialize
@@ -273,7 +273,7 @@ module Datadog
273
273
  # Sample a span, tagging the trace as appropriate.
274
274
  def sample_trace(trace_op)
275
275
  begin
276
- @sampler.sample!(trace_op)
276
+ @sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
277
277
  rescue StandardError => e
278
278
  SAMPLE_TRACE_LOG_ONLY_ONCE.run do
279
279
  logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
@@ -378,7 +378,12 @@ module Datadog
378
378
  event_span_op.service ||= @default_service
379
379
  end
380
380
 
381
+ events.trace_propagated.subscribe do |event_trace_op|
382
+ sample_trace(event_trace_op)
383
+ end
384
+
381
385
  events.span_finished.subscribe do |event_span, event_trace_op|
386
+ sample_trace(trace_op) if event_trace_op.sampling_priority.nil?
382
387
  sample_span(event_trace_op, event_span)
383
388
  flush_trace(event_trace_op)
384
389
  end
@@ -516,7 +521,6 @@ module Datadog
516
521
 
517
522
  # Flush finished spans from the trace buffer, send them to writer.
518
523
  def flush_trace(trace_op)
519
- sample_trace(trace_op) unless trace_op.sampling_priority
520
524
  begin
521
525
  trace = @trace_flush.consume!(trace_op)
522
526
  write(trace) if trace && !trace.empty?
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 17
6
+ MINOR = 19
7
7
  PATCH = 0
8
8
  PRE = nil
9
9
  BUILD = nil
data/lib/datadog.rb CHANGED
@@ -8,5 +8,12 @@ require_relative 'datadog/tracing/contrib'
8
8
  require_relative 'datadog/profiling'
9
9
  require_relative 'datadog/appsec'
10
10
  require_relative 'datadog/di'
11
+
12
+ # Line probes will not work on Ruby < 2.6 because of lack of :script_compiled
13
+ # trace point. Activate DI automatically on supported Ruby versions but
14
+ # always load its settings so that, for example, turning DI off when
15
+ # we are on Ruby 2.5 does not produce exceptions.
16
+ require_relative 'datadog/di/boot' if RUBY_VERSION >= '2.6' && RUBY_ENGINE != 'jruby'
17
+
11
18
  require_relative 'datadog/error_tracking'
12
19
  require_relative 'datadog/kit'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadog
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.17.0
4
+ version: 2.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-02 00:00:00.000000000 Z
11
+ date: 2025-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 1.22.0.0.2
53
+ version: 1.24.1.0.3
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 1.22.0.0.2
60
+ version: 1.24.1.0.3
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: libdatadog
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +170,14 @@ files:
170
170
  - lib/datadog/appsec/anonymizer.rb
171
171
  - lib/datadog/appsec/api_security.rb
172
172
  - lib/datadog/appsec/api_security/lru_cache.rb
173
+ - lib/datadog/appsec/api_security/route_extractor.rb
174
+ - lib/datadog/appsec/api_security/sampler.rb
173
175
  - lib/datadog/appsec/assets.rb
174
176
  - lib/datadog/appsec/assets/blocked.html
175
177
  - lib/datadog/appsec/assets/blocked.json
176
178
  - lib/datadog/appsec/assets/blocked.text
177
179
  - lib/datadog/appsec/assets/waf_rules/README.md
178
- - lib/datadog/appsec/assets/waf_rules/processors.json
179
180
  - lib/datadog/appsec/assets/waf_rules/recommended.json
180
- - lib/datadog/appsec/assets/waf_rules/scanners.json
181
181
  - lib/datadog/appsec/assets/waf_rules/strict.json
182
182
  - lib/datadog/appsec/autoload.rb
183
183
  - lib/datadog/appsec/component.rb
@@ -251,14 +251,13 @@ files:
251
251
  - lib/datadog/appsec/metrics/telemetry.rb
252
252
  - lib/datadog/appsec/monitor.rb
253
253
  - lib/datadog/appsec/monitor/gateway/watcher.rb
254
- - lib/datadog/appsec/processor.rb
255
254
  - lib/datadog/appsec/processor/rule_loader.rb
256
- - lib/datadog/appsec/processor/rule_merger.rb
257
255
  - lib/datadog/appsec/rate_limiter.rb
258
256
  - lib/datadog/appsec/remote.rb
259
257
  - lib/datadog/appsec/response.rb
260
258
  - lib/datadog/appsec/sample_rate.rb
261
259
  - lib/datadog/appsec/security_engine.rb
260
+ - lib/datadog/appsec/security_engine/engine.rb
262
261
  - lib/datadog/appsec/security_engine/result.rb
263
262
  - lib/datadog/appsec/security_engine/runner.rb
264
263
  - lib/datadog/appsec/security_event.rb
@@ -274,6 +273,7 @@ files:
274
273
  - lib/datadog/core/buffer/thread_safe.rb
275
274
  - lib/datadog/core/chunker.rb
276
275
  - lib/datadog/core/configuration.rb
276
+ - lib/datadog/core/configuration/agent_settings.rb
277
277
  - lib/datadog/core/configuration/agent_settings_resolver.rb
278
278
  - lib/datadog/core/configuration/agentless_settings_resolver.rb
279
279
  - lib/datadog/core/configuration/base.rb
@@ -321,6 +321,7 @@ files:
321
321
  - lib/datadog/core/metrics/options.rb
322
322
  - lib/datadog/core/pin.rb
323
323
  - lib/datadog/core/process_discovery.rb
324
+ - lib/datadog/core/process_discovery/tracer_memfd.rb
324
325
  - lib/datadog/core/rate_limiter.rb
325
326
  - lib/datadog/core/remote.rb
326
327
  - lib/datadog/core/remote/client.rb
@@ -348,6 +349,7 @@ files:
348
349
  - lib/datadog/core/runtime/ext.rb
349
350
  - lib/datadog/core/runtime/metrics.rb
350
351
  - lib/datadog/core/semaphore.rb
352
+ - lib/datadog/core/tag_builder.rb
351
353
  - lib/datadog/core/telemetry/component.rb
352
354
  - lib/datadog/core/telemetry/emitter.rb
353
355
  - lib/datadog/core/telemetry/event.rb
@@ -463,6 +465,7 @@ files:
463
465
  - lib/datadog/error_tracking/filters.rb
464
466
  - lib/datadog/kit.rb
465
467
  - lib/datadog/kit/appsec/events.rb
468
+ - lib/datadog/kit/appsec/events/v2.rb
466
469
  - lib/datadog/kit/enable_core_dumps.rb
467
470
  - lib/datadog/kit/identity.rb
468
471
  - lib/datadog/opentelemetry.rb
@@ -496,6 +499,7 @@ files:
496
499
  - lib/datadog/profiling/preload.rb
497
500
  - lib/datadog/profiling/profiler.rb
498
501
  - lib/datadog/profiling/scheduler.rb
502
+ - lib/datadog/profiling/sequence_tracker.rb
499
503
  - lib/datadog/profiling/stack_recorder.rb
500
504
  - lib/datadog/profiling/tag_builder.rb
501
505
  - lib/datadog/profiling/tasks/exec.rb
@@ -991,8 +995,8 @@ licenses:
991
995
  - Apache-2.0
992
996
  metadata:
993
997
  allowed_push_host: https://rubygems.org
994
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.17.0/CHANGELOG.md
995
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.17.0
998
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.19.0/CHANGELOG.md
999
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.19.0
996
1000
  post_install_message:
997
1001
  rdoc_options: []
998
1002
  require_paths: