ls-trace 0.1.2 → 0.2.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/.circleci/config.yml +419 -544
- data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
- data/.env +2 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.rubocop.yml +8 -0
- data/.simplecov +38 -0
- data/Appraisals +299 -48
- data/CHANGELOG.md +3 -4
- data/LICENSE +4 -22
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +4 -3
- data/Rakefile +561 -405
- data/ddtrace.gemspec +13 -4
- data/docker-compose.yml +96 -2
- data/docs/DevelopmentGuide.md +17 -1
- data/docs/GettingStarted.md +433 -138
- data/lib/ddtrace.rb +15 -0
- data/lib/ddtrace/analytics.rb +7 -0
- data/lib/ddtrace/buffer.rb +9 -9
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +59 -5
- data/lib/ddtrace/configuration/base.rb +4 -2
- data/lib/ddtrace/configuration/components.rb +151 -0
- data/lib/ddtrace/configuration/option.rb +12 -3
- data/lib/ddtrace/configuration/option_definition.rb +1 -5
- data/lib/ddtrace/configuration/options.rb +6 -1
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +214 -40
- data/lib/ddtrace/context.rb +84 -63
- data/lib/ddtrace/context_flush.rb +51 -114
- data/lib/ddtrace/context_provider.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +26 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +3 -15
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_pack/integration.rb +5 -3
- data/lib/ddtrace/contrib/action_pack/patcher.rb +3 -9
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_view/event.rb +39 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +9 -13
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +16 -16
- data/lib/ddtrace/contrib/action_view/integration.rb +5 -3
- data/lib/ddtrace/contrib/action_view/patcher.rb +19 -25
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +6 -5
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +3 -10
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +4 -5
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +4 -1
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -1
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_record/integration.rb +5 -3
- data/lib/ddtrace/contrib/active_record/patcher.rb +3 -9
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +10 -24
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/integration.rb +5 -3
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +3 -3
- data/lib/ddtrace/contrib/active_support/patcher.rb +3 -9
- data/lib/ddtrace/contrib/analytics.rb +5 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/aws/integration.rb +8 -2
- data/lib/ddtrace/contrib/aws/patcher.rb +15 -15
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +8 -2
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +4 -11
- data/lib/ddtrace/contrib/configurable.rb +30 -13
- data/lib/ddtrace/contrib/configuration/resolver.rb +7 -3
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +20 -1
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
- data/lib/ddtrace/contrib/dalli/integration.rb +5 -3
- data/lib/ddtrace/contrib/dalli/patcher.rb +6 -16
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -1
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
- data/lib/ddtrace/contrib/delayed_job/integration.rb +8 -2
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +4 -10
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +5 -3
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +10 -17
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/ethon/integration.rb +14 -2
- data/lib/ddtrace/contrib/ethon/patcher.rb +7 -9
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/integration.rb +13 -2
- data/lib/ddtrace/contrib/excon/middleware.rb +15 -12
- data/lib/ddtrace/contrib/excon/patcher.rb +4 -11
- data/lib/ddtrace/contrib/extensions.rb +39 -5
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
- data/lib/ddtrace/contrib/faraday/integration.rb +10 -3
- data/lib/ddtrace/contrib/faraday/middleware.rb +24 -34
- data/lib/ddtrace/contrib/faraday/patcher.rb +26 -19
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/endpoint.rb +14 -5
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/grape/integration.rb +6 -3
- data/lib/ddtrace/contrib/grape/patcher.rb +9 -15
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/integration.rb +6 -5
- data/lib/ddtrace/contrib/graphql/patcher.rb +11 -14
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/integration.rb +5 -3
- data/lib/ddtrace/contrib/grpc/patcher.rb +9 -19
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +8 -32
- data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/http/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/instrumentation.rb +89 -28
- data/lib/ddtrace/contrib/http/integration.rb +13 -0
- data/lib/ddtrace/contrib/http/patcher.rb +3 -9
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +5 -3
- data/lib/ddtrace/contrib/mongodb/patcher.rb +5 -11
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +8 -2
- data/lib/ddtrace/contrib/mysql2/patcher.rb +3 -9
- data/lib/ddtrace/contrib/patchable.rb +21 -4
- data/lib/ddtrace/contrib/patcher.rb +44 -10
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/presto/ext.rb +28 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
- data/lib/ddtrace/contrib/presto/integration.rb +38 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +56 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/event.rb +4 -0
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
- data/lib/ddtrace/contrib/racecar/integration.rb +6 -3
- data/lib/ddtrace/contrib/racecar/patcher.rb +4 -10
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rack/ext.rb +5 -2
- data/lib/ddtrace/contrib/rack/integration.rb +8 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +23 -14
- data/lib/ddtrace/contrib/rack/patcher.rb +57 -22
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -1
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +23 -10
- data/lib/ddtrace/contrib/rails/ext.rb +7 -2
- data/lib/ddtrace/contrib/rails/framework.rb +59 -35
- data/lib/ddtrace/contrib/rails/integration.rb +12 -5
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +19 -8
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/rake/ext.rb +5 -2
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/rake/integration.rb +8 -2
- data/lib/ddtrace/contrib/rake/patcher.rb +4 -10
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/redis/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/integration.rb +9 -3
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -17
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/resque/integration.rb +12 -2
- data/lib/ddtrace/contrib/resque/patcher.rb +4 -10
- data/lib/ddtrace/contrib/resque/resque_job.rb +6 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/integration.rb +9 -2
- data/lib/ddtrace/contrib/rest_client/patcher.rb +5 -7
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
- data/lib/ddtrace/contrib/sequel/integration.rb +8 -2
- data/lib/ddtrace/contrib/sequel/patcher.rb +4 -10
- data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/shoryuken/integration.rb +11 -7
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +4 -10
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +12 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +8 -2
- data/lib/ddtrace/contrib/sidekiq/integration.rb +5 -3
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +19 -18
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +12 -3
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +19 -2
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sinatra/env.rb +25 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +11 -2
- data/lib/ddtrace/contrib/sinatra/integration.rb +5 -3
- data/lib/ddtrace/contrib/sinatra/patcher.rb +5 -10
- data/lib/ddtrace/contrib/sinatra/tracer.rb +79 -34
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +48 -15
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +5 -3
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +8 -14
- data/lib/ddtrace/correlation.rb +15 -5
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/diagnostics/health.rb +11 -8
- data/lib/ddtrace/encoding.rb +15 -11
- data/lib/ddtrace/environment.rb +21 -3
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +11 -0
- data/lib/ddtrace/ext/environment.rb +16 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -1
- data/lib/ddtrace/ext/sampling.rb +16 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +4 -3
- data/lib/ddtrace/metrics.rb +12 -5
- data/lib/ddtrace/monkey.rb +1 -1
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
- data/lib/ddtrace/pin.rb +40 -16
- data/lib/ddtrace/pipeline.rb +1 -1
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/propagation/http_propagator.rb +2 -2
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +1 -1
- data/lib/ddtrace/runtime/metrics.rb +23 -6
- data/lib/ddtrace/sampler.rb +126 -29
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
- data/lib/ddtrace/span.rb +54 -7
- data/lib/ddtrace/sync_writer.rb +13 -8
- data/lib/ddtrace/tracer.rb +72 -92
- data/lib/ddtrace/transport/http.rb +16 -1
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
- data/lib/ddtrace/transport/http/api/instance.rb +4 -0
- data/lib/ddtrace/transport/http/builder.rb +3 -5
- data/lib/ddtrace/transport/http/client.rb +7 -64
- data/lib/ddtrace/transport/http/response.rb +1 -1
- data/lib/ddtrace/transport/http/statistics.rb +1 -1
- data/lib/ddtrace/transport/http/traces.rb +10 -7
- data/lib/ddtrace/transport/io.rb +26 -0
- data/lib/ddtrace/transport/io/client.rb +76 -0
- data/lib/ddtrace/transport/io/response.rb +25 -0
- data/lib/ddtrace/transport/io/traces.rb +91 -0
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/traces.rb +160 -10
- data/lib/ddtrace/utils.rb +1 -1
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers.rb +5 -13
- data/lib/ddtrace/workers/async.rb +165 -0
- data/lib/ddtrace/workers/loop.rb +105 -0
- data/lib/ddtrace/workers/polling.rb +48 -0
- data/lib/ddtrace/workers/queue.rb +39 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
- data/lib/ddtrace/workers/trace_writer.rb +202 -0
- data/lib/ddtrace/writer.rb +56 -38
- metadata +185 -25
- data/lib/ddtrace/provider.rb +0 -21
|
@@ -70,12 +70,17 @@ module Datadog
|
|
|
70
70
|
options[name].get
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
+
def reset_option(name)
|
|
74
|
+
assert_valid_option!(name)
|
|
75
|
+
options[name].reset if options.key?(name)
|
|
76
|
+
end
|
|
77
|
+
|
|
73
78
|
def option_defined?(name)
|
|
74
79
|
self.class.options.key?(name)
|
|
75
80
|
end
|
|
76
81
|
|
|
77
82
|
def options_hash
|
|
78
|
-
options.each_with_object({}) do |(key, _), hash|
|
|
83
|
+
self.class.options.merge(options).each_with_object({}) do |(key, _), hash|
|
|
79
84
|
hash[key] = get_option(key)
|
|
80
85
|
end
|
|
81
86
|
end
|
|
@@ -13,7 +13,7 @@ module Datadog
|
|
|
13
13
|
|
|
14
14
|
ATTRS.each { |key| pin.public_send("#{key}=", opts[key]) if opts[key] }
|
|
15
15
|
|
|
16
|
-
pin.config = opts.reject { |key, _| ATTRS.include?(key) }
|
|
16
|
+
pin.config = opts.reject { |key, _| ATTRS.include?(key) || DEPRECATED_ATTRS.include?(key) }
|
|
17
17
|
|
|
18
18
|
true
|
|
19
19
|
end
|
|
@@ -22,7 +22,8 @@ module Datadog
|
|
|
22
22
|
|
|
23
23
|
attr_reader :pin, :opts
|
|
24
24
|
|
|
25
|
-
ATTRS = [:app, :tags, :app_type, :name, :
|
|
25
|
+
ATTRS = [:app, :tags, :app_type, :name, :service_name].freeze
|
|
26
|
+
DEPRECATED_ATTRS = [:tracer].freeze
|
|
26
27
|
|
|
27
28
|
private_constant :ATTRS
|
|
28
29
|
end
|
|
@@ -1,35 +1,63 @@
|
|
|
1
|
+
require 'logger'
|
|
1
2
|
require 'ddtrace/configuration/base'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/ext/analytics'
|
|
4
5
|
require 'ddtrace/ext/distributed'
|
|
5
6
|
require 'ddtrace/ext/runtime'
|
|
6
|
-
|
|
7
|
-
require 'ddtrace/tracer'
|
|
8
|
-
require 'ddtrace/metrics'
|
|
9
|
-
require 'ddtrace/diagnostics/health'
|
|
7
|
+
require 'ddtrace/ext/sampling'
|
|
10
8
|
|
|
11
9
|
module Datadog
|
|
12
10
|
module Configuration
|
|
13
11
|
# Global configuration settings for the trace library.
|
|
12
|
+
# rubocop:disable Metrics/ClassLength
|
|
14
13
|
class Settings
|
|
15
14
|
include Base
|
|
16
15
|
|
|
17
16
|
#
|
|
18
17
|
# Configuration options
|
|
19
18
|
#
|
|
19
|
+
settings :analytics do
|
|
20
|
+
option :enabled do |o|
|
|
21
|
+
o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
20
26
|
option :analytics_enabled do |o|
|
|
21
|
-
o.
|
|
22
|
-
o.
|
|
27
|
+
o.delegate_to { get_option(:analytics).enabled }
|
|
28
|
+
o.on_set do |value|
|
|
29
|
+
# TODO: Raise deprecation warning
|
|
30
|
+
get_option(:analytics).enabled = value
|
|
31
|
+
end
|
|
23
32
|
end
|
|
24
33
|
|
|
25
|
-
option :
|
|
26
|
-
o.default {
|
|
34
|
+
option :api_key do |o|
|
|
35
|
+
o.default { ENV.fetch(Ext::Environment::ENV_API_KEY, nil) }
|
|
27
36
|
o.lazy
|
|
28
37
|
end
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
settings :diagnostics do
|
|
40
|
+
option :debug do |o|
|
|
41
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_DEBUG, false) }
|
|
42
|
+
o.lazy
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
settings :health_metrics do
|
|
46
|
+
option :enabled do |o|
|
|
47
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::Health::Metrics::ENV_ENABLED, false) }
|
|
48
|
+
o.lazy
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
option :statsd
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
settings :startup_logs do
|
|
55
|
+
option :enabled do |o|
|
|
56
|
+
# Defaults to nil as we want to know when the default value is being used
|
|
57
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_STARTUP_LOGS, nil) }
|
|
58
|
+
o.lazy
|
|
59
|
+
end
|
|
60
|
+
end
|
|
33
61
|
end
|
|
34
62
|
|
|
35
63
|
settings :distributed_tracing do
|
|
@@ -56,49 +84,195 @@ module Datadog
|
|
|
56
84
|
end
|
|
57
85
|
end
|
|
58
86
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
87
|
+
option :env do |o|
|
|
88
|
+
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
|
89
|
+
o.lazy
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
settings :logger do
|
|
93
|
+
option :instance do |o|
|
|
94
|
+
o.setter { |value, old_value| value.is_a?(::Logger) ? value : old_value }
|
|
95
|
+
o.on_set { |value| set_option(:level, value.level) unless value.nil? }
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
option :level, default: ::Logger::INFO
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def logger=(logger)
|
|
102
|
+
get_option(:logger).instance = logger
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
option :report_hostname do |o|
|
|
106
|
+
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
107
|
+
o.lazy
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
settings :runtime_metrics do
|
|
111
|
+
option :enabled do |o|
|
|
112
|
+
o.default { env_to_bool(Ext::Runtime::Metrics::ENV_ENABLED, false) }
|
|
113
|
+
o.lazy
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
option :opts, default: ->(_i) { {} }, lazy: true
|
|
117
|
+
option :statsd
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Backwards compatibility for configuring runtime metrics e.g. `c.runtime_metrics enabled: true`
|
|
121
|
+
def runtime_metrics(options = nil)
|
|
122
|
+
settings = get_option(:runtime_metrics)
|
|
123
|
+
return settings if options.nil?
|
|
124
|
+
|
|
125
|
+
# If options were provided (old style) then raise warnings and apply them:
|
|
126
|
+
# TODO: Raise deprecation warning
|
|
127
|
+
settings.enabled = options[:enabled] if options.key?(:enabled)
|
|
128
|
+
settings.statsd = options[:statsd] if options.key?(:statsd)
|
|
129
|
+
settings
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
option :runtime_metrics_enabled do |o|
|
|
133
|
+
o.delegate_to { get_option(:runtime_metrics).enabled }
|
|
134
|
+
o.on_set do |value|
|
|
135
|
+
# TODO: Raise deprecation warning
|
|
136
|
+
get_option(:runtime_metrics).enabled = value
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
settings :sampling do
|
|
141
|
+
option :default_rate do |o|
|
|
142
|
+
o.default { env_to_float(Ext::Sampling::ENV_SAMPLE_RATE, nil) }
|
|
143
|
+
o.lazy
|
|
144
|
+
end
|
|
66
145
|
|
|
146
|
+
option :rate_limit do |o|
|
|
147
|
+
o.default { env_to_float(Ext::Sampling::ENV_RATE_LIMIT, 100) }
|
|
67
148
|
o.lazy
|
|
68
149
|
end
|
|
69
150
|
end
|
|
70
151
|
|
|
71
|
-
option :
|
|
72
|
-
o.default
|
|
152
|
+
option :service do |o|
|
|
153
|
+
o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, nil) }
|
|
154
|
+
o.lazy
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
option :site do |o|
|
|
158
|
+
o.default { ENV.fetch(Ext::Environment::ENV_SITE, nil) }
|
|
159
|
+
o.lazy
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
option :tags do |o|
|
|
163
|
+
o.default do
|
|
164
|
+
tags = {}
|
|
165
|
+
|
|
166
|
+
# Parse tags from environment
|
|
167
|
+
env_to_list(Ext::Environment::ENV_TAGS).each do |tag|
|
|
168
|
+
pair = tag.split(':')
|
|
169
|
+
tags[pair.first] = pair.last if pair.length == 2
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Override tags if defined
|
|
173
|
+
tags[Ext::Environment::TAG_ENV] = env unless env.nil?
|
|
174
|
+
tags[Ext::Environment::TAG_VERSION] = version unless version.nil?
|
|
73
175
|
|
|
74
|
-
|
|
75
|
-
# then instantiate a new one.
|
|
76
|
-
o.resetter do |tracer|
|
|
77
|
-
tracer.shutdown!
|
|
78
|
-
Tracer.new
|
|
176
|
+
tags
|
|
79
177
|
end
|
|
80
178
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
179
|
+
o.setter do |new_value, old_value|
|
|
180
|
+
# Coerce keys to strings
|
|
181
|
+
string_tags = Hash[new_value.collect { |k, v| [k.to_s, v] }]
|
|
182
|
+
|
|
183
|
+
# Cross-populate tag values with other settings
|
|
184
|
+
if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
185
|
+
self.env = string_tags[Ext::Environment::TAG_ENV]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
189
|
+
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
190
|
+
end
|
|
84
191
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
t.configure(options)
|
|
88
|
-
t.class.log = options[:log] if options[:log]
|
|
89
|
-
t.set_tags(options[:tags]) if options[:tags]
|
|
90
|
-
t.set_tags(env: options[:env]) if options[:env]
|
|
91
|
-
t.class.debug_logging = options.fetch(:debug, false)
|
|
92
|
-
end
|
|
192
|
+
if service.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
|
193
|
+
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
|
93
194
|
end
|
|
195
|
+
|
|
196
|
+
# Merge with previous tags
|
|
197
|
+
(old_value || {}).merge(string_tags)
|
|
94
198
|
end
|
|
199
|
+
|
|
200
|
+
o.lazy
|
|
95
201
|
end
|
|
96
202
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
203
|
+
settings :tracer do
|
|
204
|
+
option :enabled do |o|
|
|
205
|
+
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
|
206
|
+
o.lazy
|
|
207
|
+
end
|
|
208
|
+
option :hostname # TODO: Deprecate
|
|
209
|
+
option :instance
|
|
100
210
|
|
|
101
|
-
|
|
211
|
+
settings :partial_flush do
|
|
212
|
+
option :enabled, default: false
|
|
213
|
+
option :min_spans_threshold
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
option :port # TODO: Deprecate
|
|
217
|
+
option :priority_sampling # TODO: Deprecate
|
|
218
|
+
option :sampler
|
|
219
|
+
option :transport_options, default: ->(_i) { {} }, lazy: true # TODO: Deprecate
|
|
220
|
+
option :writer # TODO: Deprecate
|
|
221
|
+
option :writer_options, default: ->(_i) { {} }, lazy: true # TODO: Deprecate
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# Backwards compatibility for configuring tracer e.g. `c.tracer debug: true`
|
|
225
|
+
def tracer(options = nil)
|
|
226
|
+
settings = get_option(:tracer)
|
|
227
|
+
return settings if options.nil?
|
|
228
|
+
|
|
229
|
+
# If options were provided (old style) then raise warnings and apply them:
|
|
230
|
+
options = options.dup
|
|
231
|
+
|
|
232
|
+
if options.key?(:log)
|
|
233
|
+
# TODO: Raise deprecation warning
|
|
234
|
+
get_option(:logger).instance = options.delete(:log)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
if options.key?(:tags)
|
|
238
|
+
# TODO: Raise deprecation warning
|
|
239
|
+
set_option(:tags, options.delete(:tags))
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
if options.key?(:env)
|
|
243
|
+
# TODO: Raise deprecation warning
|
|
244
|
+
set_option(:env, options.delete(:env))
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
if options.key?(:debug)
|
|
248
|
+
# TODO: Raise deprecation warning
|
|
249
|
+
get_option(:diagnostics).debug = options.delete(:debug)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
if options.key?(:partial_flush)
|
|
253
|
+
# TODO: Raise deprecation warning
|
|
254
|
+
settings.partial_flush.enabled = options.delete(:partial_flush)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
if options.key?(:min_spans_before_partial_flush)
|
|
258
|
+
# TODO: Raise deprecation warning
|
|
259
|
+
settings.partial_flush.min_spans_threshold = options.delete(:min_spans_before_partial_flush)
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# Forward remaining options to settings
|
|
263
|
+
options.each do |key, value|
|
|
264
|
+
setter = :"#{key}="
|
|
265
|
+
settings.send(setter, value) if settings.respond_to?(setter)
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def tracer=(tracer)
|
|
270
|
+
get_option(:tracer).instance = tracer
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
option :version do |o|
|
|
274
|
+
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
|
275
|
+
o.lazy
|
|
102
276
|
end
|
|
103
277
|
end
|
|
104
278
|
end
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
require 'thread'
|
|
2
|
+
require 'ddtrace/diagnostics/health'
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/context_flush'
|
|
5
|
+
require 'ddtrace/context_provider'
|
|
2
6
|
|
|
3
7
|
module Datadog
|
|
4
8
|
# \Context is used to keep track of a hierarchy of spans for the current
|
|
@@ -89,9 +93,17 @@ module Datadog
|
|
|
89
93
|
# by default has 10000 spans, all of which belong to unfinished parts of a
|
|
90
94
|
# larger trace. This is a catch-all to reduce global memory usage.
|
|
91
95
|
if @max_length > 0 && @trace.length >= @max_length
|
|
92
|
-
Datadog::Tracer.log.debug("context full, ignoring span #{span.name}")
|
|
93
96
|
# Detach the span from any context, it's being dropped and ignored.
|
|
94
97
|
span.context = nil
|
|
98
|
+
Datadog.logger.debug("context full, ignoring span #{span.name}")
|
|
99
|
+
|
|
100
|
+
# If overflow has already occurred, don't send this metric.
|
|
101
|
+
# Prevents metrics spam if buffer repeatedly overflows for the same trace.
|
|
102
|
+
unless @overflow
|
|
103
|
+
Datadog.health_metrics.error_context_overflow(1, tags: ["max_length:#{@max_length}"])
|
|
104
|
+
@overflow = true
|
|
105
|
+
end
|
|
106
|
+
|
|
95
107
|
return
|
|
96
108
|
end
|
|
97
109
|
set_current_span(span)
|
|
@@ -111,12 +123,18 @@ module Datadog
|
|
|
111
123
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
112
124
|
set_current_span(span.parent)
|
|
113
125
|
return if span.tracer.nil?
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
126
|
+
if span.parent.nil? && !all_spans_finished?
|
|
127
|
+
if Datadog.configuration.diagnostics.debug
|
|
128
|
+
opened_spans = @trace.length - @finished_spans
|
|
129
|
+
Datadog.logger.debug("root span #{span.name} closed but has #{opened_spans} unfinished spans:")
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
@trace.reject(&:finished?).group_by(&:name).each do |unfinished_span_name, unfinished_spans|
|
|
133
|
+
Datadog.logger.debug("unfinished span: #{unfinished_spans.first}") if Datadog.configuration.diagnostics.debug
|
|
134
|
+
Datadog.health_metrics.error_unfinished_spans(
|
|
135
|
+
unfinished_spans.length,
|
|
136
|
+
tags: ["name:#{unfinished_span_name}"]
|
|
137
|
+
)
|
|
120
138
|
end
|
|
121
139
|
end
|
|
122
140
|
end
|
|
@@ -126,7 +144,14 @@ module Datadog
|
|
|
126
144
|
# is considered finished if all spans in this context are finished.
|
|
127
145
|
def finished?
|
|
128
146
|
@mutex.synchronize do
|
|
129
|
-
return
|
|
147
|
+
return all_spans_finished?
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# @@return [Numeric] numbers of finished spans
|
|
152
|
+
def finished_span_count
|
|
153
|
+
@mutex.synchronize do
|
|
154
|
+
@finished_spans
|
|
130
155
|
end
|
|
131
156
|
end
|
|
132
157
|
|
|
@@ -139,27 +164,66 @@ module Datadog
|
|
|
139
164
|
end
|
|
140
165
|
|
|
141
166
|
# Returns both the trace list generated in the current context and
|
|
142
|
-
# if the context is sampled or not.
|
|
143
|
-
#
|
|
167
|
+
# if the context is sampled or not.
|
|
168
|
+
#
|
|
169
|
+
# It returns +[nil,@sampled]+ if the \Context is
|
|
170
|
+
# not finished.
|
|
171
|
+
#
|
|
172
|
+
# If a trace is returned, the \Context will be reset so that it
|
|
144
173
|
# can be re-used immediately.
|
|
145
174
|
#
|
|
146
175
|
# This operation is thread-safe.
|
|
176
|
+
#
|
|
177
|
+
# @return [Array<Array<Span>, Boolean>] finished trace and sampled flag
|
|
147
178
|
def get
|
|
148
179
|
@mutex.synchronize do
|
|
149
180
|
trace = @trace
|
|
150
181
|
sampled = @sampled
|
|
151
182
|
|
|
152
|
-
attach_sampling_priority if sampled && @sampling_priority
|
|
153
|
-
attach_origin if @origin
|
|
154
|
-
|
|
155
183
|
# still return sampled attribute, even if context is not finished
|
|
156
|
-
return nil, sampled unless
|
|
184
|
+
return nil, sampled unless all_spans_finished?
|
|
185
|
+
|
|
186
|
+
# Root span is finished at this point, we can configure it
|
|
187
|
+
annotate_for_flush!(@current_root_span)
|
|
157
188
|
|
|
158
189
|
reset
|
|
159
190
|
[trace, sampled]
|
|
160
191
|
end
|
|
161
192
|
end
|
|
162
193
|
|
|
194
|
+
# Delete any span matching the condition. This is thread safe.
|
|
195
|
+
#
|
|
196
|
+
# @return [Array<Span>] deleted spans
|
|
197
|
+
def delete_span_if
|
|
198
|
+
@mutex.synchronize do
|
|
199
|
+
[].tap do |deleted_spans|
|
|
200
|
+
@trace.delete_if do |span|
|
|
201
|
+
finished = span.finished?
|
|
202
|
+
|
|
203
|
+
next unless yield span
|
|
204
|
+
|
|
205
|
+
deleted_spans << span
|
|
206
|
+
|
|
207
|
+
# We need to detach the span from the context, else, some code
|
|
208
|
+
# finishing it afterwards would mess up with the number of
|
|
209
|
+
# finished_spans and possibly cause other side effects.
|
|
210
|
+
span.context = nil
|
|
211
|
+
# Acknowledge there's one span less to finish, if needed.
|
|
212
|
+
# It's very important to keep this balanced.
|
|
213
|
+
@finished_spans -= 1 if finished
|
|
214
|
+
|
|
215
|
+
true
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Set tags to root span required for flush
|
|
222
|
+
def annotate_for_flush!(span)
|
|
223
|
+
attach_sampling_priority(span) if @sampled && @sampling_priority
|
|
224
|
+
attach_origin(span) if @origin
|
|
225
|
+
end
|
|
226
|
+
|
|
163
227
|
# Return a string representation of the context.
|
|
164
228
|
def to_s
|
|
165
229
|
@mutex.synchronize do
|
|
@@ -180,6 +244,7 @@ module Datadog
|
|
|
180
244
|
@finished_spans = 0
|
|
181
245
|
@current_span = nil
|
|
182
246
|
@current_root_span = nil
|
|
247
|
+
@overflow = false
|
|
183
248
|
end
|
|
184
249
|
|
|
185
250
|
def set_current_span(span)
|
|
@@ -195,19 +260,19 @@ module Datadog
|
|
|
195
260
|
|
|
196
261
|
# Returns if the trace for the current Context is finished or not.
|
|
197
262
|
# Low-level internal function, not thread-safe.
|
|
198
|
-
def
|
|
263
|
+
def all_spans_finished?
|
|
199
264
|
@finished_spans > 0 && @trace.length == @finished_spans
|
|
200
265
|
end
|
|
201
266
|
|
|
202
|
-
def attach_sampling_priority
|
|
203
|
-
|
|
267
|
+
def attach_sampling_priority(span)
|
|
268
|
+
span.set_metric(
|
|
204
269
|
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
205
270
|
@sampling_priority
|
|
206
271
|
)
|
|
207
272
|
end
|
|
208
273
|
|
|
209
|
-
def attach_origin
|
|
210
|
-
|
|
274
|
+
def attach_origin(span)
|
|
275
|
+
span.set_tag(
|
|
211
276
|
Ext::DistributedTracing::ORIGIN_KEY,
|
|
212
277
|
@origin
|
|
213
278
|
)
|
|
@@ -236,49 +301,5 @@ module Datadog
|
|
|
236
301
|
end
|
|
237
302
|
end
|
|
238
303
|
end
|
|
239
|
-
|
|
240
|
-
# Delete any span matching the condition. This is thread safe.
|
|
241
|
-
def delete_span_if
|
|
242
|
-
@mutex.synchronize do
|
|
243
|
-
@trace.delete_if do |span|
|
|
244
|
-
finished = span.finished?
|
|
245
|
-
delete_span = yield span
|
|
246
|
-
if delete_span
|
|
247
|
-
# We need to detach the span from the context, else, some code
|
|
248
|
-
# finishing it afterwards would mess up with the number of
|
|
249
|
-
# finished_spans and possibly cause other side effects.
|
|
250
|
-
span.context = nil
|
|
251
|
-
# Acknowledge there's one span less to finish, if needed.
|
|
252
|
-
# It's very important to keep this balanced.
|
|
253
|
-
@finished_spans -= 1 if finished
|
|
254
|
-
end
|
|
255
|
-
delete_span
|
|
256
|
-
end
|
|
257
|
-
end
|
|
258
|
-
end
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
# ThreadLocalContext can be used as a tracer global reference to create
|
|
262
|
-
# a different \Context for each thread. In synchronous tracer, this
|
|
263
|
-
# is required to prevent multiple threads sharing the same \Context
|
|
264
|
-
# in different executions.
|
|
265
|
-
class ThreadLocalContext
|
|
266
|
-
# ThreadLocalContext can be used as a tracer global reference to create
|
|
267
|
-
# a different \Context for each thread. In synchronous tracer, this
|
|
268
|
-
# is required to prevent multiple threads sharing the same \Context
|
|
269
|
-
# in different executions.
|
|
270
|
-
def initialize
|
|
271
|
-
self.local = Datadog::Context.new
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
# Override the thread-local context with a new context.
|
|
275
|
-
def local=(ctx)
|
|
276
|
-
Thread.current[:datadog_context] = ctx
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
# Return the thread-local context.
|
|
280
|
-
def local
|
|
281
|
-
Thread.current[:datadog_context] ||= Datadog::Context.new
|
|
282
|
-
end
|
|
283
304
|
end
|
|
284
305
|
end
|