datadog 2.36.0 → 2.37.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 (88) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +46 -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 +6 -3
  5. data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +17 -3
  6. data/ext/datadog_profiling_native_extension/collectors_thread_context.c +219 -98
  7. data/ext/datadog_profiling_native_extension/collectors_thread_context.h +2 -0
  8. data/ext/datadog_profiling_native_extension/extconf.rb +11 -0
  9. data/ext/datadog_profiling_native_extension/ruby_helpers.c +7 -0
  10. data/ext/libdatadog_api/di.c +76 -0
  11. data/ext/libdatadog_api/extconf.rb +6 -0
  12. data/ext/libdatadog_extconf_helpers.rb +1 -1
  13. data/lib/datadog/ai_guard/api_client.rb +6 -4
  14. data/lib/datadog/appsec/api_security/route_extractor.rb +7 -4
  15. data/lib/datadog/appsec/configuration.rb +6 -0
  16. data/lib/datadog/appsec/context.rb +4 -2
  17. data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +59 -4
  18. data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +59 -5
  19. data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +1 -1
  20. data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +4 -0
  21. data/lib/datadog/appsec/contrib/rack/input_peeker.rb +4 -17
  22. data/lib/datadog/appsec/contrib/rack/request_middleware.rb +21 -0
  23. data/lib/datadog/appsec/contrib/rails/gateway/request.rb +2 -1
  24. data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +60 -7
  25. data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +4 -0
  26. data/lib/datadog/appsec/ext.rb +1 -0
  27. data/lib/datadog/appsec/metrics/collector.rb +18 -1
  28. data/lib/datadog/appsec/metrics/exporter.rb +9 -3
  29. data/lib/datadog/appsec/remote.rb +9 -3
  30. data/lib/datadog/appsec/route_normalizer/rails_route_pattern.rb +176 -0
  31. data/lib/datadog/appsec/route_normalizer/route_pattern.rb +378 -0
  32. data/lib/datadog/appsec/route_normalizer/route_text.rb +57 -0
  33. data/lib/datadog/appsec/route_normalizer.rb +80 -0
  34. data/lib/datadog/appsec/utils/http/body_reader.rb +61 -0
  35. data/lib/datadog/core/configuration/components.rb +82 -2
  36. data/lib/datadog/core/configuration/components_state.rb +6 -1
  37. data/lib/datadog/core/configuration/settings.rb +0 -3
  38. data/lib/datadog/core/configuration/supported_configurations.rb +2 -0
  39. data/lib/datadog/core/evp.rb +11 -0
  40. data/lib/datadog/core/remote/client/capabilities.rb +34 -7
  41. data/lib/datadog/core/telemetry/event/app_started.rb +8 -1
  42. data/lib/datadog/di/base.rb +3 -1
  43. data/lib/datadog/di/code_tracker.rb +5 -2
  44. data/lib/datadog/di/component.rb +110 -36
  45. data/lib/datadog/di/error.rb +10 -0
  46. data/lib/datadog/di/fatal_exceptions.rb +26 -0
  47. data/lib/datadog/di/instrumenter.rb +381 -165
  48. data/lib/datadog/di/probe.rb +14 -0
  49. data/lib/datadog/di/probe_file_loader.rb +8 -3
  50. data/lib/datadog/di/probe_manager.rb +67 -9
  51. data/lib/datadog/di/probe_notification_builder.rb +4 -1
  52. data/lib/datadog/di/probe_notifier_worker.rb +52 -32
  53. data/lib/datadog/di/redactor.rb +16 -1
  54. data/lib/datadog/di/remote.rb +175 -14
  55. data/lib/datadog/di/serializer.rb +12 -5
  56. data/lib/datadog/di/transport/input.rb +8 -4
  57. data/lib/datadog/di.rb +63 -0
  58. data/lib/datadog/kit/appsec/events/v2.rb +60 -2
  59. data/lib/datadog/open_feature/component.rb +29 -6
  60. data/lib/datadog/open_feature/configuration.rb +8 -0
  61. data/lib/datadog/open_feature/ext.rb +2 -0
  62. data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +286 -0
  63. data/lib/datadog/open_feature/flag_evaluation/writer.rb +433 -0
  64. data/lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb +101 -0
  65. data/lib/datadog/open_feature/hooks/{flag_eval_hook.rb → flag_eval_metrics_hook.rb} +1 -1
  66. data/lib/datadog/open_feature/native_evaluator.rb +22 -0
  67. data/lib/datadog/open_feature/provider.rb +59 -27
  68. data/lib/datadog/open_feature/transport.rb +55 -1
  69. data/lib/datadog/opentelemetry/sdk/logs_exporter.rb +5 -12
  70. data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +4 -11
  71. data/lib/datadog/opentelemetry/sdk.rb +19 -0
  72. data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +1 -1
  73. data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -3
  74. data/lib/datadog/symbol_database/component.rb +164 -47
  75. data/lib/datadog/symbol_database/configuration.rb +12 -4
  76. data/lib/datadog/symbol_database/extensions.rb +19 -0
  77. data/lib/datadog/symbol_database/extractor.rb +124 -87
  78. data/lib/datadog/symbol_database/file_hash.rb +3 -1
  79. data/lib/datadog/symbol_database/remote.rb +8 -3
  80. data/lib/datadog/symbol_database/scope_batcher.rb +7 -3
  81. data/lib/datadog/symbol_database/uploader.rb +9 -2
  82. data/lib/datadog/symbol_database.rb +22 -0
  83. data/lib/datadog/tracing/distributed/baggage.rb +2 -1
  84. data/lib/datadog/tracing/ext.rb +9 -0
  85. data/lib/datadog/tracing/remote.rb +34 -3
  86. data/lib/datadog/version.rb +1 -1
  87. data/lib/datadog.rb +1 -0
  88. metadata +19 -6
