datadog 2.9.0 → 2.10.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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -1
  3. data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +2 -2
  4. data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -2
  5. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +2 -5
  6. data/ext/datadog_profiling_native_extension/heap_recorder.c +50 -92
  7. data/ext/datadog_profiling_native_extension/heap_recorder.h +1 -1
  8. data/ext/datadog_profiling_native_extension/stack_recorder.c +9 -22
  9. data/ext/datadog_profiling_native_extension/stack_recorder.h +1 -1
  10. data/lib/datadog/appsec/actions_handler.rb +27 -0
  11. data/lib/datadog/appsec/component.rb +14 -8
  12. data/lib/datadog/appsec/configuration/settings.rb +9 -0
  13. data/lib/datadog/appsec/context.rb +28 -8
  14. data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +6 -2
  15. data/lib/datadog/appsec/contrib/graphql/appsec_trace.rb +1 -7
  16. data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +4 -5
  17. data/lib/datadog/appsec/contrib/graphql/reactive/multiplex.rb +1 -1
  18. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +15 -12
  19. data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
  20. data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
  21. data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
  22. data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -3
  23. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +11 -22
  24. data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +5 -4
  25. data/lib/datadog/appsec/contrib/rails/patcher.rb +3 -13
  26. data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
  27. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -8
  28. data/lib/datadog/appsec/contrib/sinatra/patcher.rb +3 -26
  29. data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +1 -1
  30. data/lib/datadog/appsec/ext.rb +6 -1
  31. data/lib/datadog/appsec/metrics/collector.rb +38 -0
  32. data/lib/datadog/appsec/metrics/exporter.rb +35 -0
  33. data/lib/datadog/appsec/metrics/telemetry.rb +23 -0
  34. data/lib/datadog/appsec/metrics.rb +13 -0
  35. data/lib/datadog/appsec/monitor/gateway/watcher.rb +5 -4
  36. data/lib/datadog/appsec/monitor/reactive/set_user.rb +1 -1
  37. data/lib/datadog/appsec/processor.rb +4 -3
  38. data/lib/datadog/appsec/response.rb +18 -80
  39. data/lib/datadog/appsec/security_engine/result.rb +67 -0
  40. data/lib/datadog/appsec/security_engine/runner.rb +88 -0
  41. data/lib/datadog/appsec/security_engine.rb +9 -0
  42. data/lib/datadog/appsec.rb +14 -5
  43. data/lib/datadog/di/component.rb +2 -0
  44. data/lib/datadog/di/probe_notification_builder.rb +6 -0
  45. data/lib/datadog/di/redactor.rb +0 -1
  46. data/lib/datadog/di/remote.rb +26 -5
  47. data/lib/datadog/tracing/contrib/aws/integration.rb +1 -1
  48. data/lib/datadog/tracing/contrib/extensions.rb +15 -3
  49. data/lib/datadog/tracing/contrib/http/integration.rb +3 -0
  50. data/lib/datadog/version.rb +1 -1
  51. metadata +32 -18
  52. data/lib/datadog/appsec/contrib/sinatra/ext.rb +0 -14
  53. data/lib/datadog/appsec/processor/context.rb +0 -107
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.9.0
4
+ version: 2.10.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: 2025-01-15 00:00:00.000000000 Z
11
+ date: 2025-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -30,20 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.3'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 3.3.7
33
+ version: '3.4'
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
- version: '3.3'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 3.3.7
40
+ version: '3.4'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: libddwaf
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +66,20 @@ dependencies:
72
66
  - - "~>"
73
67
  - !ruby/object:Gem::Version
74
68
  version: 14.3.1.1.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: logger
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
75
83
  description: |
76
84
  datadog is Datadog's client library for Ruby. It includes a suite of tools
77
85
  which provide visibility into the performance and security of Ruby applications,
@@ -146,6 +154,7 @@ files:
146
154
  - ext/libdatadog_extconf_helpers.rb
147
155
  - lib/datadog.rb
148
156
  - lib/datadog/appsec.rb
157
+ - lib/datadog/appsec/actions_handler.rb
149
158
  - lib/datadog/appsec/assets.rb
150
159
  - lib/datadog/appsec/assets/blocked.html
151
160
  - lib/datadog/appsec/assets/blocked.json
@@ -201,7 +210,6 @@ files:
201
210
  - lib/datadog/appsec/contrib/rails/reactive/action.rb
202
211
  - lib/datadog/appsec/contrib/rails/request.rb
203
212
  - lib/datadog/appsec/contrib/rails/request_middleware.rb
204
- - lib/datadog/appsec/contrib/sinatra/ext.rb
205
213
  - lib/datadog/appsec/contrib/sinatra/framework.rb
206
214
  - lib/datadog/appsec/contrib/sinatra/gateway/request.rb
207
215
  - lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb
@@ -216,11 +224,14 @@ files:
216
224
  - lib/datadog/appsec/instrumentation.rb
217
225
  - lib/datadog/appsec/instrumentation/gateway.rb
218
226
  - lib/datadog/appsec/instrumentation/gateway/argument.rb
227
+ - lib/datadog/appsec/metrics.rb
228
+ - lib/datadog/appsec/metrics/collector.rb
229
+ - lib/datadog/appsec/metrics/exporter.rb
230
+ - lib/datadog/appsec/metrics/telemetry.rb
219
231
  - lib/datadog/appsec/monitor.rb
220
232
  - lib/datadog/appsec/monitor/gateway/watcher.rb
221
233
  - lib/datadog/appsec/monitor/reactive/set_user.rb
222
234
  - lib/datadog/appsec/processor.rb
223
- - lib/datadog/appsec/processor/context.rb
224
235
  - lib/datadog/appsec/processor/rule_loader.rb
225
236
  - lib/datadog/appsec/processor/rule_merger.rb
226
237
  - lib/datadog/appsec/rate_limiter.rb
@@ -230,6 +241,9 @@ files:
230
241
  - lib/datadog/appsec/remote.rb
231
242
  - lib/datadog/appsec/response.rb
232
243
  - lib/datadog/appsec/sample_rate.rb
244
+ - lib/datadog/appsec/security_engine.rb
245
+ - lib/datadog/appsec/security_engine/result.rb
246
+ - lib/datadog/appsec/security_engine/runner.rb
233
247
  - lib/datadog/appsec/utils.rb
234
248
  - lib/datadog/appsec/utils/http.rb
235
249
  - lib/datadog/appsec/utils/http/media_range.rb
@@ -911,9 +925,9 @@ licenses:
911
925
  - Apache-2.0
912
926
  metadata:
913
927
  allowed_push_host: https://rubygems.org
914
- changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.9.0/CHANGELOG.md
915
- source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.9.0
916
- post_install_message:
928
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.10.0/CHANGELOG.md
929
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.10.0
930
+ post_install_message:
917
931
  rdoc_options: []
918
932
  require_paths:
919
933
  - lib
@@ -931,8 +945,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
931
945
  - !ruby/object:Gem::Version
932
946
  version: 2.0.0
933
947
  requirements: []
934
- rubygems_version: 3.5.11
935
- signing_key:
948
+ rubygems_version: 3.5.22
949
+ signing_key:
936
950
  specification_version: 4
937
951
  summary: Datadog tracing code for your Ruby applications
938
952
  test_files: []
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- module Contrib
6
- module Sinatra
7
- # Sinatra integration constants
8
- module Ext
9
- ROUTE_INTERRUPT = :datadog_appsec_contrib_sinatra_route_interrupt
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,107 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Datadog
4
- module AppSec
5
- class Processor
6
- # Context manages a sequence of runs
7
- class Context
8
- LIBDDWAF_SUCCESSFUL_EXECUTION_CODES = [:ok, :match].freeze
9
-
10
- attr_reader :time_ns, :time_ext_ns, :timeouts, :events
11
-
12
- def initialize(handle, telemetry:)
13
- @context = WAF::Context.new(handle)
14
- @telemetry = telemetry
15
-
16
- @time_ns = 0.0
17
- @time_ext_ns = 0.0
18
- @timeouts = 0
19
- @events = []
20
- @run_mutex = Mutex.new
21
-
22
- @libddwaf_debug_tag = "libddwaf:#{WAF::VERSION::STRING} method:ddwaf_run"
23
- end
24
-
25
- def run(persistent_data, ephemeral_data, timeout = WAF::LibDDWAF::DDWAF_RUN_TIMEOUT)
26
- @run_mutex.lock
27
-
28
- start_ns = Core::Utils::Time.get_time(:nanosecond)
29
-
30
- persistent_data.reject! do |_, v|
31
- next false if v.is_a?(TrueClass) || v.is_a?(FalseClass)
32
-
33
- v.nil? ? true : v.empty?
34
- end
35
-
36
- ephemeral_data.reject! do |_, v|
37
- next false if v.is_a?(TrueClass) || v.is_a?(FalseClass)
38
-
39
- v.nil? ? true : v.empty?
40
- end
41
-
42
- _code, result = try_run(persistent_data, ephemeral_data, timeout)
43
-
44
- stop_ns = Core::Utils::Time.get_time(:nanosecond)
45
-
46
- # these updates are not thread safe and should be protected
47
- @time_ns += result.total_runtime
48
- @time_ext_ns += (stop_ns - start_ns)
49
- @timeouts += 1 if result.timeout
50
-
51
- report_execution(result)
52
- result
53
- ensure
54
- @run_mutex.unlock
55
- end
56
-
57
- def extract_schema
58
- return unless extract_schema?
59
-
60
- input = {
61
- 'waf.context.processor' => {
62
- 'extract-schema' => true
63
- }
64
- }
65
-
66
- _code, result = try_run(input, {}, WAF::LibDDWAF::DDWAF_RUN_TIMEOUT)
67
-
68
- report_execution(result)
69
- result
70
- end
71
-
72
- def finalize
73
- @context.finalize
74
- end
75
-
76
- private
77
-
78
- def try_run(persistent_data, ephemeral_data, timeout)
79
- @context.run(persistent_data, ephemeral_data, timeout)
80
- rescue WAF::LibDDWAF::Error => e
81
- Datadog.logger.debug { "#{@libddwaf_debug_tag} execution error: #{e} backtrace: #{e.backtrace&.first(3)}" }
82
- @telemetry.report(e, description: 'libddwaf-rb internal low-level error')
83
-
84
- [:err_internal, WAF::Result.new(:err_internal, [], 0.0, false, [], [])]
85
- end
86
-
87
- def report_execution(result)
88
- Datadog.logger.debug { "#{@libddwaf_debug_tag} execution timed out: #{result.inspect}" } if result.timeout
89
-
90
- if LIBDDWAF_SUCCESSFUL_EXECUTION_CODES.include?(result.status)
91
- Datadog.logger.debug { "#{@libddwaf_debug_tag} execution result: #{result.inspect}" }
92
- else
93
- message = "#{@libddwaf_debug_tag} execution error: #{result.status.inspect}"
94
-
95
- Datadog.logger.debug { message }
96
- @telemetry.error(message)
97
- end
98
- end
99
-
100
- def extract_schema?
101
- Datadog.configuration.appsec.api_security.enabled &&
102
- Datadog.configuration.appsec.api_security.sample_rate.sample?
103
- end
104
- end
105
- end
106
- end
107
- end