datadog 2.9.0 → 2.10.0

Sign up to get free protection for your applications and to get access to all the features.
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