datadog 2.12.1 → 2.17.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +154 -2
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +16 -14
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.c +1 -4
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +10 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.c +79 -0
- data/ext/datadog_profiling_native_extension/encoded_profile.h +8 -0
- data/ext/datadog_profiling_native_extension/extconf.rb +3 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.c +8 -1
- data/ext/datadog_profiling_native_extension/http_transport.c +60 -94
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +8 -0
- data/ext/datadog_profiling_native_extension/profiling.c +2 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +23 -23
- data/ext/libdatadog_api/crashtracker.c +11 -12
- data/ext/libdatadog_api/crashtracker.h +5 -0
- data/ext/libdatadog_api/datadog_ruby_common.c +1 -4
- data/ext/libdatadog_api/datadog_ruby_common.h +10 -0
- data/ext/libdatadog_api/init.c +15 -0
- data/ext/libdatadog_api/library_config.c +122 -0
- data/ext/libdatadog_api/library_config.h +19 -0
- data/ext/libdatadog_api/macos_development.md +3 -3
- data/ext/libdatadog_api/process_discovery.c +117 -0
- data/ext/libdatadog_api/process_discovery.h +5 -0
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/actions_handler/serializable_backtrace.rb +89 -0
- data/lib/datadog/appsec/actions_handler.rb +24 -2
- data/lib/datadog/appsec/anonymizer.rb +16 -0
- data/lib/datadog/appsec/api_security/lru_cache.rb +49 -0
- data/lib/datadog/appsec/api_security.rb +9 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +50 -5
- data/lib/datadog/appsec/assets/waf_rules/processors.json +239 -10
- data/lib/datadog/appsec/assets/waf_rules/scanners.json +926 -17
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +29 -20
- data/lib/datadog/appsec/compressed_json.rb +40 -0
- data/lib/datadog/appsec/configuration/settings.rb +93 -28
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +10 -12
- data/lib/datadog/appsec/contrib/active_record/integration.rb +2 -2
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +22 -22
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +7 -31
- data/lib/datadog/appsec/contrib/devise/data_extractor.rb +78 -0
- data/lib/datadog/appsec/contrib/devise/ext.rb +22 -0
- data/lib/datadog/appsec/contrib/devise/integration.rb +1 -2
- data/lib/datadog/appsec/contrib/devise/patcher.rb +34 -23
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +102 -0
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +69 -0
- data/lib/datadog/appsec/contrib/devise/{patcher/rememberable_patch.rb → patches/skip_signin_tracking_patch.rb} +2 -2
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +106 -0
- data/lib/datadog/appsec/contrib/excon/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +9 -10
- data/lib/datadog/appsec/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +8 -9
- data/lib/datadog/appsec/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/ext.rb +34 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +49 -32
- data/lib/datadog/appsec/contrib/rack/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +19 -18
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +11 -13
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/patcher.rb +21 -21
- data/lib/datadog/appsec/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +10 -11
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -23
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/appsec/event.rb +96 -135
- data/lib/datadog/appsec/ext.rb +4 -2
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +7 -2
- data/lib/datadog/appsec/instrumentation/gateway/middleware.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -22
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +49 -14
- data/lib/datadog/appsec/processor/rule_loader.rb +26 -28
- data/lib/datadog/appsec/processor/rule_merger.rb +7 -6
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/remote.rb +23 -11
- data/lib/datadog/appsec/response.rb +6 -6
- data/lib/datadog/appsec/security_engine/runner.rb +3 -3
- data/lib/datadog/appsec/security_event.rb +39 -0
- data/lib/datadog/appsec/utils.rb +0 -2
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/buffer/random.rb +18 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +5 -5
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +176 -0
- data/lib/datadog/core/configuration/components.rb +50 -31
- data/lib/datadog/core/configuration/components_state.rb +23 -0
- data/lib/datadog/core/configuration/ext.rb +4 -0
- data/lib/datadog/core/configuration/option.rb +79 -43
- data/lib/datadog/core/configuration/option_definition.rb +4 -4
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +68 -35
- data/lib/datadog/core/configuration/stable_config.rb +23 -0
- data/lib/datadog/core/configuration.rb +40 -16
- data/lib/datadog/core/crashtracking/component.rb +3 -10
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/encoding.rb +1 -1
- data/lib/datadog/core/environment/agent_info.rb +4 -3
- data/lib/datadog/core/environment/cgroup.rb +10 -12
- data/lib/datadog/core/environment/container.rb +38 -40
- data/lib/datadog/core/environment/ext.rb +6 -6
- data/lib/datadog/core/environment/git.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +3 -3
- data/lib/datadog/core/environment/platform.rb +3 -3
- data/lib/datadog/core/environment/variable_helpers.rb +1 -1
- data/lib/datadog/core/error.rb +11 -9
- data/lib/datadog/core/logger.rb +2 -2
- data/lib/datadog/core/metrics/client.rb +20 -21
- data/lib/datadog/core/metrics/logging.rb +5 -5
- data/lib/datadog/core/process_discovery.rb +32 -0
- data/lib/datadog/core/rate_limiter.rb +4 -2
- data/lib/datadog/core/remote/client.rb +40 -32
- data/lib/datadog/core/remote/component.rb +6 -9
- data/lib/datadog/core/remote/configuration/digest.rb +7 -7
- data/lib/datadog/core/remote/configuration/path.rb +1 -1
- data/lib/datadog/core/remote/configuration/repository.rb +2 -1
- data/lib/datadog/core/remote/negotiation.rb +9 -9
- data/lib/datadog/core/remote/transport/config.rb +4 -3
- data/lib/datadog/core/remote/transport/http/client.rb +5 -4
- data/lib/datadog/core/remote/transport/http/config.rb +27 -37
- data/lib/datadog/core/remote/transport/http/negotiation.rb +7 -33
- data/lib/datadog/core/remote/transport/http.rb +22 -57
- data/lib/datadog/core/remote/transport/negotiation.rb +4 -3
- data/lib/datadog/core/runtime/metrics.rb +12 -5
- data/lib/datadog/core/telemetry/component.rb +78 -53
- data/lib/datadog/core/telemetry/emitter.rb +23 -11
- data/lib/datadog/core/telemetry/event/app_client_configuration_change.rb +65 -0
- data/lib/datadog/core/telemetry/event/app_closing.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_dependencies_loaded.rb +33 -0
- data/lib/datadog/core/telemetry/event/app_heartbeat.rb +18 -0
- data/lib/datadog/core/telemetry/event/app_integrations_change.rb +58 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +179 -0
- data/lib/datadog/core/telemetry/event/base.rb +40 -0
- data/lib/datadog/core/telemetry/event/distributions.rb +18 -0
- data/lib/datadog/core/telemetry/event/generate_metrics.rb +43 -0
- data/lib/datadog/core/telemetry/event/log.rb +76 -0
- data/lib/datadog/core/telemetry/event/message_batch.rb +42 -0
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +43 -0
- data/lib/datadog/core/telemetry/event.rb +17 -472
- data/lib/datadog/core/telemetry/http/adapters/net.rb +12 -97
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/metric.rb +8 -8
- data/lib/datadog/core/telemetry/request.rb +4 -4
- data/lib/datadog/core/telemetry/transport/http/api.rb +43 -0
- data/lib/datadog/core/telemetry/transport/http/client.rb +49 -0
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +92 -0
- data/lib/datadog/core/telemetry/transport/http.rb +63 -0
- data/lib/datadog/core/telemetry/transport/telemetry.rb +51 -0
- data/lib/datadog/core/telemetry/worker.rb +90 -24
- data/lib/datadog/core/transport/http/adapters/test.rb +2 -1
- data/lib/datadog/core/transport/http/api/instance.rb +17 -0
- data/lib/datadog/core/transport/http/api/spec.rb +17 -0
- data/lib/datadog/core/transport/http/builder.rb +18 -16
- data/lib/datadog/core/transport/http.rb +39 -2
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +6 -6
- data/lib/datadog/core/utils/duration.rb +32 -32
- data/lib/datadog/core/utils/forking.rb +2 -2
- data/lib/datadog/core/utils/network.rb +6 -6
- data/lib/datadog/core/utils/only_once_successful.rb +16 -5
- data/lib/datadog/core/utils/time.rb +20 -0
- data/lib/datadog/core/utils/truncation.rb +21 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +1 -1
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +8 -8
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +7 -7
- data/lib/datadog/core/worker.rb +1 -1
- data/lib/datadog/core/workers/async.rb +29 -12
- data/lib/datadog/core/workers/interval_loop.rb +12 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/core.rb +8 -0
- data/lib/datadog/di/boot.rb +34 -0
- data/lib/datadog/di/component.rb +0 -2
- data/lib/datadog/di/probe_notification_builder.rb +1 -1
- data/lib/datadog/di/probe_notifier_worker.rb +16 -16
- data/lib/datadog/di/remote.rb +2 -0
- data/lib/datadog/di/transport/diagnostics.rb +4 -3
- data/lib/datadog/di/transport/http/api.rb +2 -12
- data/lib/datadog/di/transport/http/client.rb +4 -3
- data/lib/datadog/di/transport/http/diagnostics.rb +7 -34
- data/lib/datadog/di/transport/http/input.rb +7 -34
- data/lib/datadog/di/transport/http.rb +14 -62
- data/lib/datadog/di/transport/input.rb +4 -3
- data/lib/datadog/di/utils.rb +5 -0
- data/lib/datadog/di.rb +5 -32
- data/lib/datadog/error_tracking/collector.rb +87 -0
- data/lib/datadog/error_tracking/component.rb +167 -0
- data/lib/datadog/error_tracking/configuration/settings.rb +63 -0
- data/lib/datadog/error_tracking/configuration.rb +11 -0
- data/lib/datadog/error_tracking/ext.rb +18 -0
- data/lib/datadog/error_tracking/extensions.rb +16 -0
- data/lib/datadog/error_tracking/filters.rb +77 -0
- data/lib/datadog/error_tracking.rb +18 -0
- data/lib/datadog/kit/appsec/events.rb +12 -0
- data/lib/datadog/kit/identity.rb +5 -1
- data/lib/datadog/opentelemetry/api/baggage.rb +90 -0
- data/lib/datadog/opentelemetry/api/baggage.rbs +26 -0
- data/lib/datadog/opentelemetry/api/context.rb +16 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/opentelemetry.rb +2 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +3 -0
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/encoded_profile.rb +11 -0
- data/lib/datadog/profiling/exporter.rb +3 -4
- data/lib/datadog/profiling/ext.rb +0 -2
- data/lib/datadog/profiling/flush.rb +5 -8
- data/lib/datadog/profiling/http_transport.rb +5 -59
- data/lib/datadog/profiling/scheduler.rb +8 -1
- data/lib/datadog/profiling/stack_recorder.rb +4 -4
- data/lib/datadog/profiling/tag_builder.rb +1 -5
- data/lib/datadog/profiling.rb +6 -2
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -12
- data/lib/datadog/tracing/configuration/ext.rb +7 -1
- data/lib/datadog/tracing/configuration/settings.rb +18 -2
- data/lib/datadog/tracing/context_provider.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +4 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +33 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +4 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +2 -4
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +10 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +5 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/excon/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +0 -15
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +6 -10
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +6 -16
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +7 -15
- data/lib/datadog/tracing/contrib/karafka/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/karafka/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/karafka/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +66 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +71 -0
- data/lib/datadog/tracing/contrib/karafka.rb +37 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +18 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +9 -0
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/patcher.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +6 -1
- data/lib/datadog/tracing/contrib/sidekiq/distributed/propagation.rb +3 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/support.rb +28 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/correlation.rb +9 -2
- data/lib/datadog/tracing/distributed/b3_multi.rb +1 -1
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +131 -0
- data/lib/datadog/tracing/distributed/datadog.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +25 -4
- data/lib/datadog/tracing/distributed/propagation_policy.rb +42 -0
- data/lib/datadog/tracing/metadata/errors.rb +4 -4
- data/lib/datadog/tracing/metadata/ext.rb +5 -0
- data/lib/datadog/tracing/metadata/metastruct.rb +36 -0
- data/lib/datadog/tracing/metadata/metastruct_tagging.rb +42 -0
- data/lib/datadog/tracing/metadata.rb +2 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -1
- data/lib/datadog/tracing/sampling/span/rule.rb +0 -1
- data/lib/datadog/tracing/span.rb +10 -1
- data/lib/datadog/tracing/span_event.rb +1 -1
- data/lib/datadog/tracing/span_operation.rb +46 -16
- data/lib/datadog/tracing/sync_writer.rb +1 -2
- data/lib/datadog/tracing/trace_digest.rb +9 -2
- data/lib/datadog/tracing/trace_operation.rb +44 -24
- data/lib/datadog/tracing/trace_segment.rb +6 -4
- data/lib/datadog/tracing/tracer.rb +45 -5
- data/lib/datadog/tracing/transport/http/api.rb +2 -10
- data/lib/datadog/tracing/transport/http/client.rb +5 -4
- data/lib/datadog/tracing/transport/http/traces.rb +13 -41
- data/lib/datadog/tracing/transport/http.rb +11 -44
- data/lib/datadog/tracing/transport/serializable_trace.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +7 -0
- data/lib/datadog/tracing/transport/traces.rb +26 -9
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers/trace_writer.rb +2 -6
- data/lib/datadog/tracing/writer.rb +2 -6
- data/lib/datadog/tracing.rb +16 -3
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -3
- metadata +80 -19
- data/lib/datadog/appsec/contrib/devise/event.rb +0 -54
- data/lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb +0 -72
- data/lib/datadog/appsec/contrib/devise/patcher/registration_controller_patch.rb +0 -47
- data/lib/datadog/appsec/contrib/devise/resource.rb +0 -35
- data/lib/datadog/appsec/contrib/devise/tracking.rb +0 -57
- data/lib/datadog/appsec/utils/trace_operation.rb +0 -15
- data/lib/datadog/core/telemetry/http/env.rb +0 -20
- data/lib/datadog/core/telemetry/http/ext.rb +0 -28
- data/lib/datadog/core/telemetry/http/response.rb +0 -70
- data/lib/datadog/core/telemetry/http/transport.rb +0 -90
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28053ce1bca4cce2032cb068c38e99a56524e6ccecec3068c4d26d1e750f9790
|
4
|
+
data.tar.gz: 29b6b57640638184370c5176e4da94e74c9770bae8afd7884d1c2baea782350d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caf719b7c9a2e5ee3f47ad0c3e02670b90b1f76bfa5de56c10f69169c97b827f4b9e81df822e548d1390f152f15e756c54c200e9f35904138e7c672af99ef30b
|
7
|
+
data.tar.gz: eda75252942b8c7d278bab14da78c7752b17b136a3f0bd9ed145512a64b3fb8acb110a8cbbfb280b2bcf7c558409ce83b5d311fce5f019ff34516ceb3883255c
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,108 @@
|
|
2
2
|
|
3
3
|
## [Unreleased]
|
4
4
|
|
5
|
+
## [2.17.0] - 2025-06-02
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
* Tracing: Add support for Rails 8.0. ([#4455][])
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
|
13
|
+
* Core: Improve tracer error reporting when agent responds with error responses to remote configuration requests ([#4669][])
|
14
|
+
* Core: Profiling: Upgrade libdatadog dependency to version 18.1 ([#4577][])
|
15
|
+
* Dynamic Instrumentation: Improve UI reporting of application and host status ([#4678][])
|
16
|
+
* Tracing: Mark AWS integration spans as errored when AWS requests fail ([#4672][])
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
|
20
|
+
* Error Tracking: remove error tracking support on Ruby 2.6 ([#4665][])
|
21
|
+
* Profiling: Fix profiling scheduler reporting corner case during shutdown ([#4679][])
|
22
|
+
* Tracing: Fix: The `on_error` warning for HTTP instrumentations ([#4673][])
|
23
|
+
|
24
|
+
## [2.16.0] - 2025-05-19
|
25
|
+
|
26
|
+
### Added
|
27
|
+
|
28
|
+
* Core: Add new configuration precedence value `environment` ([#4610][])
|
29
|
+
* Core: Add Source Code Integration (SCI) tags in Telemetry app-started event and in each Remote Config request ([#4653][])
|
30
|
+
* Core: Tracing: ErrorTracking: Add automatic reporting of handled errors ([#4604][])
|
31
|
+
* AppSec: Integrations: Add session tracking and attacker fingerprinting to `devise` and `rails` ([#4644][], [#4625][])
|
32
|
+
* Profiling: Add support for Ruby 3.5.0-preview1 ([#4600][])
|
33
|
+
* Tracing: Add warning when `on_error` handler is not a `Proc` ([#4611][])
|
34
|
+
* Tracing: Integrations: Add option to serialize MongoDB command as JSON ([#4403][])
|
35
|
+
* Tracing: Integrations: Add baggage to `karafka` list of propagation styles ([#4614][])
|
36
|
+
|
37
|
+
### Changed
|
38
|
+
|
39
|
+
* Tracing: Adjust trace sampling formula ([#4616][])
|
40
|
+
* Profiling: Replace `JSON.fast_generate` with `JSON.generate` ([#4602][])
|
41
|
+
|
42
|
+
### Fixed
|
43
|
+
|
44
|
+
* Core: Fix Ruby warnings when providing a custom time provider ([#4613][])
|
45
|
+
* Core: Fix Telemetry configuration in agentless mode to respect the timeout specified for the Agent ([#4590][])
|
46
|
+
* Profiling: Fix profiler compatibility with ruby-head (3.5) ([#4656][])
|
47
|
+
|
48
|
+
### Removed
|
49
|
+
|
50
|
+
* Core: Remove duplicated classes from Telemetry transport ([#4575][])
|
51
|
+
|
52
|
+
## [2.15.0] - 2025-04-17
|
53
|
+
|
54
|
+
### Added
|
55
|
+
|
56
|
+
* AppSec: Add auto-patching for `activerecord` with sql injection detection ([#4581][])
|
57
|
+
* Tracing: Add option for `opensearch` to set resource with relative path ([#4509][])
|
58
|
+
|
59
|
+
### Changed
|
60
|
+
|
61
|
+
* AppSec: Update In-App WAF rules, processors, and scanners ([#4568][])
|
62
|
+
|
63
|
+
### Fixed
|
64
|
+
|
65
|
+
* AppSec: Fix blocked requests not marked correctly when using custom redirect blocking action ([#4580][])
|
66
|
+
* AppSec: Fix UTF-8 unsafe payloads in InApp-WAF causing runtime exceptions ([#4573][])
|
67
|
+
|
68
|
+
## [2.14.0] - 2025-04-04
|
69
|
+
|
70
|
+
### Added
|
71
|
+
|
72
|
+
* Tracing: Add `karafka` instrumentation with 2.3.0 as the minimum supported version. ([#4147][])
|
73
|
+
|
74
|
+
### Fixed
|
75
|
+
|
76
|
+
* Core: Tracing: default logger arguments for compatibility with previous dd-trace-rb versions ([#4558][])
|
77
|
+
* AppSec: Fix `Datadog::Kit::AppSec::Events` SDK methods to correctly handle given string key `usr.login`. ([#4552][])
|
78
|
+
|
79
|
+
## [2.13.0] - 2025-04-02
|
80
|
+
|
81
|
+
### Added
|
82
|
+
|
83
|
+
* Core: Add `DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED` experimental option to enable runtime ID collection for runtime metrics. ([#4473][])
|
84
|
+
* Tracing: Add support for W3C Baggage API along with automatic extraction and injection, and OpenTelemetry support. ([#4493][], [#4505][])
|
85
|
+
* Tracing: Add `DD_APM_TRACING_ENABLED` option to disable APM tracing while keeping other products traces. ([#4498][])
|
86
|
+
* Tracing: Add `DD_TRACE_NATIVE_SPAN_EVENTS` option to override span events serialization for agent-less environments. ([#4507][])
|
87
|
+
* AppSec: Add stack trace reporting for security events. ([#4526][])
|
88
|
+
* AppSec: Improve `devise` instrumentation to support latest Account Takeover (ATO) detection. ([#4433][])
|
89
|
+
|
90
|
+
### Changed
|
91
|
+
|
92
|
+
* Core: Improve `DD_TAGS` configuration handling to be more consistent across Datadog libraries and Agent. ([#4530][])
|
93
|
+
* Tracing: Enable by default 128-bit trace ID logging so that trace IDs are consistent across logs and the Datadog UI. ([#4528][])
|
94
|
+
|
95
|
+
### Fixed
|
96
|
+
|
97
|
+
* Core: Fix initialization when the library is partially loaded. ([#4498][])
|
98
|
+
* Tracing: Fix trace ID propagation by ensuring extraction of 16-character hex values from the `_dd.p.tid` tag in `x-datadog-tags` header. ([#4534][])
|
99
|
+
* Tracing: Profiling: Fix warnings printed by `ruby -w`. ([#4547][], [#4549][])
|
100
|
+
|
101
|
+
## [2.12.2] - 2025-03-17
|
102
|
+
|
103
|
+
### Fixed
|
104
|
+
|
105
|
+
* AppSec: Fix custom In-App WAF blocking response that was configured in the UI is now applied correctly ([#4497][])
|
106
|
+
|
5
107
|
## [2.12.1] - 2025-03-05
|
6
108
|
|
7
109
|
### Fixed
|
@@ -3139,7 +3241,13 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
3139
3241
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
3140
3242
|
|
3141
3243
|
|
3142
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.
|
3244
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.17.0...master
|
3245
|
+
[2.17.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.16.0...v2.17.0
|
3246
|
+
[2.16.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.15.0...v2.16.0
|
3247
|
+
[2.15.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.14.0...v2.15.0
|
3248
|
+
[2.14.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.13.0...v2.14.0
|
3249
|
+
[2.13.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.2...v2.13.0
|
3250
|
+
[2.12.2]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.1...v2.12.2
|
3143
3251
|
[2.12.1]: https://github.com/DataDog/dd-trace-rb/compare/v2.12.0...v2.12.1
|
3144
3252
|
[2.12.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.11.0...v2.12.0
|
3145
3253
|
[2.11.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.10.0...v2.11.0
|
@@ -4600,6 +4708,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
4600
4708
|
[#4085]: https://github.com/DataDog/dd-trace-rb/issues/4085
|
4601
4709
|
[#4137]: https://github.com/DataDog/dd-trace-rb/issues/4137
|
4602
4710
|
[#4140]: https://github.com/DataDog/dd-trace-rb/issues/4140
|
4711
|
+
[#4147]: https://github.com/DataDog/dd-trace-rb/issues/4147
|
4603
4712
|
[#4153]: https://github.com/DataDog/dd-trace-rb/issues/4153
|
4604
4713
|
[#4161]: https://github.com/DataDog/dd-trace-rb/issues/4161
|
4605
4714
|
[#4164]: https://github.com/DataDog/dd-trace-rb/issues/4164
|
@@ -4636,13 +4745,56 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
4636
4745
|
[#4391]: https://github.com/DataDog/dd-trace-rb/issues/4391
|
4637
4746
|
[#4398]: https://github.com/DataDog/dd-trace-rb/issues/4398
|
4638
4747
|
[#4399]: https://github.com/DataDog/dd-trace-rb/issues/4399
|
4748
|
+
[#4403]: https://github.com/DataDog/dd-trace-rb/issues/4403
|
4639
4749
|
[#4406]: https://github.com/DataDog/dd-trace-rb/issues/4406
|
4640
4750
|
[#4411]: https://github.com/DataDog/dd-trace-rb/issues/4411
|
4641
4751
|
[#4422]: https://github.com/DataDog/dd-trace-rb/issues/4422
|
4642
4752
|
[#4424]: https://github.com/DataDog/dd-trace-rb/issues/4424
|
4643
4753
|
[#4425]: https://github.com/DataDog/dd-trace-rb/issues/4425
|
4644
4754
|
[#4426]: https://github.com/DataDog/dd-trace-rb/issues/4426
|
4755
|
+
[#4433]: https://github.com/DataDog/dd-trace-rb/issues/4433
|
4645
4756
|
[#4437]: https://github.com/DataDog/dd-trace-rb/issues/4437
|
4757
|
+
[#4455]: https://github.com/DataDog/dd-trace-rb/issues/4455
|
4758
|
+
[#4473]: https://github.com/DataDog/dd-trace-rb/issues/4473
|
4759
|
+
[#4493]: https://github.com/DataDog/dd-trace-rb/issues/4493
|
4760
|
+
[#4497]: https://github.com/DataDog/dd-trace-rb/issues/4497
|
4761
|
+
[#4498]: https://github.com/DataDog/dd-trace-rb/issues/4498
|
4762
|
+
[#4505]: https://github.com/DataDog/dd-trace-rb/issues/4505
|
4763
|
+
[#4507]: https://github.com/DataDog/dd-trace-rb/issues/4507
|
4764
|
+
[#4509]: https://github.com/DataDog/dd-trace-rb/issues/4509
|
4765
|
+
[#4526]: https://github.com/DataDog/dd-trace-rb/issues/4526
|
4766
|
+
[#4528]: https://github.com/DataDog/dd-trace-rb/issues/4528
|
4767
|
+
[#4530]: https://github.com/DataDog/dd-trace-rb/issues/4530
|
4768
|
+
[#4534]: https://github.com/DataDog/dd-trace-rb/issues/4534
|
4769
|
+
[#4547]: https://github.com/DataDog/dd-trace-rb/issues/4547
|
4770
|
+
[#4549]: https://github.com/DataDog/dd-trace-rb/issues/4549
|
4771
|
+
[#4552]: https://github.com/DataDog/dd-trace-rb/issues/4552
|
4772
|
+
[#4558]: https://github.com/DataDog/dd-trace-rb/issues/4558
|
4773
|
+
[#4568]: https://github.com/DataDog/dd-trace-rb/issues/4568
|
4774
|
+
[#4573]: https://github.com/DataDog/dd-trace-rb/issues/4573
|
4775
|
+
[#4575]: https://github.com/DataDog/dd-trace-rb/issues/4575
|
4776
|
+
[#4577]: https://github.com/DataDog/dd-trace-rb/issues/4577
|
4777
|
+
[#4580]: https://github.com/DataDog/dd-trace-rb/issues/4580
|
4778
|
+
[#4581]: https://github.com/DataDog/dd-trace-rb/issues/4581
|
4779
|
+
[#4590]: https://github.com/DataDog/dd-trace-rb/issues/4590
|
4780
|
+
[#4600]: https://github.com/DataDog/dd-trace-rb/issues/4600
|
4781
|
+
[#4602]: https://github.com/DataDog/dd-trace-rb/issues/4602
|
4782
|
+
[#4604]: https://github.com/DataDog/dd-trace-rb/issues/4604
|
4783
|
+
[#4610]: https://github.com/DataDog/dd-trace-rb/issues/4610
|
4784
|
+
[#4611]: https://github.com/DataDog/dd-trace-rb/issues/4611
|
4785
|
+
[#4613]: https://github.com/DataDog/dd-trace-rb/issues/4613
|
4786
|
+
[#4614]: https://github.com/DataDog/dd-trace-rb/issues/4614
|
4787
|
+
[#4616]: https://github.com/DataDog/dd-trace-rb/issues/4616
|
4788
|
+
[#4625]: https://github.com/DataDog/dd-trace-rb/issues/4625
|
4789
|
+
[#4644]: https://github.com/DataDog/dd-trace-rb/issues/4644
|
4790
|
+
[#4653]: https://github.com/DataDog/dd-trace-rb/issues/4653
|
4791
|
+
[#4656]: https://github.com/DataDog/dd-trace-rb/issues/4656
|
4792
|
+
[#4665]: https://github.com/DataDog/dd-trace-rb/issues/4665
|
4793
|
+
[#4669]: https://github.com/DataDog/dd-trace-rb/issues/4669
|
4794
|
+
[#4672]: https://github.com/DataDog/dd-trace-rb/issues/4672
|
4795
|
+
[#4673]: https://github.com/DataDog/dd-trace-rb/issues/4673
|
4796
|
+
[#4678]: https://github.com/DataDog/dd-trace-rb/issues/4678
|
4797
|
+
[#4679]: https://github.com/DataDog/dd-trace-rb/issues/4679
|
4646
4798
|
[@AdrianLC]: https://github.com/AdrianLC
|
4647
4799
|
[@Azure7111]: https://github.com/Azure7111
|
4648
4800
|
[@BabyGroot]: https://github.com/BabyGroot
|
@@ -4794,4 +4946,4 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
4794
4946
|
[@y-yagi]: https://github.com/y-yagi
|
4795
4947
|
[@yujideveloper]: https://github.com/yujideveloper
|
4796
4948
|
[@yukimurasawa]: https://github.com/yukimurasawa
|
4797
|
-
[@zachmccormick]: https://github.com/zachmccormick
|
4949
|
+
[@zachmccormick]: https://github.com/zachmccormick
|
@@ -212,7 +212,7 @@ static VALUE _native_initialize(int argc, VALUE *argv, DDTRACE_UNUSED VALUE _sel
|
|
212
212
|
static VALUE _native_sample(VALUE self, VALUE collector_instance, VALUE profiler_overhead_stack_thread, VALUE allow_exception);
|
213
213
|
static VALUE _native_on_gc_start(VALUE self, VALUE collector_instance);
|
214
214
|
static VALUE _native_on_gc_finish(VALUE self, VALUE collector_instance);
|
215
|
-
static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE
|
215
|
+
static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE allow_exception);
|
216
216
|
static void update_metrics_and_sample(
|
217
217
|
thread_context_collector_state *state,
|
218
218
|
VALUE thread_being_sampled,
|
@@ -297,6 +297,7 @@ static void otel_without_ddtrace_trace_identifiers_for(
|
|
297
297
|
static otel_span otel_span_from(VALUE otel_context, VALUE otel_current_span_key);
|
298
298
|
static uint64_t otel_span_id_to_uint(VALUE otel_span_id);
|
299
299
|
static VALUE safely_lookup_hash_without_going_into_ruby_code(VALUE hash, VALUE key);
|
300
|
+
static VALUE _native_system_epoch_time_now_ns(DDTRACE_UNUSED VALUE self, VALUE collector_instance);
|
300
301
|
|
301
302
|
void collectors_thread_context_init(VALUE profiling_module) {
|
302
303
|
VALUE collectors_module = rb_define_module_under(profiling_module, "Collectors");
|
@@ -321,13 +322,14 @@ void collectors_thread_context_init(VALUE profiling_module) {
|
|
321
322
|
rb_define_singleton_method(testing_module, "_native_sample_allocation", _native_sample_allocation, 3);
|
322
323
|
rb_define_singleton_method(testing_module, "_native_on_gc_start", _native_on_gc_start, 1);
|
323
324
|
rb_define_singleton_method(testing_module, "_native_on_gc_finish", _native_on_gc_finish, 1);
|
324
|
-
rb_define_singleton_method(testing_module, "_native_sample_after_gc", _native_sample_after_gc,
|
325
|
+
rb_define_singleton_method(testing_module, "_native_sample_after_gc", _native_sample_after_gc, 2);
|
325
326
|
rb_define_singleton_method(testing_module, "_native_thread_list", _native_thread_list, 0);
|
326
327
|
rb_define_singleton_method(testing_module, "_native_per_thread_context", _native_per_thread_context, 1);
|
327
328
|
rb_define_singleton_method(testing_module, "_native_stats", _native_stats, 1);
|
328
329
|
rb_define_singleton_method(testing_module, "_native_gc_tracking", _native_gc_tracking, 1);
|
329
330
|
rb_define_singleton_method(testing_module, "_native_new_empty_thread", _native_new_empty_thread, 0);
|
330
331
|
rb_define_singleton_method(testing_module, "_native_sample_skipped_allocation_samples", _native_sample_skipped_allocation_samples, 2);
|
332
|
+
rb_define_singleton_method(testing_module, "_native_system_epoch_time_now_ns", _native_system_epoch_time_now_ns, 1);
|
331
333
|
#ifndef NO_GVL_INSTRUMENTATION
|
332
334
|
rb_define_singleton_method(testing_module, "_native_on_gvl_waiting", _native_on_gvl_waiting, 1);
|
333
335
|
rb_define_singleton_method(testing_module, "_native_gvl_waiting_at_for", _native_gvl_waiting_at_for, 1);
|
@@ -551,19 +553,9 @@ static VALUE _native_on_gc_finish(DDTRACE_UNUSED VALUE self, VALUE collector_ins
|
|
551
553
|
return Qtrue;
|
552
554
|
}
|
553
555
|
|
554
|
-
|
555
|
-
// It SHOULD NOT be used for other purposes.
|
556
|
-
static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE reset_monotonic_to_system_state, VALUE allow_exception) {
|
557
|
-
ENFORCE_BOOLEAN(reset_monotonic_to_system_state);
|
556
|
+
static VALUE _native_sample_after_gc(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE allow_exception) {
|
558
557
|
ENFORCE_BOOLEAN(allow_exception);
|
559
558
|
|
560
|
-
thread_context_collector_state *state;
|
561
|
-
TypedData_Get_Struct(collector_instance, thread_context_collector_state, &thread_context_collector_typed_data, state);
|
562
|
-
|
563
|
-
if (reset_monotonic_to_system_state == Qtrue) {
|
564
|
-
state->time_converter_state = (monotonic_to_system_epoch_state) MONOTONIC_TO_SYSTEM_EPOCH_INITIALIZER;
|
565
|
-
}
|
566
|
-
|
567
559
|
if (allow_exception == Qfalse) debug_enter_unsafe_context();
|
568
560
|
|
569
561
|
thread_context_collector_sample_after_gc(collector_instance);
|
@@ -1316,7 +1308,7 @@ static long thread_id_for(VALUE thread) {
|
|
1316
1308
|
}
|
1317
1309
|
|
1318
1310
|
VALUE enforce_thread_context_collector_instance(VALUE object) {
|
1319
|
-
|
1311
|
+
ENFORCE_TYPED_DATA(object, &thread_context_collector_typed_data);
|
1320
1312
|
return object;
|
1321
1313
|
}
|
1322
1314
|
|
@@ -2167,3 +2159,13 @@ static VALUE safely_lookup_hash_without_going_into_ruby_code(VALUE hash, VALUE k
|
|
2167
2159
|
|
2168
2160
|
return state.result;
|
2169
2161
|
}
|
2162
|
+
|
2163
|
+
static VALUE _native_system_epoch_time_now_ns(DDTRACE_UNUSED VALUE self, VALUE collector_instance) {
|
2164
|
+
thread_context_collector_state *state;
|
2165
|
+
TypedData_Get_Struct(collector_instance, thread_context_collector_state, &thread_context_collector_typed_data, state);
|
2166
|
+
|
2167
|
+
long current_monotonic_wall_time_ns = monotonic_wall_time_now_ns(RAISE_ON_FAILURE);
|
2168
|
+
long system_epoch_time_ns = monotonic_to_system_epoch_ns(&state->time_converter_state, current_monotonic_wall_time_ns);
|
2169
|
+
|
2170
|
+
return LONG2NUM(system_epoch_time_ns);
|
2171
|
+
}
|
@@ -29,10 +29,7 @@ VALUE datadog_gem_version(void) {
|
|
29
29
|
}
|
30
30
|
|
31
31
|
static VALUE log_failure_to_process_tag(VALUE err_details) {
|
32
|
-
|
33
|
-
VALUE logger = rb_funcall(datadog_module, rb_intern("logger"), 0);
|
34
|
-
|
35
|
-
return rb_funcall(logger, rb_intern("warn"), 1, rb_sprintf("Failed to convert tag: %"PRIsVALUE, err_details));
|
32
|
+
return log_warning(rb_sprintf("Failed to convert tag: %"PRIsVALUE, err_details));
|
36
33
|
}
|
37
34
|
|
38
35
|
__attribute__((warn_unused_result))
|
@@ -27,6 +27,9 @@
|
|
27
27
|
#define ENFORCE_BOOLEAN(value) \
|
28
28
|
{ if (RB_UNLIKELY(value != Qtrue && value != Qfalse)) raise_unexpected_type(value, ADD_QUOTES(value), "true or false", __FILE__, __LINE__, __func__); }
|
29
29
|
|
30
|
+
#define ENFORCE_TYPED_DATA(value, type) \
|
31
|
+
{ if (RB_UNLIKELY(!rb_typeddata_is_kind_of(value, type))) raise_unexpected_type(value, ADD_QUOTES(value), "TypedData of type " ADD_QUOTES(type), __FILE__, __LINE__, __func__); }
|
32
|
+
|
30
33
|
NORETURN(void raise_unexpected_type(VALUE value, const char *value_name, const char *type_name, const char *file, int line, const char* function_name));
|
31
34
|
|
32
35
|
// Helper to retrieve Datadog::VERSION::STRING
|
@@ -38,6 +41,13 @@ static inline ddog_CharSlice char_slice_from_ruby_string(VALUE string) {
|
|
38
41
|
return char_slice;
|
39
42
|
}
|
40
43
|
|
44
|
+
static inline VALUE log_warning(VALUE warning) {
|
45
|
+
VALUE datadog_module = rb_const_get(rb_cObject, rb_intern("Datadog"));
|
46
|
+
VALUE logger = rb_funcall(datadog_module, rb_intern("logger"), 0);
|
47
|
+
|
48
|
+
return rb_funcall(logger, rb_intern("warn"), 1, warning);
|
49
|
+
}
|
50
|
+
|
41
51
|
__attribute__((warn_unused_result))
|
42
52
|
ddog_Vec_Tag convert_tags(VALUE tags_as_array);
|
43
53
|
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#include "encoded_profile.h"
|
2
|
+
#include "datadog_ruby_common.h"
|
3
|
+
#include "libdatadog_helpers.h"
|
4
|
+
|
5
|
+
// This class exists to wrap a ddog_prof_EncodedProfile into a Ruby object
|
6
|
+
// This file implements the native bits of the Datadog::Profiling::EncodedProfile class
|
7
|
+
|
8
|
+
static void encoded_profile_typed_data_free(void *state_ptr);
|
9
|
+
static VALUE _native_bytes(VALUE self);
|
10
|
+
|
11
|
+
static VALUE encoded_profile_class = Qnil;
|
12
|
+
|
13
|
+
void encoded_profile_init(VALUE profiling_module) {
|
14
|
+
encoded_profile_class = rb_define_class_under(profiling_module, "EncodedProfile", rb_cObject);
|
15
|
+
|
16
|
+
rb_undef_alloc_func(encoded_profile_class); // Class cannot be created from Ruby code
|
17
|
+
rb_global_variable(&encoded_profile_class);
|
18
|
+
|
19
|
+
rb_define_method(encoded_profile_class, "_native_bytes", _native_bytes, 0);
|
20
|
+
}
|
21
|
+
|
22
|
+
// This structure is used to define a Ruby object that stores a `ddog_prof_EncodedProfile`
|
23
|
+
// See also https://github.com/ruby/ruby/blob/master/doc/extension.rdoc for how this works
|
24
|
+
static const rb_data_type_t encoded_profile_typed_data = {
|
25
|
+
.wrap_struct_name = "Datadog::Profiling::EncodedProfile",
|
26
|
+
.function = {
|
27
|
+
.dmark = NULL, // We don't store references to Ruby objects so we don't need to mark any of them
|
28
|
+
.dfree = encoded_profile_typed_data_free,
|
29
|
+
.dsize = NULL, // We don't track memory usage (although it'd be cool if we did!)
|
30
|
+
//.dcompact = NULL, // Not needed -- we don't store references to Ruby objects
|
31
|
+
},
|
32
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
33
|
+
};
|
34
|
+
|
35
|
+
VALUE from_ddog_prof_EncodedProfile(ddog_prof_EncodedProfile profile) {
|
36
|
+
ddog_prof_EncodedProfile *state = ruby_xcalloc(1, sizeof(ddog_prof_EncodedProfile));
|
37
|
+
*state = profile;
|
38
|
+
return TypedData_Wrap_Struct(encoded_profile_class, &encoded_profile_typed_data, state);
|
39
|
+
}
|
40
|
+
|
41
|
+
static ddog_ByteSlice get_bytes(ddog_prof_EncodedProfile *state) {
|
42
|
+
ddog_prof_Result_ByteSlice raw_bytes = ddog_prof_EncodedProfile_bytes(state);
|
43
|
+
if (raw_bytes.tag == DDOG_PROF_RESULT_BYTE_SLICE_ERR_BYTE_SLICE) {
|
44
|
+
rb_raise(rb_eRuntimeError, "Failed to get bytes from profile: %"PRIsVALUE, get_error_details_and_drop(&raw_bytes.err));
|
45
|
+
}
|
46
|
+
return raw_bytes.ok;
|
47
|
+
}
|
48
|
+
|
49
|
+
static ddog_prof_EncodedProfile *internal_to_ddog_prof_EncodedProfile(VALUE object) {
|
50
|
+
ddog_prof_EncodedProfile *state;
|
51
|
+
TypedData_Get_Struct(object, ddog_prof_EncodedProfile, &encoded_profile_typed_data, state);
|
52
|
+
return state;
|
53
|
+
}
|
54
|
+
|
55
|
+
ddog_prof_EncodedProfile *to_ddog_prof_EncodedProfile(VALUE object) {
|
56
|
+
ddog_prof_EncodedProfile *state = internal_to_ddog_prof_EncodedProfile(object);
|
57
|
+
get_bytes(state); // Validate profile is still usable -- if it's not, this will raise an exception
|
58
|
+
return state;
|
59
|
+
}
|
60
|
+
|
61
|
+
static void encoded_profile_typed_data_free(void *state_ptr) {
|
62
|
+
ddog_prof_EncodedProfile *state = (ddog_prof_EncodedProfile *) state_ptr;
|
63
|
+
|
64
|
+
// This drops the profile itself
|
65
|
+
ddog_prof_EncodedProfile_drop(state);
|
66
|
+
|
67
|
+
// This drops the tiny bit of memory we allocated to contain the ` ddog_prof_EncodedProfile` struct
|
68
|
+
ruby_xfree(state);
|
69
|
+
}
|
70
|
+
|
71
|
+
static VALUE _native_bytes(VALUE self) {
|
72
|
+
ddog_ByteSlice bytes = get_bytes(internal_to_ddog_prof_EncodedProfile(self));
|
73
|
+
return rb_str_new((const char *) bytes.ptr, bytes.len);
|
74
|
+
}
|
75
|
+
|
76
|
+
VALUE enforce_encoded_profile_instance(VALUE object) {
|
77
|
+
ENFORCE_TYPED_DATA(object, &encoded_profile_typed_data);
|
78
|
+
return object;
|
79
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <ruby.h>
|
4
|
+
#include <datadog/profiling.h>
|
5
|
+
|
6
|
+
VALUE from_ddog_prof_EncodedProfile(ddog_prof_EncodedProfile profile);
|
7
|
+
VALUE enforce_encoded_profile_instance(VALUE object);
|
8
|
+
ddog_prof_EncodedProfile *to_ddog_prof_EncodedProfile(VALUE object);
|
@@ -131,6 +131,9 @@ end
|
|
131
131
|
|
132
132
|
have_func "malloc_stats"
|
133
133
|
|
134
|
+
# On Ruby 3.5, we can't ask the object_id from IMEMOs (https://github.com/ruby/ruby/pull/13347)
|
135
|
+
$defs << "-DNO_IMEMO_OBJECT_ID" unless RUBY_VERSION < "3.5"
|
136
|
+
|
134
137
|
# On Ruby 2.5 and 3.3, this symbol was not visible. It is on 2.6 to 3.2, as well as 3.4+
|
135
138
|
$defs << "-DNO_RB_OBJ_INFO" if RUBY_VERSION.start_with?("2.5", "3.3")
|
136
139
|
|
@@ -314,7 +314,14 @@ void start_heap_allocation_recording(heap_recorder *heap_recorder, VALUE new_obj
|
|
314
314
|
rb_raise(rb_eRuntimeError, "Detected consecutive heap allocation recording starts without end.");
|
315
315
|
}
|
316
316
|
|
317
|
-
if (++heap_recorder->num_recordings_skipped < heap_recorder->sample_rate
|
317
|
+
if (++heap_recorder->num_recordings_skipped < heap_recorder->sample_rate ||
|
318
|
+
#ifdef NO_IMEMO_OBJECT_ID
|
319
|
+
// On Ruby 3.5, we can't ask the object_id from IMEMOs (https://github.com/ruby/ruby/pull/13347)
|
320
|
+
RB_BUILTIN_TYPE(new_obj) == RUBY_T_IMEMO
|
321
|
+
#else
|
322
|
+
false
|
323
|
+
#endif
|
324
|
+
) {
|
318
325
|
heap_recorder->active_recording = &SKIPPED_RECORD;
|
319
326
|
return;
|
320
327
|
}
|