datadog 2.18.0 → 2.20.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 +73 -1
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +51 -10
- data/ext/datadog_profiling_native_extension/collectors_stack.c +58 -49
- data/ext/datadog_profiling_native_extension/collectors_stack.h +2 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +5 -6
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +1 -1
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +37 -26
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +0 -1
- data/ext/datadog_profiling_native_extension/ruby_helpers.h +1 -1
- data/ext/libdatadog_api/extconf.rb +3 -1
- data/ext/libdatadog_extconf_helpers.rb +13 -3
- data/lib/datadog/appsec/api_security/route_extractor.rb +7 -1
- data/lib/datadog/appsec/component.rb +3 -13
- data/lib/datadog/appsec/context.rb +23 -0
- data/lib/datadog/appsec/contrib/devise/patches/signin_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/devise/patches/signup_tracking_patch.rb +2 -1
- data/lib/datadog/appsec/contrib/excon/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/faraday/ssrf_detection_middleware.rb +0 -1
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +14 -22
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +23 -2
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -26
- data/lib/datadog/appsec/contrib/rails/patches/process_action_patch.rb +27 -0
- data/lib/datadog/appsec/contrib/rails/patches/render_to_body_patch.rb +33 -0
- data/lib/datadog/appsec/contrib/rest_client/request_ssrf_detection_patch.rb +0 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +8 -18
- data/lib/datadog/appsec/contrib/sinatra/patches/json_patch.rb +31 -0
- data/lib/datadog/appsec/event.rb +3 -18
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +17 -1
- data/lib/datadog/appsec/metrics/collector.rb +7 -3
- data/lib/datadog/appsec/metrics/telemetry.rb +1 -1
- data/lib/datadog/appsec/metrics/telemetry_exporter.rb +28 -0
- data/lib/datadog/appsec/metrics.rb +1 -0
- data/lib/datadog/appsec/security_engine/engine.rb +14 -32
- data/lib/datadog/appsec/security_engine/result.rb +16 -0
- data/lib/datadog/appsec/security_engine/runner.rb +18 -4
- data/lib/datadog/appsec/thread_safe_ref.rb +61 -0
- data/lib/datadog/appsec/trace_keeper.rb +24 -0
- data/lib/datadog/appsec/utils/hash_coercion.rb +23 -0
- data/lib/datadog/appsec.rb +0 -7
- data/lib/datadog/auto_instrument_base.rb +2 -1
- data/lib/datadog/core/configuration/option.rb +29 -20
- data/lib/datadog/core/configuration/option_definition.rb +2 -2
- data/lib/datadog/core/configuration/options.rb +13 -7
- data/lib/datadog/core/configuration/settings.rb +20 -0
- data/lib/datadog/core/telemetry/component.rb +8 -4
- data/lib/datadog/core/telemetry/event/app_started.rb +21 -3
- data/lib/datadog/di/boot.rb +7 -0
- data/lib/datadog/di/component.rb +7 -0
- data/lib/datadog/di/instrumenter.rb +11 -18
- data/lib/datadog/di/probe_file_loader/railtie.rb +15 -0
- data/lib/datadog/di/probe_file_loader.rb +82 -0
- data/lib/datadog/di/probe_notification_builder.rb +21 -16
- data/lib/datadog/di/remote.rb +3 -5
- data/lib/datadog/di/serializer.rb +6 -2
- data/lib/datadog/di.rb +0 -7
- data/lib/datadog/kit/appsec/events/v2.rb +196 -0
- data/lib/datadog/kit/appsec/events.rb +11 -10
- data/lib/datadog/kit/identity.rb +17 -11
- data/lib/datadog/opentelemetry/api/baggage.rb +2 -2
- data/lib/datadog/opentelemetry/api/context.rb +10 -9
- data/lib/datadog/opentelemetry/sdk/propagator.rb +4 -4
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +8 -8
- data/lib/datadog/opentelemetry/sdk/trace/span.rb +14 -10
- data/lib/datadog/opentelemetry/trace.rb +4 -4
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +2 -0
- data/lib/datadog/profiling/collectors/info.rb +41 -0
- data/lib/datadog/profiling/component.rb +1 -0
- data/lib/datadog/profiling/exporter.rb +9 -3
- data/lib/datadog/profiling/sequence_tracker.rb +44 -0
- data/lib/datadog/profiling/tag_builder.rb +2 -0
- data/lib/datadog/profiling.rb +7 -8
- data/lib/datadog/single_step_instrument.rb +9 -0
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +7 -7
- data/lib/datadog/tracing/configuration/dynamic.rb +4 -6
- data/lib/datadog/tracing/configuration/ext.rb +3 -2
- data/lib/datadog/tracing/configuration/settings.rb +17 -0
- data/lib/datadog/tracing/context.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/event.rb +8 -8
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +1 -1
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +5 -5
- data/lib/datadog/tracing/contrib/active_record/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/utils.rb +15 -15
- data/lib/datadog/tracing/contrib/active_support/cache/events/cache.rb +13 -7
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +13 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +2 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +7 -9
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +3 -1
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -1
- data/lib/datadog/tracing/contrib/aws/service/base.rb +2 -1
- data/lib/datadog/tracing/contrib/aws/service/dynamodb.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/eventbridge.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/kinesis.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/s3.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sns.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/sqs.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/service/states.rb +1 -1
- data/lib/datadog/tracing/contrib/aws/services.rb +7 -7
- data/lib/datadog/tracing/contrib/concurrent_ruby/async_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/promises_future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/configurable.rb +6 -6
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +4 -4
- data/lib/datadog/tracing/contrib/dalli/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/dalli/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +51 -53
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/extensions.rb +9 -9
- data/lib/datadog/tracing/contrib/faraday/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +4 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +8 -8
- data/lib/datadog/tracing/contrib/grape/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +24 -24
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +8 -8
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/hanami/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +1 -1
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +9 -11
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +4 -4
- data/lib/datadog/tracing/contrib/http/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/httprb/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/event.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +1 -1
- data/lib/datadog/tracing/contrib/kafka/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/karafka/monitor.rb +13 -13
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/lograge/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +6 -6
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -6
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/opensearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/opensearch/integration.rb +1 -2
- data/lib/datadog/tracing/contrib/opensearch/patcher.rb +68 -70
- data/lib/datadog/tracing/contrib/opensearch/quantize.rb +5 -5
- data/lib/datadog/tracing/contrib/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/pg/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +1 -1
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +1 -1
- data/lib/datadog/tracing/contrib/que/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/event.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/header_tagging.rb +32 -32
- data/lib/datadog/tracing/contrib/rack/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +21 -17
- data/lib/datadog/tracing/contrib/rack/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +2 -2
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/patcher.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/runner.rb +62 -40
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +4 -4
- data/lib/datadog/tracing/contrib/rake/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/patcher.rb +4 -4
- 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/redis/trace_middleware.rb +4 -4
- data/lib/datadog/tracing/contrib/registry.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +3 -3
- data/lib/datadog/tracing/contrib/roda/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/roda/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -1
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/database.rb +5 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sequel/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +38 -40
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/stripe/request.rb +1 -1
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/ext.rb +1 -1
- data/lib/datadog/tracing/contrib/trilogy/integration.rb +1 -1
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +11 -11
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +6 -6
- data/lib/datadog/tracing/diagnostics/environment_logger.rb +8 -2
- data/lib/datadog/tracing/distributed/b3_single.rb +1 -1
- data/lib/datadog/tracing/distributed/baggage.rb +73 -8
- data/lib/datadog/tracing/distributed/datadog.rb +4 -5
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +11 -13
- data/lib/datadog/tracing/distributed/helpers.rb +1 -1
- data/lib/datadog/tracing/distributed/none.rb +4 -2
- data/lib/datadog/tracing/distributed/propagation.rb +4 -1
- data/lib/datadog/tracing/distributed/propagation_policy.rb +1 -1
- data/lib/datadog/tracing/distributed/trace_context.rb +22 -16
- data/lib/datadog/tracing/event.rb +5 -7
- data/lib/datadog/tracing/flush.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +1 -1
- data/lib/datadog/tracing/metadata/tagging.rb +4 -4
- data/lib/datadog/tracing/pipeline/span_filter.rb +3 -1
- data/lib/datadog/tracing/pipeline/span_processor.rb +3 -1
- data/lib/datadog/tracing/pipeline.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +0 -2
- data/lib/datadog/tracing/sampling/rule_sampler.rb +30 -30
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +1 -1
- data/lib/datadog/tracing/sampling/span/sampler.rb +0 -7
- data/lib/datadog/tracing/span.rb +1 -1
- data/lib/datadog/tracing/span_event.rb +10 -10
- data/lib/datadog/tracing/span_link.rb +12 -12
- data/lib/datadog/tracing/span_operation.rb +31 -11
- data/lib/datadog/tracing/trace_digest.rb +21 -23
- data/lib/datadog/tracing/trace_operation.rb +84 -88
- data/lib/datadog/tracing/trace_segment.rb +2 -2
- data/lib/datadog/tracing/tracer.rb +36 -38
- data/lib/datadog/tracing/transport/http/client.rb +1 -1
- data/lib/datadog/tracing/transport/http/traces.rb +2 -2
- data/lib/datadog/tracing/transport/io/client.rb +5 -5
- data/lib/datadog/tracing/transport/io/traces.rb +4 -4
- data/lib/datadog/tracing/transport/statistics.rb +1 -1
- data/lib/datadog/tracing/transport/traces.rb +5 -5
- data/lib/datadog/tracing/workers/trace_writer.rb +12 -12
- data/lib/datadog/tracing/workers.rb +2 -2
- data/lib/datadog/tracing.rb +2 -2
- data/lib/datadog/version.rb +1 -1
- data/lib/datadog.rb +7 -0
- metadata +17 -6
@@ -47,15 +47,15 @@ module Datadog
|
|
47
47
|
@span_id = digest.span_id
|
48
48
|
@trace_id = digest.trace_id
|
49
49
|
@trace_flags = if digest.trace_sampling_priority.nil?
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
@trace_state = digest.trace_state
|
50
|
+
nil
|
51
|
+
elsif digest.trace_sampling_priority > 0
|
52
|
+
1
|
53
|
+
else
|
54
|
+
0
|
55
|
+
end
|
56
|
+
@trace_state = digest.trace_state&.dup
|
57
57
|
@dropped_attributes = 0
|
58
|
-
@attributes =
|
58
|
+
@attributes = attributes&.dup || {}
|
59
59
|
end
|
60
60
|
|
61
61
|
def to_hash
|
@@ -81,10 +81,10 @@ module Datadog
|
|
81
81
|
# If traceflags set, the high bit (bit 31) should be set to 1 (uint32).
|
82
82
|
# This helps us distinguish between when the sample decision is zero or not set
|
83
83
|
h[:flags] = if @trace_flags.nil?
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
0
|
85
|
+
else
|
86
|
+
@trace_flags | (1 << 31)
|
87
|
+
end
|
88
88
|
h
|
89
89
|
end
|
90
90
|
end
|
@@ -157,7 +157,7 @@ module Datadog
|
|
157
157
|
# running, to minimize impact on normal application function.
|
158
158
|
begin
|
159
159
|
start
|
160
|
-
rescue
|
160
|
+
rescue => e
|
161
161
|
logger.debug { "Failed to start span: #{e}" }
|
162
162
|
ensure
|
163
163
|
# We should yield to the provided block when possible, as this
|
@@ -297,6 +297,28 @@ module Datadog
|
|
297
297
|
set_error_tags(e)
|
298
298
|
end
|
299
299
|
|
300
|
+
# Record an exception during the execution of this span. Multiple exceptions
|
301
|
+
# can be recorded on a span.
|
302
|
+
#
|
303
|
+
# @param [Exception] exception The exception to record
|
304
|
+
# @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
|
305
|
+
# attributes One or more key:value pairs, where the keys must be
|
306
|
+
# strings and the values may be (array of) string, boolean or numeric
|
307
|
+
# type.
|
308
|
+
#
|
309
|
+
# @return [void]
|
310
|
+
def record_exception(exception, attributes: {})
|
311
|
+
exc = Core::Error.build_from(exception)
|
312
|
+
|
313
|
+
event_attributes = {
|
314
|
+
'exception.type' => exc.type,
|
315
|
+
'exception.message' => exc.message,
|
316
|
+
'exception.stacktrace' => exc.backtrace,
|
317
|
+
}
|
318
|
+
|
319
|
+
@span_events << SpanEvent.new('exception', attributes: event_attributes.merge!(attributes)) # steep:ignore
|
320
|
+
end
|
321
|
+
|
300
322
|
# Return a string representation of the span.
|
301
323
|
def to_s
|
302
324
|
"SpanOperation(name:#{@name},sid:#{@id},tid:#{@trace_id},pid:#{@parent_id})"
|
@@ -365,7 +387,7 @@ module Datadog
|
|
365
387
|
class Events
|
366
388
|
include Tracing::Events
|
367
389
|
|
368
|
-
DEFAULT_ON_ERROR = proc { |span_op, error| span_op
|
390
|
+
DEFAULT_ON_ERROR = proc { |span_op, error| span_op&.set_error(error) }
|
369
391
|
|
370
392
|
attr_reader \
|
371
393
|
:logger,
|
@@ -426,23 +448,21 @@ module Datadog
|
|
426
448
|
original = @handler
|
427
449
|
|
428
450
|
@handler = proc do |op, error|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
451
|
+
yield(op, error)
|
452
|
+
rescue => e
|
453
|
+
logger.debug do
|
454
|
+
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
434
455
|
Cause: #{e.class}: #{e} Location: #{Array(e.backtrace).first}"
|
435
|
-
end
|
436
|
-
|
437
|
-
original.call(op, error) if original
|
438
456
|
end
|
457
|
+
|
458
|
+
original&.call(op, error)
|
439
459
|
end
|
440
460
|
end
|
441
461
|
|
442
462
|
def publish(*args)
|
443
463
|
begin
|
444
464
|
@handler.call(*args)
|
445
|
-
rescue
|
465
|
+
rescue => e
|
446
466
|
logger.debug do
|
447
467
|
"Error in on_error handler '#{@default}': #{e.class}: #{e} at #{Array(e.backtrace).first}"
|
448
468
|
end
|
@@ -162,29 +162,27 @@ module Datadog
|
|
162
162
|
# DEV: Because we want to sometimes freeze the values provided to `TraceDigest`, it's best
|
163
163
|
# DEV: to let `#initialize` decide how to handle each field, instead of duplicating that logic here.
|
164
164
|
TraceDigest.new(
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
baggage: baggage
|
187
|
-
}.merge!(field_value_pairs)
|
165
|
+
span_id: span_id,
|
166
|
+
span_name: span_name,
|
167
|
+
span_resource: span_resource,
|
168
|
+
span_service: span_service,
|
169
|
+
span_type: span_type,
|
170
|
+
trace_distributed_tags: trace_distributed_tags,
|
171
|
+
trace_hostname: trace_hostname,
|
172
|
+
trace_id: trace_id,
|
173
|
+
trace_name: trace_name,
|
174
|
+
trace_origin: trace_origin,
|
175
|
+
trace_process_id: trace_process_id,
|
176
|
+
trace_resource: trace_resource,
|
177
|
+
trace_runtime_id: trace_runtime_id,
|
178
|
+
trace_sampling_priority: trace_sampling_priority,
|
179
|
+
trace_service: trace_service,
|
180
|
+
trace_distributed_id: trace_distributed_id,
|
181
|
+
trace_flags: trace_flags,
|
182
|
+
trace_state: trace_state,
|
183
|
+
trace_state_unknown_fields: trace_state_unknown_fields,
|
184
|
+
span_remote: span_remote,
|
185
|
+
baggage: baggage, **field_value_pairs
|
188
186
|
)
|
189
187
|
end
|
190
188
|
end
|
@@ -163,20 +163,20 @@ module Datadog
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def name
|
166
|
-
@name ||
|
166
|
+
@name || root_span&.name
|
167
167
|
end
|
168
168
|
|
169
169
|
def resource
|
170
|
-
@resource ||
|
170
|
+
@resource || root_span&.resource
|
171
171
|
end
|
172
172
|
|
173
173
|
# When retrieving tags or metrics we need to include root span tags for sampling purposes
|
174
174
|
def get_tag(key)
|
175
|
-
super ||
|
175
|
+
super || root_span&.get_tag(key)
|
176
176
|
end
|
177
177
|
|
178
178
|
def get_metric(key)
|
179
|
-
super ||
|
179
|
+
super || root_span&.get_metric(key)
|
180
180
|
end
|
181
181
|
|
182
182
|
def set_distributed_source(product_bit)
|
@@ -201,7 +201,7 @@ module Datadog
|
|
201
201
|
end
|
202
202
|
|
203
203
|
def service
|
204
|
-
@service ||
|
204
|
+
@service || root_span&.service
|
205
205
|
end
|
206
206
|
|
207
207
|
def measure(
|
@@ -220,9 +220,11 @@ module Datadog
|
|
220
220
|
# Don't allow more span measurements if the
|
221
221
|
# trace is already completed. Prevents multiple
|
222
222
|
# root spans with parent_span_id = 0.
|
223
|
-
|
224
|
-
|
225
|
-
|
223
|
+
if finished? || full?
|
224
|
+
return yield(
|
225
|
+
SpanOperation.new(op_name, logger: logger),
|
226
|
+
TraceOperation.new(logger: logger))
|
227
|
+
end
|
226
228
|
|
227
229
|
# Create new span
|
228
230
|
span_op = build_span(
|
@@ -253,51 +255,49 @@ module Datadog
|
|
253
255
|
type: nil,
|
254
256
|
id: nil
|
255
257
|
)
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
parent = @active_span
|
262
|
-
|
263
|
-
# Use active span's span ID if available. Otherwise, the parent span ID.
|
264
|
-
# Necessary when this trace continues from another, e.g. distributed trace.
|
265
|
-
parent_id = parent ? parent.id : @parent_span_id || 0
|
266
|
-
|
267
|
-
# Build events
|
268
|
-
events ||= SpanOperation::Events.new(logger: logger)
|
269
|
-
|
270
|
-
# Before start: activate the span, publish events.
|
271
|
-
events.before_start.subscribe do |span_op|
|
272
|
-
start_span(span_op)
|
273
|
-
end
|
258
|
+
# Resolve span options:
|
259
|
+
# Parent, service name, etc.
|
260
|
+
# Add default options
|
261
|
+
trace_id = @id
|
262
|
+
parent = @active_span
|
274
263
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
264
|
+
# Use active span's span ID if available. Otherwise, the parent span ID.
|
265
|
+
# Necessary when this trace continues from another, e.g. distributed trace.
|
266
|
+
parent_id = parent ? parent.id : @parent_span_id || 0
|
267
|
+
|
268
|
+
# Build events
|
269
|
+
events ||= SpanOperation::Events.new(logger: logger)
|
279
270
|
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
logger: logger,
|
284
|
-
events: events,
|
285
|
-
on_error: on_error,
|
286
|
-
parent_id: parent_id,
|
287
|
-
resource: resource || op_name,
|
288
|
-
service: service,
|
289
|
-
start_time: start_time,
|
290
|
-
tags: tags,
|
291
|
-
trace_id: trace_id,
|
292
|
-
type: type,
|
293
|
-
id: id
|
294
|
-
)
|
295
|
-
rescue StandardError => e
|
296
|
-
logger.debug { "Failed to build new span: #{e}" }
|
297
|
-
|
298
|
-
# Return dummy span
|
299
|
-
SpanOperation.new(op_name, logger: logger)
|
271
|
+
# Before start: activate the span, publish events.
|
272
|
+
events.before_start.subscribe do |span_op|
|
273
|
+
start_span(span_op)
|
300
274
|
end
|
275
|
+
|
276
|
+
# After finish: deactivate the span, record, publish events.
|
277
|
+
events.after_finish.subscribe do |span, span_op|
|
278
|
+
finish_span(span, span_op, parent)
|
279
|
+
end
|
280
|
+
|
281
|
+
# Build a new span operation
|
282
|
+
SpanOperation.new(
|
283
|
+
op_name,
|
284
|
+
logger: logger,
|
285
|
+
events: events,
|
286
|
+
on_error: on_error,
|
287
|
+
parent_id: parent_id,
|
288
|
+
resource: resource || op_name,
|
289
|
+
service: service,
|
290
|
+
start_time: start_time,
|
291
|
+
tags: tags,
|
292
|
+
trace_id: trace_id,
|
293
|
+
type: type,
|
294
|
+
id: id
|
295
|
+
)
|
296
|
+
rescue => e
|
297
|
+
logger.debug { "Failed to build new span: #{e}" }
|
298
|
+
|
299
|
+
# Return dummy span
|
300
|
+
SpanOperation.new(op_name, logger: logger)
|
301
301
|
end
|
302
302
|
|
303
303
|
# Returns a {TraceSegment} with all finished spans that can be flushed
|
@@ -325,7 +325,7 @@ module Datadog
|
|
325
325
|
# We should move the sample call to inject and right before moving to new contexts(threads, forking etc.)
|
326
326
|
def to_digest
|
327
327
|
# Resolve current span ID
|
328
|
-
span_id = @active_span
|
328
|
+
span_id = @active_span&.id
|
329
329
|
span_id ||= @parent_span_id unless finished?
|
330
330
|
# sample the trace_operation with the tracer
|
331
331
|
events.trace_propagated.publish(self)
|
@@ -349,13 +349,13 @@ module Datadog
|
|
349
349
|
trace_state: @trace_state,
|
350
350
|
trace_state_unknown_fields: @trace_state_unknown_fields,
|
351
351
|
span_remote: @remote_parent && @active_span.nil?,
|
352
|
-
baggage: @baggage.nil? || @baggage.empty? ? nil : @baggage
|
352
|
+
baggage: (@baggage.nil? || @baggage.empty?) ? nil : @baggage
|
353
353
|
).freeze
|
354
354
|
end
|
355
355
|
|
356
356
|
def to_correlation
|
357
357
|
# Resolve current span ID
|
358
|
-
span_id = @active_span
|
358
|
+
span_id = @active_span&.id
|
359
359
|
span_id ||= @parent_span_id unless finished?
|
360
360
|
|
361
361
|
Correlation::Identifier.new(
|
@@ -369,22 +369,22 @@ module Datadog
|
|
369
369
|
def fork_clone
|
370
370
|
self.class.new(
|
371
371
|
agent_sample_rate: @agent_sample_rate,
|
372
|
-
events: @events
|
373
|
-
hostname: @hostname
|
372
|
+
events: @events&.dup,
|
373
|
+
hostname: @hostname&.dup,
|
374
374
|
id: @id,
|
375
375
|
max_length: @max_length,
|
376
|
-
name: name
|
377
|
-
origin: @origin
|
378
|
-
parent_span_id:
|
376
|
+
name: name&.dup,
|
377
|
+
origin: @origin&.dup,
|
378
|
+
parent_span_id: @active_span&.id || @parent_span_id,
|
379
379
|
rate_limiter_rate: @rate_limiter_rate,
|
380
|
-
resource: resource
|
380
|
+
resource: resource&.dup,
|
381
381
|
rule_sample_rate: @rule_sample_rate,
|
382
382
|
sample_rate: @sample_rate,
|
383
383
|
sampled: @sampled,
|
384
384
|
sampling_priority: @sampling_priority,
|
385
|
-
service: service
|
386
|
-
trace_state: @trace_state
|
387
|
-
trace_state_unknown_fields: @trace_state_unknown_fields
|
385
|
+
service: service&.dup,
|
386
|
+
trace_state: @trace_state&.dup,
|
387
|
+
trace_state_unknown_fields: @trace_state_unknown_fields&.dup,
|
388
388
|
tags: meta.dup,
|
389
389
|
metrics: metrics.dup,
|
390
390
|
remote_parent: @remote_parent
|
@@ -472,41 +472,37 @@ module Datadog
|
|
472
472
|
end
|
473
473
|
|
474
474
|
def start_span(span_op)
|
475
|
-
|
476
|
-
activate_span!(span_op)
|
475
|
+
activate_span!(span_op)
|
477
476
|
|
478
|
-
|
479
|
-
|
477
|
+
# Update active span count
|
478
|
+
@active_span_count += 1
|
480
479
|
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
end
|
480
|
+
# Publish :span_before_start event
|
481
|
+
events.span_before_start.publish(span_op, self)
|
482
|
+
rescue => e
|
483
|
+
logger.debug { "Error starting span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
486
484
|
end
|
487
485
|
|
488
486
|
def finish_span(span, span_op, parent)
|
489
|
-
|
490
|
-
|
491
|
-
@spans << span unless span.nil?
|
487
|
+
# Save finished span & root span
|
488
|
+
@spans << span unless span.nil?
|
492
489
|
|
493
|
-
|
494
|
-
|
490
|
+
# Deactivate the span, re-activate parent.
|
491
|
+
deactivate_span!(span_op)
|
495
492
|
|
496
|
-
|
497
|
-
|
493
|
+
# Set finished, to signal root span has completed.
|
494
|
+
@finished = true if span_op == root_span
|
498
495
|
|
499
|
-
|
500
|
-
|
496
|
+
# Update active span count
|
497
|
+
@active_span_count -= 1
|
501
498
|
|
502
|
-
|
503
|
-
|
499
|
+
# Publish :span_finished event
|
500
|
+
events.span_finished.publish(span, self)
|
504
501
|
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
end
|
502
|
+
# Publish :trace_finished event
|
503
|
+
events.trace_finished.publish(self) if finished?
|
504
|
+
rescue => e
|
505
|
+
logger.debug { "Error finishing span on trace: #{e} Backtrace: #{e.backtrace.first(3)}" }
|
510
506
|
end
|
511
507
|
|
512
508
|
# Track the root span
|
@@ -535,7 +531,7 @@ module Datadog
|
|
535
531
|
service: service,
|
536
532
|
tags: meta,
|
537
533
|
metrics: metrics,
|
538
|
-
root_span_id: !partial ? root_span
|
534
|
+
root_span_id: (!partial) ? root_span&.id : nil,
|
539
535
|
profiling_enabled: @profiling_enabled,
|
540
536
|
apm_tracing_enabled: @apm_tracing_enabled
|
541
537
|
)
|
@@ -68,8 +68,8 @@ module Datadog
|
|
68
68
|
|
69
69
|
# Does not make an effort to move metrics out of tags
|
70
70
|
# The caller is expected to have done that
|
71
|
-
@meta =
|
72
|
-
@metrics =
|
71
|
+
@meta = tags&.dup || {}
|
72
|
+
@metrics = metrics&.dup || {}
|
73
73
|
|
74
74
|
# Set well-known tags, defaulting to getting the values from tags
|
75
75
|
@agent_sample_rate = agent_sample_rate || agent_sample_rate_tag
|
@@ -149,11 +149,11 @@ module Datadog
|
|
149
149
|
context = call_context
|
150
150
|
active_trace = context.active_trace
|
151
151
|
trace = if continue_from || active_trace.nil?
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
rescue
|
152
|
+
start_trace(continue_from: continue_from)
|
153
|
+
else
|
154
|
+
active_trace
|
155
|
+
end
|
156
|
+
rescue => e
|
157
157
|
logger.debug { "Failed to trace: #{e}" }
|
158
158
|
|
159
159
|
# Tracing failed: fallback and run code without tracing.
|
@@ -194,7 +194,6 @@ module Datadog
|
|
194
194
|
)
|
195
195
|
end
|
196
196
|
end
|
197
|
-
# rubocop:enable Metrics/MethodLength
|
198
197
|
|
199
198
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
200
199
|
# appended to each span created by the tracer. Keys and values must be strings.
|
@@ -225,7 +224,7 @@ module Datadog
|
|
225
224
|
# @return [nil] if no trace is active, and thus no span is active
|
226
225
|
def active_span(key = nil)
|
227
226
|
trace = active_trace(key)
|
228
|
-
trace
|
227
|
+
trace&.active_span
|
229
228
|
end
|
230
229
|
|
231
230
|
# Information about the currently active trace.
|
@@ -272,12 +271,10 @@ module Datadog
|
|
272
271
|
|
273
272
|
# Sample a span, tagging the trace as appropriate.
|
274
273
|
def sample_trace(trace_op)
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
280
|
-
end
|
274
|
+
@sampler.sample!(trace_op) if trace_op.sampling_priority.nil?
|
275
|
+
rescue => e
|
276
|
+
SAMPLE_TRACE_LOG_ONLY_ONCE.run do
|
277
|
+
logger.warn { "Failed to sample trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
281
278
|
end
|
282
279
|
end
|
283
280
|
|
@@ -297,7 +294,7 @@ module Datadog
|
|
297
294
|
# description of and constraints on arguments.
|
298
295
|
# rubocop:disable Lint/UselessMethodDefinition
|
299
296
|
def publish(trace)
|
300
|
-
super
|
297
|
+
super
|
301
298
|
end
|
302
299
|
# rubocop:enable Lint/UselessMethodDefinition
|
303
300
|
end
|
@@ -315,7 +312,7 @@ module Datadog
|
|
315
312
|
def shutdown!
|
316
313
|
return unless @enabled
|
317
314
|
|
318
|
-
@writer
|
315
|
+
@writer&.stop
|
319
316
|
end
|
320
317
|
|
321
318
|
private
|
@@ -335,12 +332,12 @@ module Datadog
|
|
335
332
|
def build_trace(digest = nil)
|
336
333
|
# Resolve hostname if configured
|
337
334
|
hostname = Core::Environment::Socket.hostname if Datadog.configuration.tracing.report_hostname
|
338
|
-
hostname = hostname && !hostname.empty? ? hostname : nil
|
335
|
+
hostname = (hostname && !hostname.empty?) ? hostname : nil
|
339
336
|
|
340
337
|
if digest
|
341
338
|
sampling_priority = if propagate_sampling_priority?(upstream_tags: digest.trace_distributed_tags)
|
342
|
-
|
343
|
-
|
339
|
+
digest.trace_sampling_priority
|
340
|
+
end
|
344
341
|
TraceOperation.new(
|
345
342
|
logger: logger,
|
346
343
|
hostname: hostname,
|
@@ -369,7 +366,9 @@ module Datadog
|
|
369
366
|
)
|
370
367
|
end
|
371
368
|
end
|
369
|
+
# rubocop:enable Metrics/MethodLength
|
372
370
|
|
371
|
+
# rubocop:disable Metrics/MethodLength
|
373
372
|
def bind_trace_events!(trace_op)
|
374
373
|
events = trace_op.send(:events)
|
375
374
|
|
@@ -388,6 +387,7 @@ module Datadog
|
|
388
387
|
flush_trace(event_trace_op)
|
389
388
|
end
|
390
389
|
end
|
390
|
+
# rubocop:enable Metrics/MethodLength
|
391
391
|
|
392
392
|
# Creates a new TraceOperation, with events bounds to this Tracer instance.
|
393
393
|
# @return [TraceOperation]
|
@@ -402,6 +402,7 @@ module Datadog
|
|
402
402
|
end
|
403
403
|
|
404
404
|
# rubocop:disable Lint/UnderscorePrefixedVariableName
|
405
|
+
# rubocop:disable Metrics/MethodLength
|
405
406
|
def start_span(
|
406
407
|
name,
|
407
408
|
continue_from: nil,
|
@@ -454,16 +455,17 @@ module Datadog
|
|
454
455
|
end
|
455
456
|
end
|
456
457
|
# rubocop:enable Lint/UnderscorePrefixedVariableName
|
458
|
+
# rubocop:enable Metrics/MethodLength
|
457
459
|
|
458
460
|
def resolve_tags(tags, service)
|
459
461
|
merged_tags = if @tags.any? && tags
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
462
|
+
# Combine default tags with provided tags,
|
463
|
+
# preferring provided tags.
|
464
|
+
@tags.merge(tags)
|
465
|
+
else
|
466
|
+
# Use provided tags or default tags if none.
|
467
|
+
tags || @tags.dup
|
468
|
+
end
|
467
469
|
# Remove version tag if service is not the default service
|
468
470
|
if merged_tags.key?(Core::Environment::Ext::TAG_VERSION) && service && service != @default_service
|
469
471
|
merged_tags.delete(Core::Environment::Ext::TAG_VERSION)
|
@@ -507,12 +509,10 @@ module Datadog
|
|
507
509
|
private_constant :SAMPLE_TRACE_LOG_ONLY_ONCE
|
508
510
|
|
509
511
|
def sample_span(trace_op, span)
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
515
|
-
end
|
512
|
+
@span_sampler.sample!(trace_op, span)
|
513
|
+
rescue => e
|
514
|
+
SAMPLE_SPAN_LOG_ONLY_ONCE.run do
|
515
|
+
logger.warn { "Failed to sample span: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
516
516
|
end
|
517
517
|
end
|
518
518
|
|
@@ -521,13 +521,11 @@ module Datadog
|
|
521
521
|
|
522
522
|
# Flush finished spans from the trace buffer, send them to writer.
|
523
523
|
def flush_trace(trace_op)
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
530
|
-
end
|
524
|
+
trace = @trace_flush.consume!(trace_op)
|
525
|
+
write(trace) if trace && !trace.empty?
|
526
|
+
rescue => e
|
527
|
+
FLUSH_TRACE_LOG_ONLY_ONCE.run do
|
528
|
+
logger.warn { "Failed to flush trace: #{e.class.name} #{e} at #{Array(e.backtrace).first}" }
|
531
529
|
end
|
532
530
|
end
|
533
531
|
|
@@ -30,7 +30,7 @@ module Datadog
|
|
30
30
|
update_stats_from_response!(response)
|
31
31
|
|
32
32
|
response
|
33
|
-
rescue
|
33
|
+
rescue => e
|
34
34
|
message =
|
35
35
|
"Internal error during #{self.class.name} request. Cause: #{e.class.name} #{e.message} " \
|
36
36
|
"Location: #{Array(e.backtrace).first}"
|
@@ -95,10 +95,10 @@ module Datadog
|
|
95
95
|
env.body = env.request.parcel.data
|
96
96
|
|
97
97
|
# Query for response
|
98
|
-
http_response = super
|
98
|
+
http_response = super
|
99
99
|
|
100
100
|
# Process the response
|
101
|
-
response_options = {
|
101
|
+
response_options = {trace_count: env.request.parcel.trace_count}.tap do |options|
|
102
102
|
# Parse service rates, if configured to do so.
|
103
103
|
if service_rates? && !http_response.payload.to_s.empty?
|
104
104
|
body = JSON.parse(http_response.payload)
|
@@ -30,17 +30,17 @@ module Datadog
|
|
30
30
|
# If block is given, allow it to handle writing
|
31
31
|
# Otherwise do a standard encode/write/response.
|
32
32
|
response = if block_given?
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
yield(out, request)
|
34
|
+
else
|
35
|
+
@request_block.call(out, request)
|
36
|
+
end
|
37
37
|
|
38
38
|
# Update statistics
|
39
39
|
update_stats_from_response!(response)
|
40
40
|
|
41
41
|
# Return response
|
42
42
|
response
|
43
|
-
rescue
|
43
|
+
rescue => e
|
44
44
|
message =
|
45
45
|
"Internal error during IO transport request. Cause: #{e.class.name} #{e.message} " \
|
46
46
|
"Location: #{Array(e.backtrace).first}"
|