datadog 2.46.0 → 2.48.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 +56 -2
- data/LICENSE-3rdparty.csv +1 -0
- data/ext/datadog_profiling_native_extension/collectors_stack.c +143 -86
- data/ext/datadog_profiling_native_extension/collectors_stack.h +9 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +6 -1
- data/ext/datadog_profiling_native_extension/extconf.rb +7 -13
- data/ext/datadog_profiling_native_extension/native_extension_helpers.rb +3 -3
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +67 -14
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +8 -1
- data/ext/datadog_profiling_native_extension/profiling.c +1 -1
- data/ext/libdatadog_api/extconf.rb +9 -7
- data/ext/libdatadog_api/trace_exporter.c +34 -7
- data/ext/libdatadog_extconf_helpers.rb +2 -2
- data/lib/datadog/ai_guard/component.rb +1 -1
- data/lib/datadog/ai_guard/contrib/rack/request_middleware.rb +1 -9
- data/lib/datadog/ai_guard/contrib/rails/patcher.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +3 -3
- data/lib/datadog/ai_guard/evaluation/client.rb +3 -3
- data/lib/datadog/ai_guard/evaluation.rb +2 -2
- data/lib/datadog/ai_guard/http_client.rb +3 -2
- data/lib/datadog/ai_guard/redaction.rb +1 -1
- data/lib/datadog/appsec/api_security/endpoint_collection/rails_collector.rb +1 -1
- data/lib/datadog/appsec/assets/waf_rules/README.md +3 -3
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +5366 -1517
- data/lib/datadog/appsec/assets/waf_rules/strict.json +2 -2
- data/lib/datadog/appsec/autoload.rb +1 -1
- data/lib/datadog/appsec/component.rb +1 -1
- data/lib/datadog/appsec/compressed_json.rb +1 -1
- data/lib/datadog/appsec/configuration.rb +3 -3
- data/lib/datadog/appsec/context.rb +1 -1
- data/lib/datadog/appsec/contrib/active_record/instrumentation.rb +11 -1
- data/lib/datadog/appsec/contrib/active_record/patcher.rb +12 -4
- data/lib/datadog/appsec/contrib/aws_lambda/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/contrib/aws_lambda/waf_addresses.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/configuration.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/devise/tracking_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/graphql/gateway/multiplex.rb +7 -7
- data/lib/datadog/appsec/contrib/graphql/gateway/watcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +31 -4
- data/lib/datadog/appsec/contrib/rails/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +8 -7
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +17 -5
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +8 -7
- data/lib/datadog/appsec/metrics/collector.rb +5 -5
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +3 -3
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +2 -2
- data/lib/datadog/appsec/processor/rule_loader.rb +1 -1
- data/lib/datadog/appsec/response.rb +1 -1
- data/lib/datadog/appsec/security_engine/engine.rb +8 -7
- data/lib/datadog/appsec/security_engine/runner.rb +2 -2
- data/lib/datadog/appsec/trace_keeper.rb +1 -1
- data/lib/datadog/appsec.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +14 -13
- data/lib/datadog/core/configuration/agentless_settings_resolver.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +12 -11
- data/lib/datadog/core/configuration/components_state.rb +8 -1
- data/lib/datadog/core/configuration/settings.rb +5 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +3 -0
- data/lib/datadog/core/configuration.rb +2 -2
- data/lib/datadog/core/crashtracking/component.rb +1 -1
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/environment/cgroup.rb +2 -2
- data/lib/datadog/core/environment/container.rb +3 -3
- data/lib/datadog/core/metrics/client.rb +6 -6
- data/lib/datadog/core/process_discovery.rb +1 -1
- data/lib/datadog/core/remote/client.rb +44 -3
- data/lib/datadog/core/remote/dispatcher.rb +34 -3
- data/lib/datadog/core/remote/tie/tracing.rb +4 -3
- data/lib/datadog/core/remote/transport/http.rb +2 -2
- data/lib/datadog/core/runtime/metrics.rb +14 -14
- data/lib/datadog/core/semaphore.rb +3 -1
- data/lib/datadog/core/telemetry/event/app_started.rb +9 -9
- data/lib/datadog/core/telemetry/logger.rb +1 -1
- data/lib/datadog/core/telemetry/logging.rb +1 -1
- data/lib/datadog/core/telemetry/request.rb +9 -3
- data/lib/datadog/core/telemetry/transport/http.rb +2 -2
- data/lib/datadog/core/telemetry/worker.rb +1 -1
- data/lib/datadog/core/transport/http/adapters/net.rb +1 -1
- data/lib/datadog/core/transport/http/adapters/unix_socket.rb +1 -1
- data/lib/datadog/core/transport/http/builder.rb +1 -1
- data/lib/datadog/core/transport/http.rb +3 -3
- data/lib/datadog/core/utils/at_fork_monkey_patch.rb +2 -2
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core/workers/runtime_metrics.rb +2 -2
- data/lib/datadog/data_streams/pathway_context.rb +1 -1
- data/lib/datadog/data_streams/processor.rb +48 -27
- data/lib/datadog/data_streams/transport/http.rb +1 -1
- data/lib/datadog/data_streams.rb +16 -0
- data/lib/datadog/di/capture_expression_evaluator.rb +48 -11
- data/lib/datadog/di/component.rb +73 -2
- data/lib/datadog/di/configuration.rb +19 -0
- data/lib/datadog/di/contrib/active_record.rb +1 -1
- data/lib/datadog/di/el/compiler.rb +4 -4
- data/lib/datadog/di/el/evaluator.rb +247 -43
- data/lib/datadog/di/el/expression.rb +36 -6
- data/lib/datadog/di/error.rb +16 -0
- data/lib/datadog/di/guardrails_telemetry/reason.rb +3 -2
- data/lib/datadog/di/instrumenter.rb +39 -10
- data/lib/datadog/di/probe_notification_builder.rb +58 -10
- data/lib/datadog/di/probe_notifier_worker.rb +1 -1
- data/lib/datadog/di/remote.rb +46 -2
- data/lib/datadog/di/serializer.rb +47 -13
- data/lib/datadog/di.rb +27 -0
- data/lib/datadog/error_tracking/component.rb +1 -1
- data/lib/datadog/error_tracking/configuration.rb +1 -1
- data/lib/datadog/kit/appsec/events/v2.rb +6 -6
- data/lib/datadog/kit/appsec/events.rb +1 -1
- data/lib/datadog/kit/enable_core_dumps.rb +1 -1
- data/lib/datadog/kit/identity.rb +1 -1
- data/lib/datadog/open_feature/activation.rb +26 -1
- data/lib/datadog/open_feature/agentless/configuration_source.rb +94 -15
- data/lib/datadog/open_feature/component.rb +22 -2
- data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +6 -0
- data/lib/datadog/open_feature/configuration.rb +10 -4
- data/lib/datadog/open_feature/evaluation_engine.rb +62 -4
- data/lib/datadog/open_feature/exposures/buffer.rb +4 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +17 -4
- data/lib/datadog/open_feature/exposures/worker.rb +37 -6
- data/lib/datadog/open_feature/flag_evaluation/aggregator.rb +5 -5
- data/lib/datadog/open_feature/flag_evaluation/writer.rb +1 -1
- data/lib/datadog/open_feature/hooks/debug_logging_hook.rb +56 -0
- data/lib/datadog/open_feature/hooks/evaluation_telemetry_opt_out_hook.rb +25 -0
- data/lib/datadog/open_feature/hooks/span_enrichment_hook.rb +2 -2
- data/lib/datadog/open_feature/metrics/flag_eval_metrics.rb +1 -1
- data/lib/datadog/open_feature/native_evaluator.rb +1 -1
- data/lib/datadog/open_feature/noop_evaluator.rb +1 -1
- data/lib/datadog/open_feature/provider.rb +69 -12
- data/lib/datadog/open_feature/remote.rb +8 -1
- data/lib/datadog/open_feature/resolution_details.rb +2 -2
- data/lib/datadog/open_feature/transport.rb +6 -6
- data/lib/datadog/opentelemetry/api/context.rb +3 -3
- data/lib/datadog/opentelemetry/logs.rb +5 -5
- data/lib/datadog/opentelemetry/metrics.rb +3 -3
- data/lib/datadog/opentelemetry/sdk/propagator.rb +3 -3
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +2 -2
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +1 -1
- data/lib/datadog/profiling/collectors/code_provenance.rb +3 -3
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +4 -4
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +1 -1
- data/lib/datadog/profiling/collectors/info.rb +37 -6
- data/lib/datadog/profiling/collectors/thread_context.rb +1 -1
- data/lib/datadog/profiling/component.rb +41 -39
- data/lib/datadog/profiling/exporter.rb +4 -6
- data/lib/datadog/profiling/http_transport.rb +3 -3
- data/lib/datadog/profiling/profiler.rb +2 -2
- data/lib/datadog/profiling/scheduler.rb +2 -2
- data/lib/datadog/profiling/tag_builder.rb +1 -1
- data/lib/datadog/symbol_database/extractor.rb +8 -8
- data/lib/datadog/symbol_database/uploader.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +3 -3
- data/lib/datadog/tracing/client_ip.rb +1 -1
- data/lib/datadog/tracing/component.rb +15 -10
- data/lib/datadog/tracing/configuration/dynamic/option.rb +2 -2
- data/lib/datadog/tracing/configuration/ext.rb +2 -0
- data/lib/datadog/tracing/configuration/settings.rb +14 -3
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +8 -0
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/active_job/data_streams.rb +27 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +2 -2
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +17 -12
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +16 -9
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +14 -8
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -4
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +2 -2
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +21 -6
- data/lib/datadog/tracing/contrib/http.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +14 -8
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +14 -8
- data/lib/datadog/tracing/contrib/kafka/instrumentation/consumer.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/instrumentation/producer.rb +2 -2
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +7 -7
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +4 -4
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/tags.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +17 -10
- data/lib/datadog/tracing/contrib/sequel/database.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +1 -1
- data/lib/datadog/tracing/contrib/status_range_env_parser.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +102 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/waterdrop.rb +1 -1
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +1 -1
- 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 +3 -3
- data/lib/datadog/tracing/distributed/datadog.rb +3 -3
- data/lib/datadog/tracing/distributed/propagation.rb +7 -7
- data/lib/datadog/tracing/distributed/trace_context.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_state/open_telemetry.rb +1 -1
- data/lib/datadog/tracing/otel_thread_context.rb +3 -3
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/remote.rb +50 -19
- data/lib/datadog/tracing/sampling/priority_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/rule.rb +1 -1
- data/lib/datadog/tracing/sampling/rule_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +2 -2
- data/lib/datadog/tracing/span_operation.rb +1 -1
- data/lib/datadog/tracing/trace_digest.rb +1 -1
- data/lib/datadog/tracing/trace_operation.rb +6 -6
- data/lib/datadog/tracing/tracer.rb +6 -6
- data/lib/datadog/tracing/transport/http/telemetry.rb +1 -1
- data/lib/datadog/tracing/transport/http.rb +2 -2
- data/lib/datadog/tracing/transport/io.rb +1 -1
- data/lib/datadog/tracing/transport/native.rb +3 -3
- data/lib/datadog/tracing/transport/statistics.rb +2 -2
- data/lib/datadog/tracing/transport/telemetry.rb +3 -1
- data/lib/datadog/tracing/transport/trace_formatter.rb +12 -12
- data/lib/datadog/tracing/transport/traces.rb +1 -1
- data/lib/datadog/tracing/utils.rb +1 -1
- data/lib/datadog/tracing/workers.rb +1 -1
- data/lib/datadog/version.rb +1 -1
- metadata +9 -8
- data/lib/datadog/appsec/utils/hash_coercion.rb +0 -23
|
@@ -23,16 +23,39 @@ module Datadog
|
|
|
23
23
|
|
|
24
24
|
def dispatch(changes, repository)
|
|
25
25
|
receivers.each do |receiver|
|
|
26
|
-
|
|
26
|
+
matching = matching_changes(changes, receiver)
|
|
27
27
|
|
|
28
|
-
receiver.call(repository,
|
|
28
|
+
receiver.call(repository, matching) if matching.any?
|
|
29
29
|
end
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Calls each receiver that declares initial-reconcile participation and has no
|
|
34
|
+
# matching change in `changes`, passing an empty change list.
|
|
35
|
+
def reconcile(changes, repository)
|
|
36
|
+
receivers.each do |receiver|
|
|
37
|
+
next unless receiver.initial_reconcile?
|
|
38
|
+
|
|
39
|
+
receiver.call(repository, []) unless any_matching?(changes, receiver)
|
|
40
|
+
end
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def matching_changes(changes, receiver)
|
|
47
|
+
changes.select { |change| receiver.match?(change.path) }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def any_matching?(changes, receiver)
|
|
51
|
+
changes.any? { |change| receiver.match?(change.path) }
|
|
30
52
|
end
|
|
31
53
|
|
|
32
54
|
# Store Matcher and block to be executed on a match
|
|
33
55
|
class Receiver
|
|
34
|
-
def initialize(matcher, &block)
|
|
56
|
+
def initialize(matcher, initial_reconcile: false, &block)
|
|
35
57
|
@block = block
|
|
58
|
+
@initial_reconcile = initial_reconcile
|
|
36
59
|
@matcher = matcher
|
|
37
60
|
end
|
|
38
61
|
|
|
@@ -40,6 +63,14 @@ module Datadog
|
|
|
40
63
|
@matcher.match?(path)
|
|
41
64
|
end
|
|
42
65
|
|
|
66
|
+
# Whether #reconcile may call this receiver with an empty change
|
|
67
|
+
# list on the client's first sync. A participating receiver must
|
|
68
|
+
# act on the repository's current contents when the change list is
|
|
69
|
+
# empty.
|
|
70
|
+
def initial_reconcile?
|
|
71
|
+
@initial_reconcile
|
|
72
|
+
end
|
|
73
|
+
|
|
43
74
|
def call(repository, changes)
|
|
44
75
|
@block.call(repository, changes)
|
|
45
76
|
end
|
|
@@ -13,13 +13,14 @@ module Datadog
|
|
|
13
13
|
return if boot.nil?
|
|
14
14
|
return if span.nil?
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
remote = Datadog::Core::Remote.active_remote
|
|
17
|
+
return if remote.nil?
|
|
17
18
|
|
|
18
19
|
# TODO: this is not thread-consistent
|
|
19
|
-
ready =
|
|
20
|
+
ready = remote.healthy
|
|
20
21
|
status = ready ? "ready" : "disconnected"
|
|
21
22
|
|
|
22
|
-
span.set_tag("_dd.rc.client_id",
|
|
23
|
+
span.set_tag("_dd.rc.client_id", remote.client.id)
|
|
23
24
|
span.set_tag("_dd.rc.status", status)
|
|
24
25
|
|
|
25
26
|
if boot.barrier != :pass
|
|
@@ -40,7 +40,7 @@ module Datadog
|
|
|
40
40
|
Core::Transport::HTTP.build(
|
|
41
41
|
agent_settings: agent_settings,
|
|
42
42
|
logger: logger,
|
|
43
|
-
headers: headers
|
|
43
|
+
headers: headers,
|
|
44
44
|
) do |transport|
|
|
45
45
|
transport.api "root", ROOT
|
|
46
46
|
|
|
@@ -59,7 +59,7 @@ module Datadog
|
|
|
59
59
|
Core::Transport::HTTP.build(
|
|
60
60
|
agent_settings: agent_settings,
|
|
61
61
|
logger: logger,
|
|
62
|
-
headers: headers
|
|
62
|
+
headers: headers,
|
|
63
63
|
) do |transport|
|
|
64
64
|
transport.api "v7", V7
|
|
65
65
|
|
|
@@ -67,23 +67,23 @@ module Datadog
|
|
|
67
67
|
# Only on Ruby < 3.2
|
|
68
68
|
gauge_if_not_nil(
|
|
69
69
|
Core::Runtime::Ext::Metrics::METRIC_GLOBAL_CONSTANT_STATE,
|
|
70
|
-
Core::Environment::VMCache.global_constant_state
|
|
70
|
+
Core::Environment::VMCache.global_constant_state,
|
|
71
71
|
)
|
|
72
72
|
|
|
73
73
|
# Only on Ruby 2.x
|
|
74
74
|
gauge_if_not_nil(
|
|
75
75
|
Core::Runtime::Ext::Metrics::METRIC_GLOBAL_METHOD_STATE,
|
|
76
|
-
Core::Environment::VMCache.global_method_state
|
|
76
|
+
Core::Environment::VMCache.global_method_state,
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
# Only on Ruby >= 3.2
|
|
80
80
|
gauge_if_not_nil(
|
|
81
81
|
Core::Runtime::Ext::Metrics::METRIC_CONSTANT_CACHE_INVALIDATIONS,
|
|
82
|
-
Core::Environment::VMCache.constant_cache_invalidations
|
|
82
|
+
Core::Environment::VMCache.constant_cache_invalidations,
|
|
83
83
|
)
|
|
84
84
|
gauge_if_not_nil(
|
|
85
85
|
Core::Runtime::Ext::Metrics::METRIC_CONSTANT_CACHE_MISSES,
|
|
86
|
-
Core::Environment::VMCache.constant_cache_misses
|
|
86
|
+
Core::Environment::VMCache.constant_cache_misses,
|
|
87
87
|
)
|
|
88
88
|
end
|
|
89
89
|
end
|
|
@@ -163,43 +163,43 @@ module Datadog
|
|
|
163
163
|
if Core::Environment::YJIT.available?
|
|
164
164
|
gauge_if_not_nil(
|
|
165
165
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_CODE_GC_COUNT,
|
|
166
|
-
Core::Environment::YJIT.code_gc_count
|
|
166
|
+
Core::Environment::YJIT.code_gc_count,
|
|
167
167
|
)
|
|
168
168
|
gauge_if_not_nil(
|
|
169
169
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_CODE_REGION_SIZE,
|
|
170
|
-
Core::Environment::YJIT.code_region_size
|
|
170
|
+
Core::Environment::YJIT.code_region_size,
|
|
171
171
|
)
|
|
172
172
|
gauge_if_not_nil(
|
|
173
173
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_FREED_CODE_SIZE,
|
|
174
|
-
Core::Environment::YJIT.freed_code_size
|
|
174
|
+
Core::Environment::YJIT.freed_code_size,
|
|
175
175
|
)
|
|
176
176
|
gauge_if_not_nil(
|
|
177
177
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_FREED_PAGE_COUNT,
|
|
178
|
-
Core::Environment::YJIT.freed_page_count
|
|
178
|
+
Core::Environment::YJIT.freed_page_count,
|
|
179
179
|
)
|
|
180
180
|
gauge_if_not_nil(
|
|
181
181
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_INLINE_CODE_SIZE,
|
|
182
|
-
Core::Environment::YJIT.inline_code_size
|
|
182
|
+
Core::Environment::YJIT.inline_code_size,
|
|
183
183
|
)
|
|
184
184
|
gauge_if_not_nil(
|
|
185
185
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_LIVE_PAGE_COUNT,
|
|
186
|
-
Core::Environment::YJIT.live_page_count
|
|
186
|
+
Core::Environment::YJIT.live_page_count,
|
|
187
187
|
)
|
|
188
188
|
gauge_if_not_nil(
|
|
189
189
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_OBJECT_SHAPE_COUNT,
|
|
190
|
-
Core::Environment::YJIT.object_shape_count
|
|
190
|
+
Core::Environment::YJIT.object_shape_count,
|
|
191
191
|
)
|
|
192
192
|
gauge_if_not_nil(
|
|
193
193
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_OUTLINED_CODE_SIZE,
|
|
194
|
-
Core::Environment::YJIT.outlined_code_size
|
|
194
|
+
Core::Environment::YJIT.outlined_code_size,
|
|
195
195
|
)
|
|
196
196
|
gauge_if_not_nil(
|
|
197
197
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_YJIT_ALLOC_SIZE,
|
|
198
|
-
Core::Environment::YJIT.yjit_alloc_size
|
|
198
|
+
Core::Environment::YJIT.yjit_alloc_size,
|
|
199
199
|
)
|
|
200
200
|
gauge_if_not_nil(
|
|
201
201
|
Core::Runtime::Ext::Metrics::METRIC_YJIT_RATIO_IN_YJIT,
|
|
202
|
-
Core::Environment::YJIT.ratio_in_yjit
|
|
202
|
+
Core::Environment::YJIT.ratio_in_yjit,
|
|
203
203
|
)
|
|
204
204
|
end
|
|
205
205
|
end
|
|
@@ -20,7 +20,9 @@ module Datadog
|
|
|
20
20
|
|
|
21
21
|
def wait(timeout = nil)
|
|
22
22
|
wake_lock.synchronize do
|
|
23
|
-
|
|
23
|
+
# ConditionVariable#wait accepts Numeric seconds at runtime; the
|
|
24
|
+
# bundled core signatures only model the Timeouts module form.
|
|
25
|
+
wake.wait(wake_lock, timeout) # steep:ignore ArgumentTypeMismatch
|
|
24
26
|
end
|
|
25
27
|
end
|
|
26
28
|
|
|
@@ -85,12 +85,12 @@ module Datadog
|
|
|
85
85
|
conf_value(
|
|
86
86
|
"DD_GIT_REPOSITORY_URL",
|
|
87
87
|
Core::Environment::Git.git_repository_url,
|
|
88
|
-
(Core::Environment::Git.git_repository_url ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT)
|
|
88
|
+
(Core::Environment::Git.git_repository_url ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT),
|
|
89
89
|
),
|
|
90
90
|
conf_value(
|
|
91
91
|
"DD_GIT_COMMIT_SHA",
|
|
92
92
|
Core::Environment::Git.git_commit_sha,
|
|
93
|
-
(Core::Environment::Git.git_commit_sha ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT)
|
|
93
|
+
(Core::Environment::Git.git_commit_sha ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT),
|
|
94
94
|
),
|
|
95
95
|
|
|
96
96
|
# Mix of env var, programmatic and default config, so we use unknown
|
|
@@ -102,13 +102,13 @@ module Datadog
|
|
|
102
102
|
list << conf_value(
|
|
103
103
|
"tracing.auto_instrument.enabled",
|
|
104
104
|
auto_instrument_enabled,
|
|
105
|
-
auto_instrument_enabled ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT
|
|
105
|
+
auto_instrument_enabled ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT,
|
|
106
106
|
)
|
|
107
107
|
opentelemetry_enabled = !defined?(Datadog::OpenTelemetry::LOADED).nil?
|
|
108
108
|
list << conf_value(
|
|
109
109
|
"tracing.opentelemetry.enabled",
|
|
110
110
|
opentelemetry_enabled,
|
|
111
|
-
opentelemetry_enabled ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT
|
|
111
|
+
opentelemetry_enabled ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT,
|
|
112
112
|
)
|
|
113
113
|
|
|
114
114
|
# Track ssi configurations
|
|
@@ -124,17 +124,17 @@ module Datadog
|
|
|
124
124
|
conf_value(
|
|
125
125
|
"instrumentation_source",
|
|
126
126
|
instrumentation_source,
|
|
127
|
-
(instrumentation_source == "ssi") ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT
|
|
127
|
+
(instrumentation_source == "ssi") ? Configuration::Option::Precedence::PROGRAMMATIC : Configuration::Option::Precedence::DEFAULT,
|
|
128
128
|
),
|
|
129
129
|
conf_value(
|
|
130
130
|
"DD_INJECT_FORCE",
|
|
131
131
|
Core::Environment::VariableHelpers.env_to_bool("DD_INJECT_FORCE", false),
|
|
132
|
-
(DATADOG_ENV.key?("DD_INJECT_FORCE") ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT)
|
|
132
|
+
(DATADOG_ENV.key?("DD_INJECT_FORCE") ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT),
|
|
133
133
|
),
|
|
134
134
|
conf_value(
|
|
135
135
|
"DD_INJECTION_ENABLED",
|
|
136
136
|
DATADOG_ENV["DD_INJECTION_ENABLED"] || "",
|
|
137
|
-
(DATADOG_ENV.key?("DD_INJECTION_ENABLED") ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT)
|
|
137
|
+
(DATADOG_ENV.key?("DD_INJECTION_ENABLED") ? Configuration::Option::Precedence::ENVIRONMENT : Configuration::Option::Precedence::DEFAULT),
|
|
138
138
|
),
|
|
139
139
|
)
|
|
140
140
|
|
|
@@ -144,13 +144,13 @@ module Datadog
|
|
|
144
144
|
"tracing.writer_options.buffer_size",
|
|
145
145
|
# Steep: Value is always a hash for writer_options (ensured by o.type :hash)
|
|
146
146
|
to_telemetry_value(value[:buffer_size]), # steep:ignore NoMethod
|
|
147
|
-
precedence
|
|
147
|
+
precedence,
|
|
148
148
|
)
|
|
149
149
|
list << conf_value(
|
|
150
150
|
"tracing.writer_options.flush_interval",
|
|
151
151
|
# Steep: Value is always a hash for writer_options (ensured by o.type :hash)
|
|
152
152
|
to_telemetry_value(value[:flush_interval]), # steep:ignore NoMethod
|
|
153
|
-
precedence
|
|
153
|
+
precedence,
|
|
154
154
|
)
|
|
155
155
|
end
|
|
156
156
|
|
|
@@ -42,7 +42,7 @@ module Datadog
|
|
|
42
42
|
telemetry
|
|
43
43
|
else
|
|
44
44
|
Datadog.logger.warn(
|
|
45
|
-
"Failed to send telemetry before components initialization or within components lifecycle"
|
|
45
|
+
"Failed to send telemetry before components initialization or within components lifecycle",
|
|
46
46
|
)
|
|
47
47
|
nil
|
|
48
48
|
end
|
|
@@ -28,6 +28,14 @@ module Datadog
|
|
|
28
28
|
|
|
29
29
|
private
|
|
30
30
|
|
|
31
|
+
# The `ci` settings member exists only when the datadog-ci gem is
|
|
32
|
+
# loaded, so check for it before reading.
|
|
33
|
+
def datadog_ci_enabled?(config)
|
|
34
|
+
return false unless defined?(::Datadog::CI::VERSION) && config.respond_to?(:ci)
|
|
35
|
+
|
|
36
|
+
config.ci.enabled # steep:ignore NoMethod
|
|
37
|
+
end
|
|
38
|
+
|
|
31
39
|
def application
|
|
32
40
|
config = Datadog.configuration
|
|
33
41
|
|
|
@@ -38,9 +46,7 @@ module Datadog
|
|
|
38
46
|
#
|
|
39
47
|
# This code checks that Datadog::CI is loaded and ci mode is enabled and adds
|
|
40
48
|
# "-ci-X.Y.Z" suffix to the tracer version.
|
|
41
|
-
|
|
42
|
-
tracer_version = "#{tracer_version}-ci-#{::Datadog::CI::VERSION::STRING}"
|
|
43
|
-
end
|
|
49
|
+
tracer_version = "#{tracer_version}-ci-#{::Datadog::CI::VERSION::STRING}" if datadog_ci_enabled?(config)
|
|
44
50
|
|
|
45
51
|
app = {
|
|
46
52
|
env: config.env,
|
|
@@ -33,7 +33,7 @@ module Datadog
|
|
|
33
33
|
Core::Transport::HTTP.build(
|
|
34
34
|
logger: logger,
|
|
35
35
|
agent_settings: agent_settings,
|
|
36
|
-
headers: headers
|
|
36
|
+
headers: headers,
|
|
37
37
|
) do |transport|
|
|
38
38
|
transport.api "agentless_telemetry", AGENTLESS_TELEMETRY
|
|
39
39
|
# Call block to apply any customization, if provided
|
|
@@ -53,7 +53,7 @@ module Datadog
|
|
|
53
53
|
Core::Transport::HTTP.build(
|
|
54
54
|
logger: logger,
|
|
55
55
|
agent_settings: agent_settings,
|
|
56
|
-
headers: headers
|
|
56
|
+
headers: headers,
|
|
57
57
|
) do |transport|
|
|
58
58
|
transport.api "agent_telemetry", AGENT_TELEMETRY
|
|
59
59
|
|
|
@@ -286,7 +286,7 @@ module Datadog
|
|
|
286
286
|
# 2) don't want to keep a permanent reference to in any case.
|
|
287
287
|
# Therefore we have this +reset!+ method that changes the
|
|
288
288
|
# event type while keeping the payload.
|
|
289
|
-
@initial_event.reset!
|
|
289
|
+
@initial_event.reset!
|
|
290
290
|
end
|
|
291
291
|
|
|
292
292
|
if enabled? && !worker.nil?
|
|
@@ -15,15 +15,15 @@ module Datadog
|
|
|
15
15
|
# Add adapters to registry
|
|
16
16
|
Builder::REGISTRY.set(
|
|
17
17
|
Core::Transport::HTTP::Adapters::Net,
|
|
18
|
-
Core::Configuration::Ext::Agent::HTTP::ADAPTER
|
|
18
|
+
Core::Configuration::Ext::Agent::HTTP::ADAPTER,
|
|
19
19
|
)
|
|
20
20
|
Builder::REGISTRY.set(
|
|
21
21
|
Core::Transport::HTTP::Adapters::Test,
|
|
22
|
-
Core::Transport::Ext::Test::ADAPTER
|
|
22
|
+
Core::Transport::Ext::Test::ADAPTER,
|
|
23
23
|
)
|
|
24
24
|
Builder::REGISTRY.set(
|
|
25
25
|
Core::Transport::HTTP::Adapters::UnixSocket,
|
|
26
|
-
Core::Transport::Ext::UnixSocket::ADAPTER
|
|
26
|
+
Core::Transport::Ext::UnixSocket::ADAPTER,
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
module_function
|
|
@@ -97,7 +97,7 @@ module Datadog
|
|
|
97
97
|
AT_FORK_REGISTRY_MUTEX.synchronize do
|
|
98
98
|
current = @at_fork_blocks
|
|
99
99
|
@at_fork_blocks = current.merge(
|
|
100
|
-
stage => (blocks_for(current, stage) + [Callback.new(block)]).freeze
|
|
100
|
+
stage => (blocks_for(current, stage) + [Callback.new(block)]).freeze,
|
|
101
101
|
).freeze
|
|
102
102
|
end
|
|
103
103
|
|
|
@@ -129,7 +129,7 @@ module Datadog
|
|
|
129
129
|
current = @at_fork_blocks
|
|
130
130
|
callbacks = blocks_for(current, stage)
|
|
131
131
|
@at_fork_blocks = current.merge(
|
|
132
|
-
stage => callbacks.reject { |callback| callback.block.equal?(block) }.freeze
|
|
132
|
+
stage => callbacks.reject { |callback| callback.block.equal?(block) }.freeze,
|
|
133
133
|
).freeze
|
|
134
134
|
end
|
|
135
135
|
|
|
@@ -168,7 +168,7 @@ module Datadog
|
|
|
168
168
|
rescue Exception => e
|
|
169
169
|
@error = e
|
|
170
170
|
Datadog.logger.debug(
|
|
171
|
-
"Worker thread error. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
171
|
+
"Worker thread error. Cause: #{e.class}: #{e.message} Location: #{Array(e.backtrace).first}",
|
|
172
172
|
)
|
|
173
173
|
raise
|
|
174
174
|
|
|
@@ -27,12 +27,12 @@ module Datadog
|
|
|
27
27
|
telemetry: telemetry,
|
|
28
28
|
experimental_propagate_process_tags_enabled: options.fetch(:propagate_process_tags_enabled) do
|
|
29
29
|
options.fetch(:experimental_propagate_process_tags_enabled)
|
|
30
|
-
end
|
|
30
|
+
end,
|
|
31
31
|
)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
# Workers::Async::Thread settings
|
|
35
|
-
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::
|
|
35
|
+
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_RESTART)
|
|
36
36
|
|
|
37
37
|
# Workers::IntervalLoop settings
|
|
38
38
|
self.loop_base_interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
|
|
@@ -10,6 +10,7 @@ require_relative "../core/ddsketch"
|
|
|
10
10
|
require_relative "../core/buffer/cruby"
|
|
11
11
|
require_relative "../core/utils/time"
|
|
12
12
|
require_relative "../core/utils/fnv"
|
|
13
|
+
require_relative "../core/utils/sequence"
|
|
13
14
|
|
|
14
15
|
module Datadog
|
|
15
16
|
module DataStreams
|
|
@@ -28,7 +29,17 @@ module Datadog
|
|
|
28
29
|
# Set to handle high-throughput scenarios (e.g., 10k events/sec for 10s interval)
|
|
29
30
|
DEFAULT_BUFFER_SIZE = 100_000
|
|
30
31
|
|
|
31
|
-
attr_reader :
|
|
32
|
+
attr_reader :buckets, :bucket_size_ns
|
|
33
|
+
|
|
34
|
+
UNIQUE_INSTANCE_MUTEX = Mutex.new
|
|
35
|
+
UNIQUE_INSTANCE_GENERATOR = Core::Utils::Sequence.new
|
|
36
|
+
|
|
37
|
+
private_constant :UNIQUE_INSTANCE_MUTEX, :UNIQUE_INSTANCE_GENERATOR
|
|
38
|
+
|
|
39
|
+
# Not object_id: the VM may reuse it, letting a new processor read a stale context.
|
|
40
|
+
def self.next_instance_id
|
|
41
|
+
UNIQUE_INSTANCE_MUTEX.synchronize { UNIQUE_INSTANCE_GENERATOR.next }
|
|
42
|
+
end
|
|
32
43
|
|
|
33
44
|
# Initialize the Data Streams Monitoring processor
|
|
34
45
|
#
|
|
@@ -48,12 +59,9 @@ module Datadog
|
|
|
48
59
|
@agent_info = agent_info
|
|
49
60
|
@logger = logger
|
|
50
61
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
pathway_start: now,
|
|
55
|
-
current_edge_start: now
|
|
56
|
-
)
|
|
62
|
+
# Fiber-local (Thread#[] is fiber-local), so a consume on one thread never rewrites the
|
|
63
|
+
# pathway of produces on another.
|
|
64
|
+
@pathway_context_key = :"datadog_data_streams_pathway_context_#{Processor.next_instance_id}"
|
|
57
65
|
@bucket_size_ns = (interval * 1e9).to_i
|
|
58
66
|
@buckets = {}
|
|
59
67
|
@consumer_stats = []
|
|
@@ -83,6 +91,14 @@ module Datadog
|
|
|
83
91
|
perform
|
|
84
92
|
end
|
|
85
93
|
|
|
94
|
+
def pathway_context
|
|
95
|
+
Thread.current[@pathway_context_key]
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def pathway_context=(context)
|
|
99
|
+
Thread.current[@pathway_context_key] = context
|
|
100
|
+
end
|
|
101
|
+
|
|
86
102
|
# Track Kafka produce offset for lag monitoring
|
|
87
103
|
# @param topic [String] The Kafka topic name
|
|
88
104
|
# @param partition [Integer] The partition number
|
|
@@ -97,7 +113,7 @@ module Datadog
|
|
|
97
113
|
partition: partition,
|
|
98
114
|
offset: offset,
|
|
99
115
|
timestamp_ns: (now.to_f * 1e9).to_i,
|
|
100
|
-
}
|
|
116
|
+
},
|
|
101
117
|
)
|
|
102
118
|
true
|
|
103
119
|
end
|
|
@@ -116,7 +132,7 @@ module Datadog
|
|
|
116
132
|
partition: partition,
|
|
117
133
|
offset: offset,
|
|
118
134
|
timestamp: now,
|
|
119
|
-
}
|
|
135
|
+
},
|
|
120
136
|
)
|
|
121
137
|
true
|
|
122
138
|
end
|
|
@@ -253,7 +269,7 @@ module Datadog
|
|
|
253
269
|
end
|
|
254
270
|
|
|
255
271
|
def encode_pathway_context
|
|
256
|
-
|
|
272
|
+
get_current_context.encode_b64
|
|
257
273
|
end
|
|
258
274
|
|
|
259
275
|
def set_checkpoint(tags:, now: nil, payload_size: 0, span: nil)
|
|
@@ -301,7 +317,7 @@ module Datadog
|
|
|
301
317
|
full_pathway_latency_sec: full_pathway_latency_sec,
|
|
302
318
|
payload_size: payload_size,
|
|
303
319
|
tags: tags,
|
|
304
|
-
timestamp_sec: now.to_f
|
|
320
|
+
timestamp_sec: now.to_f,
|
|
305
321
|
)
|
|
306
322
|
|
|
307
323
|
current_context.parent_hash = current_context.hash
|
|
@@ -326,6 +342,8 @@ module Datadog
|
|
|
326
342
|
# agent. Discard it instead: losing a few seconds of pre-fork stats is preferable to
|
|
327
343
|
# corrupting pipeline throughput/lag numbers with duplicates.
|
|
328
344
|
def discard_inherited_state_after_fork!
|
|
345
|
+
# Runs on the forking thread, the only one that survives into the child.
|
|
346
|
+
self.pathway_context = nil
|
|
329
347
|
@event_buffer.pop
|
|
330
348
|
@stats_mutex.synchronize do
|
|
331
349
|
@buckets.clear
|
|
@@ -367,24 +385,27 @@ module Datadog
|
|
|
367
385
|
get_current_context
|
|
368
386
|
end
|
|
369
387
|
|
|
388
|
+
# Created at the fiber's first checkpoint rather than at processor start, so a producer
|
|
389
|
+
# that starts a pathway reports ~0 latency however long the process sat idle.
|
|
370
390
|
def get_current_context
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
391
|
+
current = pathway_context
|
|
392
|
+
return current if current
|
|
393
|
+
|
|
394
|
+
now = Core::Utils::Time.now
|
|
395
|
+
self.pathway_context = PathwayContext.new(
|
|
396
|
+
hash_value: 0,
|
|
397
|
+
pathway_start: now,
|
|
398
|
+
current_edge_start: now,
|
|
399
|
+
)
|
|
379
400
|
end
|
|
380
401
|
|
|
381
402
|
def set_pathway_context(ctx)
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
403
|
+
return unless ctx
|
|
404
|
+
|
|
405
|
+
ctx.previous_direction = nil
|
|
406
|
+
ctx.closest_opposite_direction_hash = 0
|
|
407
|
+
ctx.closest_opposite_direction_edge_start = ctx.current_edge_start
|
|
408
|
+
self.pathway_context = ctx
|
|
388
409
|
end
|
|
389
410
|
|
|
390
411
|
def decode_and_set_pathway_context(headers)
|
|
@@ -432,7 +453,7 @@ module Datadog
|
|
|
432
453
|
payload_size: payload_size,
|
|
433
454
|
tags: tags,
|
|
434
455
|
timestamp_sec: timestamp_sec,
|
|
435
|
-
}
|
|
456
|
+
},
|
|
436
457
|
)
|
|
437
458
|
true
|
|
438
459
|
end
|
|
@@ -450,7 +471,7 @@ module Datadog
|
|
|
450
471
|
def transport
|
|
451
472
|
@transport ||= Transport::HTTP.default(
|
|
452
473
|
agent_settings: @agent_settings,
|
|
453
|
-
logger: @logger
|
|
474
|
+
logger: @logger,
|
|
454
475
|
)
|
|
455
476
|
end
|
|
456
477
|
|
data/lib/datadog/data_streams.rb
CHANGED
|
@@ -75,6 +75,22 @@ module Datadog
|
|
|
75
75
|
processor&.track_kafka_consume(topic, partition, offset, Core::Utils::Time.now)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
+
# The calling fiber's pathway context, without creating one.
|
|
79
|
+
#
|
|
80
|
+
# @return [PathwayContext, nil]
|
|
81
|
+
# @!visibility private
|
|
82
|
+
def pathway_context
|
|
83
|
+
processor&.pathway_context
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Restores a context returned by {.pathway_context}; nil clears it.
|
|
87
|
+
#
|
|
88
|
+
# @param context [PathwayContext, nil]
|
|
89
|
+
# @!visibility private
|
|
90
|
+
def pathway_context=(context)
|
|
91
|
+
processor&.pathway_context = context
|
|
92
|
+
end
|
|
93
|
+
|
|
78
94
|
# Check if Data Streams Monitoring is enabled and available
|
|
79
95
|
#
|
|
80
96
|
# @return [Boolean] true if the processor is available
|