datadog 2.21.0 → 2.23.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 +106 -2
- data/ext/LIBDATADOG_DEVELOPMENT.md +3 -0
- data/ext/datadog_profiling_native_extension/collectors_discrete_dynamic_sampler.c +1 -1
- data/ext/datadog_profiling_native_extension/collectors_stack.c +4 -0
- data/ext/datadog_profiling_native_extension/datadog_ruby_common.h +1 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +6 -4
- data/ext/datadog_profiling_native_extension/heap_recorder.c +1 -1
- data/ext/libdatadog_api/datadog_ruby_common.h +1 -1
- data/ext/libdatadog_api/ddsketch.c +106 -0
- data/ext/libdatadog_api/feature_flags.c +554 -0
- data/ext/libdatadog_api/feature_flags.h +5 -0
- data/ext/libdatadog_api/init.c +5 -0
- data/ext/libdatadog_api/library_config.c +34 -25
- data/ext/libdatadog_api/process_discovery.c +19 -13
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/grape_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +59 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_route_serializer.rb +29 -0
- data/lib/datadog/appsec/api_security/endpoint_collection/sinatra_route_serializer.rb +26 -0
- data/lib/datadog/appsec/api_security/endpoint_collection.rb +10 -0
- data/lib/datadog/appsec/api_security/route_extractor.rb +23 -6
- data/lib/datadog/appsec/api_security/sampler.rb +7 -4
- data/lib/datadog/appsec/assets/blocked.html +8 -0
- data/lib/datadog/appsec/assets/blocked.json +1 -1
- data/lib/datadog/appsec/assets/blocked.text +3 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +30 -36
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +359 -4
- data/lib/datadog/appsec/assets/waf_rules/strict.json +43 -2
- data/lib/datadog/appsec/assets.rb +1 -1
- data/lib/datadog/appsec/compressed_json.rb +1 -1
- data/lib/datadog/appsec/configuration/settings.rb +9 -0
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +3 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +3 -2
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +3 -1
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +3 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +9 -4
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +30 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +3 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +10 -4
- data/lib/datadog/appsec/event.rb +12 -14
- data/lib/datadog/appsec/metrics/collector.rb +19 -3
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +2 -1
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +4 -4
- data/lib/datadog/appsec/remote.rb +29 -13
- data/lib/datadog/appsec/response.rb +18 -4
- data/lib/datadog/appsec/security_engine/result.rb +28 -9
- data/lib/datadog/appsec/security_engine/runner.rb +17 -7
- data/lib/datadog/appsec/security_event.rb +5 -7
- data/lib/datadog/core/configuration/components.rb +44 -9
- data/lib/datadog/core/configuration/config_helper.rb +1 -1
- data/lib/datadog/core/configuration/settings.rb +14 -0
- data/lib/datadog/core/configuration/stable_config.rb +10 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +330 -299
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/ddsketch.rb +19 -0
- data/lib/datadog/core/environment/ext.rb +6 -0
- data/lib/datadog/core/environment/process.rb +79 -0
- data/lib/datadog/core/environment/yjit.rb +2 -1
- data/lib/datadog/core/feature_flags.rb +61 -0
- data/lib/datadog/core/pin.rb +4 -8
- data/lib/datadog/core/process_discovery.rb +4 -2
- data/lib/datadog/core/remote/client/capabilities.rb +7 -0
- data/lib/datadog/core/remote/component.rb +4 -6
- data/lib/datadog/core/remote/transport/config.rb +2 -10
- data/lib/datadog/core/remote/transport/http/config.rb +9 -9
- data/lib/datadog/core/remote/transport/http/negotiation.rb +17 -8
- data/lib/datadog/core/remote/transport/http.rb +2 -0
- data/lib/datadog/core/remote/transport/negotiation.rb +2 -18
- data/lib/datadog/core/remote/worker.rb +25 -37
- data/lib/datadog/core/tag_builder.rb +0 -4
- data/lib/datadog/core/tag_normalizer.rb +84 -0
- data/lib/datadog/core/telemetry/component.rb +18 -3
- data/lib/datadog/core/telemetry/emitter.rb +6 -6
- data/lib/datadog/core/telemetry/event/app_endpoints_loaded.rb +30 -0
- data/lib/datadog/core/telemetry/event/app_started.rb +52 -49
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +1 -1
- data/lib/datadog/core/telemetry/event.rb +1 -0
- data/lib/datadog/core/telemetry/logger.rb +2 -2
- data/lib/datadog/core/telemetry/logging.rb +2 -8
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -6
- data/lib/datadog/core/telemetry/transport/telemetry.rb +1 -2
- data/lib/datadog/core/transport/http/client.rb +69 -0
- data/lib/datadog/core/transport/response.rb +4 -1
- data/lib/datadog/core/utils/array.rb +29 -0
- data/lib/datadog/{appsec/api_security → core/utils}/lru_cache.rb +10 -21
- data/lib/datadog/core/utils/network.rb +22 -1
- data/lib/datadog/core/utils/only_once_successful.rb +6 -2
- data/lib/datadog/core/utils.rb +2 -0
- data/lib/datadog/data_streams/configuration/settings.rb +49 -0
- data/lib/datadog/data_streams/configuration.rb +11 -0
- data/lib/datadog/data_streams/ext.rb +11 -0
- data/lib/datadog/data_streams/extensions.rb +16 -0
- data/lib/datadog/data_streams/pathway_context.rb +169 -0
- data/lib/datadog/data_streams/processor.rb +509 -0
- data/lib/datadog/data_streams/transport/http/api.rb +33 -0
- data/lib/datadog/data_streams/transport/http/client.rb +21 -0
- data/lib/datadog/data_streams/transport/http/stats.rb +87 -0
- data/lib/datadog/data_streams/transport/http.rb +41 -0
- data/lib/datadog/data_streams/transport/stats.rb +60 -0
- data/lib/datadog/data_streams.rb +100 -0
- data/lib/datadog/di/boot.rb +1 -0
- data/lib/datadog/di/component.rb +14 -16
- data/lib/datadog/di/context.rb +70 -0
- data/lib/datadog/di/el/compiler.rb +164 -0
- data/lib/datadog/di/el/evaluator.rb +159 -0
- data/lib/datadog/di/el/expression.rb +42 -0
- data/lib/datadog/di/el.rb +5 -0
- data/lib/datadog/di/error.rb +29 -0
- data/lib/datadog/di/instrumenter.rb +163 -48
- data/lib/datadog/di/probe.rb +55 -15
- data/lib/datadog/di/probe_builder.rb +39 -1
- data/lib/datadog/di/probe_manager.rb +13 -4
- data/lib/datadog/di/probe_notification_builder.rb +105 -67
- data/lib/datadog/di/proc_responder.rb +32 -0
- data/lib/datadog/di/serializer.rb +151 -7
- data/lib/datadog/di/transport/diagnostics.rb +2 -2
- data/lib/datadog/di/transport/http/diagnostics.rb +2 -4
- data/lib/datadog/di/transport/http/input.rb +2 -4
- data/lib/datadog/di/transport/http.rb +6 -2
- data/lib/datadog/di/transport/input.rb +64 -4
- data/lib/datadog/open_feature/component.rb +60 -0
- data/lib/datadog/open_feature/configuration.rb +27 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +69 -0
- data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
- data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
- data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
- data/lib/datadog/open_feature/exposures/event.rb +60 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
- data/lib/datadog/open_feature/exposures/worker.rb +116 -0
- data/lib/datadog/open_feature/ext.rb +14 -0
- data/lib/datadog/open_feature/native_evaluator.rb +38 -0
- data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
- data/lib/datadog/open_feature/provider.rb +141 -0
- data/lib/datadog/open_feature/remote.rb +74 -0
- data/lib/datadog/open_feature/resolution_details.rb +35 -0
- data/lib/datadog/open_feature/transport.rb +72 -0
- data/lib/datadog/open_feature.rb +19 -0
- data/lib/datadog/opentelemetry/configuration/settings.rb +159 -0
- data/lib/datadog/opentelemetry/metrics.rb +110 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +25 -1
- data/lib/datadog/opentelemetry/sdk/metrics_exporter.rb +38 -0
- data/lib/datadog/opentelemetry.rb +3 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +15 -6
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +1 -1
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +4 -0
- data/lib/datadog/profiling/tag_builder.rb +36 -3
- data/lib/datadog/profiling.rb +1 -2
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/tracing/component.rb +6 -17
- data/lib/datadog/tracing/configuration/dynamic.rb +2 -2
- data/lib/datadog/tracing/configuration/ext.rb +9 -0
- data/lib/datadog/tracing/configuration/settings.rb +77 -3
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -2
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +21 -7
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +4 -2
- data/lib/datadog/tracing/contrib/component.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -1
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +11 -7
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +7 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +74 -44
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +11 -3
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +66 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +14 -0
- data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +11 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +32 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +59 -27
- data/lib/datadog/tracing/contrib/rack/route_inference.rb +53 -0
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -1
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +3 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +3 -1
- data/lib/datadog/tracing/contrib/status_range_matcher.rb +7 -0
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +37 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/metadata/ext.rb +9 -1
- data/lib/datadog/tracing/transport/http/client.rb +12 -26
- data/lib/datadog/tracing/transport/trace_formatter.rb +11 -0
- data/lib/datadog/tracing/transport/traces.rb +3 -5
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +2 -0
- metadata +92 -16
- data/ext/libdatadog_api/macos_development.md +0 -26
- data/lib/datadog/core/remote/transport/http/client.rb +0 -49
- data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
- data/lib/datadog/di/transport/http/client.rb +0 -47
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a168735b19c403a74cd23f49a301a74006d827ff24f62cc93255a353d0415359
|
|
4
|
+
data.tar.gz: 7f6df03ec7834bf5709b36d8fa9a8213ad5c5f9bf04e299acb7d3c1e781760e7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a933fb99fd374b1da93fd0a70b7cb33b2396977e8388ebfd5e12d968da7158ef8fc23a73672c308f8a72e433525c99ac1182285adc2df1eb244082efeef374bb
|
|
7
|
+
data.tar.gz: 224bbcc48cde29a3a85c1eea9d5e1653ed26ad2d195389e599f2e4614158d63284c92fbf155cbd7bf584930195d4b30b7bf5a8a1fd6951ac798c1d3a1b35969b
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,65 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [2.23.0] - 2025-12-11
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
* Tracing: Add process tags to trace payloads with `DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED` environment variable ([#5033][])
|
|
10
|
+
* Tracing: Integrations: Add Data Streams Monitoring (DSM) instrumentation to Waterdrop producers ([#5031][])
|
|
11
|
+
* Tracing: Open Telemetry: Add OpenTelemetry metrics support with OTLP exporters using `DD_METRICS_OTEL_ENABLED` and standard OpenTelemetry environment variables ([#5021][])
|
|
12
|
+
* Tracing: Add `http.endpoint` tag which contains the route whenever routing info is available, and falls back to route inferred from the request path ([#4995][])
|
|
13
|
+
* Tracing: Add configuration of HTTP client and server error ranges via `DD_TRACE_HTTP_CLIENT_ERROR_STATUSES` and `DD_TRACE_HTTP_SERVER_ERROR_STATUSES` ([#4991][])
|
|
14
|
+
* Tracing: Integrations: Add Data Streams Monitoring for `ruby-kafka` and `karafka` consumers with optional manual instrumentation ([#4901][])
|
|
15
|
+
* Dynamic Instrumentation: Add support for Hash length operations in expression language ([#5019][])
|
|
16
|
+
* AppSec: Add unique security response identifier in the response body for blocked requests ([#5049][])
|
|
17
|
+
* AppSec: Add support for processor overrides and custom data scanners ([#5044][])
|
|
18
|
+
* Feature Flags: Add new component to support Open Feature SDK ([#5054][], [#5024][])
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
* Core: Update minimum `datadog-ruby_core_source` dependency to 3.4.2 ([#5122][])
|
|
23
|
+
* Core: Update `libdatadog` dependency to version 24.0.1 ([#5058][], [#5045][], [#5020][])
|
|
24
|
+
* Tracing: Treat IPs from `100.65.0.0/10` range as private. ([#4975][])
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
* Live Debugger / Dynamic Instrumentation: Fix issues delivering large quantities of snapshots ([#5086][])
|
|
29
|
+
* Tracing: Integrations: Fix `NoMethodError` in GraphQL integration when error has no `locations`. ([#5025][])
|
|
30
|
+
* Tracing: Integrations: Fix `http.route` tag for Rack applications mounted inside Rails. ([#4988][])
|
|
31
|
+
* Profiling: Fix profiler support for Ruby 4.0.0-preview2 ([#5091][])
|
|
32
|
+
* Profiling: Fix profiler sleep and wait states not being categorized in timeline ([#5000][])
|
|
33
|
+
* Profiling: Fix profiler not identifying executables with gems they belong to ([#4999][])
|
|
34
|
+
* Stable Config: Fix potential segfault during configuration file parsing ([#5073][])
|
|
35
|
+
* AppSec: Fix route extraction error for Rails 8.1.1+. ([#5042][])
|
|
36
|
+
|
|
37
|
+
## [2.22.0] - 2025-10-15
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
* Tracing: Add GraphQL error tracking with OpenTelemetry semantics ([#4864][])
|
|
42
|
+
* AppSec: API Security: Add endpoint collection for Rails ([#4919][])
|
|
43
|
+
* AppSec: Updated WAF rules to add support for JWT analysis ([#4907][])
|
|
44
|
+
* AppSec: Enable Remote Configuration capabilities for fingerprinting, trace tagging and user auto-instrumentation ([#4965][])
|
|
45
|
+
* Dynamic Instrumentation: Support `[@duration][]`, `[@return][]` and `[@exception][]` in message templates ([#4914][])
|
|
46
|
+
* Dynamic Instrumentation: Report evaluation errors to the UI ([#4913][])
|
|
47
|
+
* Dynamic Instrumentation: Support conditions for method probes ([#4909][])
|
|
48
|
+
* Dynamic Instrumentation: Capture exceptions raised by instrumented methods in method probes ([#4906][])
|
|
49
|
+
* Dynamic Instrumentation: Add support for probe conditions for line probes ([#4861][])
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
* Core: Upgrade `libdatadog` dependency to 22.0.1 ([#4902][])
|
|
54
|
+
* Tracing: Add `Forwarded` header to the list of headers used for remote IP detection. ([#4969][])
|
|
55
|
+
* AppSec: Update `libbddwaf` to version 1.25.1.0.1 ([#4894][])
|
|
56
|
+
* AppSec: WAF rules can control whether traces are kept or sampled ([#4918][])
|
|
57
|
+
* Dynamic Instrumentation: Evaluate message templates when logging instrumented code ([#4908][])
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
* Core: Improve locking code for remote configuration worker ([#4957][])
|
|
62
|
+
* Dynamic Instrumentation: Emit a single log event for line probes on exception-raising lines ([#4900][])
|
|
63
|
+
|
|
5
64
|
## [2.21.0] - 2025-09-17
|
|
6
65
|
|
|
7
66
|
### Added
|
|
@@ -3333,7 +3392,9 @@ Release notes: https://github.com/DataDog/dd-trace-rb/releases/tag/v0.3.1
|
|
|
3333
3392
|
Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
3334
3393
|
|
|
3335
3394
|
|
|
3336
|
-
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.
|
|
3395
|
+
[Unreleased]: https://github.com/DataDog/dd-trace-rb/compare/v2.23.0...master
|
|
3396
|
+
[2.23.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.22.0...v2.23.0
|
|
3397
|
+
[2.22.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.21.0...v2.22.0
|
|
3337
3398
|
[2.21.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.20.0...v2.21.0
|
|
3338
3399
|
[2.20.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.19.0...v2.20.0
|
|
3339
3400
|
[2.19.0]: https://github.com/DataDog/dd-trace-rb/compare/v2.18.0...v2.19.0
|
|
@@ -4929,12 +4990,52 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
4929
4990
|
[#4838]: https://github.com/DataDog/dd-trace-rb/issues/4838
|
|
4930
4991
|
[#4848]: https://github.com/DataDog/dd-trace-rb/issues/4848
|
|
4931
4992
|
[#4851]: https://github.com/DataDog/dd-trace-rb/issues/4851
|
|
4993
|
+
[#4861]: https://github.com/DataDog/dd-trace-rb/issues/4861
|
|
4932
4994
|
[#4862]: https://github.com/DataDog/dd-trace-rb/issues/4862
|
|
4933
4995
|
[#4863]: https://github.com/DataDog/dd-trace-rb/issues/4863
|
|
4996
|
+
[#4864]: https://github.com/DataDog/dd-trace-rb/issues/4864
|
|
4934
4997
|
[#4877]: https://github.com/DataDog/dd-trace-rb/issues/4877
|
|
4935
4998
|
[#4884]: https://github.com/DataDog/dd-trace-rb/issues/4884
|
|
4936
4999
|
[#4887]: https://github.com/DataDog/dd-trace-rb/issues/4887
|
|
4937
5000
|
[#4893]: https://github.com/DataDog/dd-trace-rb/issues/4893
|
|
5001
|
+
[#4894]: https://github.com/DataDog/dd-trace-rb/issues/4894
|
|
5002
|
+
[#4900]: https://github.com/DataDog/dd-trace-rb/issues/4900
|
|
5003
|
+
[#4901]: https://github.com/DataDog/dd-trace-rb/issues/4901
|
|
5004
|
+
[#4902]: https://github.com/DataDog/dd-trace-rb/issues/4902
|
|
5005
|
+
[#4906]: https://github.com/DataDog/dd-trace-rb/issues/4906
|
|
5006
|
+
[#4907]: https://github.com/DataDog/dd-trace-rb/issues/4907
|
|
5007
|
+
[#4908]: https://github.com/DataDog/dd-trace-rb/issues/4908
|
|
5008
|
+
[#4909]: https://github.com/DataDog/dd-trace-rb/issues/4909
|
|
5009
|
+
[#4913]: https://github.com/DataDog/dd-trace-rb/issues/4913
|
|
5010
|
+
[#4914]: https://github.com/DataDog/dd-trace-rb/issues/4914
|
|
5011
|
+
[#4918]: https://github.com/DataDog/dd-trace-rb/issues/4918
|
|
5012
|
+
[#4919]: https://github.com/DataDog/dd-trace-rb/issues/4919
|
|
5013
|
+
[#4957]: https://github.com/DataDog/dd-trace-rb/issues/4957
|
|
5014
|
+
[#4965]: https://github.com/DataDog/dd-trace-rb/issues/4965
|
|
5015
|
+
[#4969]: https://github.com/DataDog/dd-trace-rb/issues/4969
|
|
5016
|
+
[#4975]: https://github.com/DataDog/dd-trace-rb/issues/4975
|
|
5017
|
+
[#4988]: https://github.com/DataDog/dd-trace-rb/issues/4988
|
|
5018
|
+
[#4991]: https://github.com/DataDog/dd-trace-rb/issues/4991
|
|
5019
|
+
[#4995]: https://github.com/DataDog/dd-trace-rb/issues/4995
|
|
5020
|
+
[#4999]: https://github.com/DataDog/dd-trace-rb/issues/4999
|
|
5021
|
+
[#5000]: https://github.com/DataDog/dd-trace-rb/issues/5000
|
|
5022
|
+
[#5019]: https://github.com/DataDog/dd-trace-rb/issues/5019
|
|
5023
|
+
[#5020]: https://github.com/DataDog/dd-trace-rb/issues/5020
|
|
5024
|
+
[#5021]: https://github.com/DataDog/dd-trace-rb/issues/5021
|
|
5025
|
+
[#5024]: https://github.com/DataDog/dd-trace-rb/issues/5024
|
|
5026
|
+
[#5025]: https://github.com/DataDog/dd-trace-rb/issues/5025
|
|
5027
|
+
[#5031]: https://github.com/DataDog/dd-trace-rb/issues/5031
|
|
5028
|
+
[#5033]: https://github.com/DataDog/dd-trace-rb/issues/5033
|
|
5029
|
+
[#5042]: https://github.com/DataDog/dd-trace-rb/issues/5042
|
|
5030
|
+
[#5044]: https://github.com/DataDog/dd-trace-rb/issues/5044
|
|
5031
|
+
[#5045]: https://github.com/DataDog/dd-trace-rb/issues/5045
|
|
5032
|
+
[#5049]: https://github.com/DataDog/dd-trace-rb/issues/5049
|
|
5033
|
+
[#5054]: https://github.com/DataDog/dd-trace-rb/issues/5054
|
|
5034
|
+
[#5058]: https://github.com/DataDog/dd-trace-rb/issues/5058
|
|
5035
|
+
[#5073]: https://github.com/DataDog/dd-trace-rb/issues/5073
|
|
5036
|
+
[#5086]: https://github.com/DataDog/dd-trace-rb/issues/5086
|
|
5037
|
+
[#5091]: https://github.com/DataDog/dd-trace-rb/issues/5091
|
|
5038
|
+
[#5122]: https://github.com/DataDog/dd-trace-rb/issues/5122
|
|
4938
5039
|
[@AdrianLC]: https://github.com/AdrianLC
|
|
4939
5040
|
[@Azure7111]: https://github.com/Azure7111
|
|
4940
5041
|
[@BabyGroot]: https://github.com/BabyGroot
|
|
@@ -4993,6 +5094,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
4993
5094
|
[@dorner]: https://github.com/dorner
|
|
4994
5095
|
[@drcapulet]: https://github.com/drcapulet
|
|
4995
5096
|
[@dudo]: https://github.com/dudo
|
|
5097
|
+
[@duration]: https://github.com/duration
|
|
4996
5098
|
[@e1senh0rn]: https://github.com/e1senh0rn
|
|
4997
5099
|
[@ecdemis123]: https://github.com/ecdemis123
|
|
4998
5100
|
[@elliterate]: https://github.com/elliterate
|
|
@@ -5001,6 +5103,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
5001
5103
|
[@erict-square]: https://github.com/erict-square
|
|
5002
5104
|
[@errriclee]: https://github.com/errriclee
|
|
5003
5105
|
[@evan-waters]: https://github.com/evan-waters
|
|
5106
|
+
[@exception]: https://github.com/exception
|
|
5004
5107
|
[@fledman]: https://github.com/fledman
|
|
5005
5108
|
[@frsantos]: https://github.com/frsantos
|
|
5006
5109
|
[@fteem]: https://github.com/fteem
|
|
@@ -5058,6 +5161,7 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
5058
5161
|
[@rahul342]: https://github.com/rahul342
|
|
5059
5162
|
[@randy-girard]: https://github.com/randy-girard
|
|
5060
5163
|
[@renchap]: https://github.com/renchap
|
|
5164
|
+
[@return]: https://github.com/return
|
|
5061
5165
|
[@ricbartm]: https://github.com/ricbartm
|
|
5062
5166
|
[@roccoblues]: https://github.com/roccoblues
|
|
5063
5167
|
[@rqz13]: https://github.com/rqz13
|
|
@@ -5086,4 +5190,4 @@ Git diff: https://github.com/DataDog/dd-trace-rb/compare/v0.3.0...v0.3.1
|
|
|
5086
5190
|
[@y-yagi]: https://github.com/y-yagi
|
|
5087
5191
|
[@yujideveloper]: https://github.com/yujideveloper
|
|
5088
5192
|
[@yukimurasawa]: https://github.com/yukimurasawa
|
|
5089
|
-
[@zachmccormick]: https://github.com/zachmccormick
|
|
5193
|
+
[@zachmccormick]: https://github.com/zachmccormick
|
|
@@ -365,7 +365,7 @@ static const rb_data_type_t sampler_typed_data = {
|
|
|
365
365
|
};
|
|
366
366
|
|
|
367
367
|
static VALUE _native_new(VALUE klass) {
|
|
368
|
-
sampler_state *state = ruby_xcalloc(sizeof(sampler_state)
|
|
368
|
+
sampler_state *state = ruby_xcalloc(1, sizeof(sampler_state));
|
|
369
369
|
|
|
370
370
|
long now_ns = monotonic_wall_time_now_ns(DO_NOT_RAISE_ON_FAILURE);
|
|
371
371
|
if (now_ns == 0) {
|
|
@@ -354,6 +354,10 @@ void sample_thread(
|
|
|
354
354
|
state_label->str = DDOG_CHARSLICE_C("blocked");
|
|
355
355
|
} else if (CHARSLICE_EQUALS("wait_readable", name_slice)) { // Expected to be IO#wait_readable
|
|
356
356
|
state_label->str = DDOG_CHARSLICE_C("network");
|
|
357
|
+
} else if (CHARSLICE_EQUALS("_native_idle_sampling_loop", name_slice)) { // Expected to be Datadog::Profiler::Collectors::IdleSamplingHelper#_native_idle_sampling_loop
|
|
358
|
+
state_label->str = DDOG_CHARSLICE_C("waiting");
|
|
359
|
+
} else if (CHARSLICE_EQUALS("_native_sampling_loop", name_slice)) { // Expected to be Datadog::Profiler::Collectors::CpuAndWallTimeWorker#_native_sampling_loop
|
|
360
|
+
state_label->str = DDOG_CHARSLICE_C("sleeping");
|
|
357
361
|
}
|
|
358
362
|
#ifdef NO_PRIMITIVE_POP // Ruby < 3.2
|
|
359
363
|
else if (CHARSLICE_EQUALS("pop", name_slice)) { // Expected to be Queue/SizedQueue#pop
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// IMPORTANT: Currently this file is copy-pasted between extensions. Make sure to update all versions when doing any change!
|
|
4
4
|
|
|
5
5
|
#include <ruby.h>
|
|
6
|
-
#include <datadog/
|
|
6
|
+
#include <datadog/common.h>
|
|
7
7
|
|
|
8
8
|
// Used to mark symbols to be exported to the outside of the extension.
|
|
9
9
|
// Consider very carefully before tagging a function with this.
|
|
@@ -138,11 +138,13 @@ if have_header("dlfcn.h")
|
|
|
138
138
|
have_func("dladdr")
|
|
139
139
|
end
|
|
140
140
|
|
|
141
|
-
# On Ruby
|
|
142
|
-
$defs << "-DNO_IMEMO_OBJECT_ID" unless RUBY_VERSION < "
|
|
141
|
+
# On Ruby 4, we can't ask the object_id from IMEMOs (https://github.com/ruby/ruby/pull/13347)
|
|
142
|
+
$defs << "-DNO_IMEMO_OBJECT_ID" unless RUBY_VERSION < "4.0"
|
|
143
143
|
|
|
144
|
-
#
|
|
145
|
-
|
|
144
|
+
# This symbol is exclusively visible on certain Ruby versions: 2.6 to 3.2, as well as 3.4 (but not 4.0+)
|
|
145
|
+
# It's only used to get extra information about an object when a failure happens, so it's a "very nice to have" but not
|
|
146
|
+
# actually required for correct behavior of the profiler.
|
|
147
|
+
$defs << "-DNO_RB_OBJ_INFO" if RUBY_VERSION.start_with?("2.5", "3.3", "4.")
|
|
146
148
|
|
|
147
149
|
# On older Rubies, rb_postponed_job_preregister/rb_postponed_job_trigger did not exist
|
|
148
150
|
$defs << "-DNO_POSTPONED_TRIGGER" if RUBY_VERSION < "3.3"
|
|
@@ -305,7 +305,7 @@ void start_heap_allocation_recording(heap_recorder *heap_recorder, VALUE new_obj
|
|
|
305
305
|
|
|
306
306
|
if (++heap_recorder->num_recordings_skipped < heap_recorder->sample_rate ||
|
|
307
307
|
#ifdef NO_IMEMO_OBJECT_ID
|
|
308
|
-
// On Ruby
|
|
308
|
+
// On Ruby 4, we can't ask the object_id from IMEMOs (https://github.com/ruby/ruby/pull/13347)
|
|
309
309
|
RB_BUILTIN_TYPE(new_obj) == RUBY_T_IMEMO
|
|
310
310
|
#else
|
|
311
311
|
false
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// IMPORTANT: Currently this file is copy-pasted between extensions. Make sure to update all versions when doing any change!
|
|
4
4
|
|
|
5
5
|
#include <ruby.h>
|
|
6
|
-
#include <datadog/
|
|
6
|
+
#include <datadog/common.h>
|
|
7
7
|
|
|
8
8
|
// Used to mark symbols to be exported to the outside of the extension.
|
|
9
9
|
// Consider very carefully before tagging a function with this.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <datadog/ddsketch.h>
|
|
3
|
+
|
|
4
|
+
#include "datadog_ruby_common.h"
|
|
5
|
+
|
|
6
|
+
static VALUE _native_new(VALUE klass);
|
|
7
|
+
static void ddsketch_free(void *ptr);
|
|
8
|
+
static VALUE native_add(VALUE self, VALUE point);
|
|
9
|
+
static VALUE native_add_with_count(VALUE self, VALUE point, VALUE count);
|
|
10
|
+
static VALUE native_count(VALUE self);
|
|
11
|
+
static VALUE native_encode(VALUE self);
|
|
12
|
+
NORETURN(static void raise_ddsketch_error(const char *message, ddog_VoidResult result));
|
|
13
|
+
|
|
14
|
+
void ddsketch_init(VALUE core_module) {
|
|
15
|
+
VALUE ddsketch_class = rb_define_class_under(core_module, "DDSketch", rb_cObject);
|
|
16
|
+
|
|
17
|
+
rb_define_alloc_func(ddsketch_class, _native_new);
|
|
18
|
+
rb_define_method(ddsketch_class, "add", native_add, 1);
|
|
19
|
+
rb_define_method(ddsketch_class, "add_with_count", native_add_with_count, 2);
|
|
20
|
+
rb_define_method(ddsketch_class, "count", native_count, 0);
|
|
21
|
+
rb_define_method(ddsketch_class, "encode", native_encode, 0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// This structure is used to define a Ruby object that stores a pointer to a ddsketch_Handle_DDSketch
|
|
25
|
+
// See also https://github.com/ruby/ruby/blob/master/doc/extension.rdoc for how this works
|
|
26
|
+
static const rb_data_type_t ddsketch_typed_data = {
|
|
27
|
+
.wrap_struct_name = "Datadog::DDSketch",
|
|
28
|
+
.function = {
|
|
29
|
+
.dmark = NULL, // We don't store references to Ruby objects so we don't need to mark any of them
|
|
30
|
+
.dfree = ddsketch_free,
|
|
31
|
+
.dsize = NULL, // We don't track memory usage (although it'd be cool if we did!)
|
|
32
|
+
//.dcompact = NULL, // Not needed -- we don't store references to Ruby objects
|
|
33
|
+
},
|
|
34
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
static VALUE _native_new(VALUE klass) {
|
|
38
|
+
ddsketch_Handle_DDSketch *state = ruby_xcalloc(1, sizeof(ddsketch_Handle_DDSketch));
|
|
39
|
+
|
|
40
|
+
*state = ddog_ddsketch_new();
|
|
41
|
+
|
|
42
|
+
return TypedData_Wrap_Struct(klass, &ddsketch_typed_data, state);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static void ddsketch_free(void *ptr) {
|
|
46
|
+
ddsketch_Handle_DDSketch *state = (ddsketch_Handle_DDSketch *) ptr;
|
|
47
|
+
ddog_ddsketch_drop(state);
|
|
48
|
+
ruby_xfree(ptr);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static void raise_ddsketch_error(const char *message, ddog_VoidResult result) {
|
|
52
|
+
rb_raise(rb_eRuntimeError, "%s: %"PRIsVALUE, message, get_error_details_and_drop(&result.err));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
static VALUE native_add(VALUE self, VALUE point) {
|
|
56
|
+
ddsketch_Handle_DDSketch *state;
|
|
57
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
58
|
+
|
|
59
|
+
ddog_VoidResult result = ddog_ddsketch_add(state, NUM2DBL(point));
|
|
60
|
+
|
|
61
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch add failed", result);
|
|
62
|
+
|
|
63
|
+
return self;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static VALUE native_add_with_count(VALUE self, VALUE point, VALUE count) {
|
|
67
|
+
ddsketch_Handle_DDSketch *state;
|
|
68
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
69
|
+
|
|
70
|
+
ddog_VoidResult result = ddog_ddsketch_add_with_count(state, NUM2DBL(point), NUM2DBL(count));
|
|
71
|
+
|
|
72
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch add_with_count failed", result);
|
|
73
|
+
|
|
74
|
+
return self;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
static VALUE native_count(VALUE self) {
|
|
78
|
+
ddsketch_Handle_DDSketch *state;
|
|
79
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
80
|
+
|
|
81
|
+
double count_out;
|
|
82
|
+
ddog_VoidResult result = ddog_ddsketch_count(state, &count_out);
|
|
83
|
+
|
|
84
|
+
if (result.tag == DDOG_VOID_RESULT_ERR) raise_ddsketch_error("DDSketch count failed", result);
|
|
85
|
+
|
|
86
|
+
return DBL2NUM(count_out);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static VALUE native_encode(VALUE self) {
|
|
90
|
+
ddsketch_Handle_DDSketch *state;
|
|
91
|
+
TypedData_Get_Struct(self, ddsketch_Handle_DDSketch, &ddsketch_typed_data, state);
|
|
92
|
+
|
|
93
|
+
ddog_Vec_U8 encoded = ddog_ddsketch_encode(state);
|
|
94
|
+
|
|
95
|
+
// Copy into a Ruby string
|
|
96
|
+
VALUE bytes = rb_str_new((const char *) encoded.ptr, encoded.len);
|
|
97
|
+
|
|
98
|
+
ddog_Vec_U8_drop(encoded);
|
|
99
|
+
|
|
100
|
+
// The sketch is consumed by encode; to make this a bit more user-friendly for
|
|
101
|
+
// a Ruby API (since we can't "kill" the Ruby object), let's re-initialize it so
|
|
102
|
+
// it can be used again.
|
|
103
|
+
*state = ddog_ddsketch_new();
|
|
104
|
+
|
|
105
|
+
return bytes;
|
|
106
|
+
}
|