@@ -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
@@ -3,7 +3,7 @@
3
3
  module Datadog
4
4
  module VERSION
5
5
  MAJOR = 2
6
- MINOR = 36
6
+ MINOR = 37
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.37.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog, Inc.
@@ -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
@@ -527,6 +533,7 @@ files:
527
533
  - lib/datadog/di/el/expression.rb
528
534
  - lib/datadog/di/error.rb
529
535
  - lib/datadog/di/extensions.rb
536
+ - lib/datadog/di/fatal_exceptions.rb
530
537
  - lib/datadog/di/instrumenter.rb
531
538
  - lib/datadog/di/logger.rb
532
539
  - lib/datadog/di/preload.rb
@@ -572,7 +579,10 @@ files:
572
579
  - lib/datadog/open_feature/exposures/reporter.rb
573
580
  - lib/datadog/open_feature/exposures/worker.rb
574
581
  - lib/datadog/open_feature/ext.rb
575
- - lib/datadog/open_feature/hooks/flag_eval_hook.rb
582
+ - lib/datadog/open_feature/flag_evaluation/aggregator.rb
583
+ - lib/datadog/open_feature/flag_evaluation/writer.rb
584
+ - lib/datadog/open_feature/hooks/flag_eval_evp_hook.rb
585
+ - lib/datadog/open_feature/hooks/flag_eval_metrics_hook.rb
576
586
  - lib/datadog/open_feature/metrics/flag_eval_metrics.rb
577
587
  - lib/datadog/open_feature/native_evaluator.rb
578
588
  - lib/datadog/open_feature/noop_evaluator.rb
@@ -588,6 +598,7 @@ files:
588
598
  - lib/datadog/opentelemetry/ext.rb
589
599
  - lib/datadog/opentelemetry/logs.rb
590
600
  - lib/datadog/opentelemetry/metrics.rb
601
+ - lib/datadog/opentelemetry/sdk.rb
591
602
  - lib/datadog/opentelemetry/sdk/configurator.rb
592
603
  - lib/datadog/opentelemetry/sdk/id_generator.rb
593
604
  - lib/datadog/opentelemetry/sdk/logs_exporter.rb
@@ -629,6 +640,7 @@ files:
629
640
  - lib/datadog/symbol_database.rb
630
641
  - lib/datadog/symbol_database/component.rb
631
642
  - lib/datadog/symbol_database/configuration.rb
643
+ - lib/datadog/symbol_database/extensions.rb
632
644
  - lib/datadog/symbol_database/extractor.rb
633
645
  - lib/datadog/symbol_database/file_hash.rb
634
646
  - lib/datadog/symbol_database/logger.rb
@@ -1081,6 +1093,7 @@ files:
1081
1093
  - lib/datadog/tracing/distributed/propagation_policy.rb
1082
1094
  - lib/datadog/tracing/distributed/trace_context.rb
1083
1095
  - lib/datadog/tracing/event.rb
1096
+ - lib/datadog/tracing/ext.rb
1084
1097
  - lib/datadog/tracing/flush.rb
1085
1098
  - lib/datadog/tracing/metadata.rb
1086
1099
  - lib/datadog/tracing/metadata/analytics.rb
@@ -1140,8 +1153,8 @@ licenses:
1140
1153
  - Apache-2.0
1141
1154
  metadata:
1142
1155
  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
1156
+ changelog_uri: https://github.com/DataDog/dd-trace-rb/blob/v2.37.0/CHANGELOG.md
1157
+ source_code_uri: https://github.com/DataDog/dd-trace-rb/tree/v2.37.0
1145
1158
  post_install_message: 'JRuby support in the datadog gem is deprecated. Details: https://dtdg.co/jruby-deprecation'
1146
1159
  rdoc_options: []
1147
1160
  require_paths: