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
data/lib/ddtrace.rb
CHANGED
|
@@ -26,8 +26,18 @@ module Datadog
|
|
|
26
26
|
# Load and extend Contrib by default
|
|
27
27
|
require 'ddtrace/contrib/extensions'
|
|
28
28
|
extend Contrib::Extensions
|
|
29
|
+
|
|
30
|
+
# Load and extend OpenTelemetry compatibility by default
|
|
31
|
+
require 'ddtrace/opentelemetry/extensions'
|
|
32
|
+
extend OpenTelemetry::Extensions
|
|
33
|
+
|
|
34
|
+
# Add shutdown hook:
|
|
35
|
+
# Ensures the tracer has an opportunity to flush traces
|
|
36
|
+
# and cleanup before terminating the process.
|
|
37
|
+
at_exit { Datadog.shutdown! }
|
|
29
38
|
end
|
|
30
39
|
|
|
40
|
+
require 'ddtrace/contrib/action_cable/integration'
|
|
31
41
|
require 'ddtrace/contrib/action_pack/integration'
|
|
32
42
|
require 'ddtrace/contrib/action_view/integration'
|
|
33
43
|
require 'ddtrace/contrib/active_model_serializers/integration'
|
|
@@ -45,7 +55,11 @@ require 'ddtrace/contrib/grape/integration'
|
|
|
45
55
|
require 'ddtrace/contrib/graphql/integration'
|
|
46
56
|
require 'ddtrace/contrib/grpc/integration'
|
|
47
57
|
require 'ddtrace/contrib/http/integration'
|
|
58
|
+
require 'ddtrace/contrib/httprb/integration'
|
|
48
59
|
require 'ddtrace/contrib/integration'
|
|
60
|
+
require 'ddtrace/contrib/kafka/integration'
|
|
61
|
+
require 'ddtrace/contrib/presto/integration'
|
|
62
|
+
require 'ddtrace/contrib/que/integration'
|
|
49
63
|
require 'ddtrace/contrib/mysql2/integration'
|
|
50
64
|
require 'ddtrace/contrib/mongodb/integration'
|
|
51
65
|
require 'ddtrace/contrib/racecar/integration'
|
|
@@ -59,5 +73,6 @@ require 'ddtrace/contrib/sequel/integration'
|
|
|
59
73
|
require 'ddtrace/contrib/shoryuken/integration'
|
|
60
74
|
require 'ddtrace/contrib/sidekiq/integration'
|
|
61
75
|
require 'ddtrace/contrib/sinatra/integration'
|
|
76
|
+
require 'ddtrace/contrib/sneakers/integration'
|
|
62
77
|
require 'ddtrace/contrib/sucker_punch/integration'
|
|
63
78
|
require 'ddtrace/monkey'
|
data/lib/ddtrace/analytics.rb
CHANGED
|
@@ -8,6 +8,13 @@ module Datadog
|
|
|
8
8
|
return if span.nil? || !sample_rate.is_a?(Numeric)
|
|
9
9
|
span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
|
|
10
10
|
end
|
|
11
|
+
|
|
12
|
+
def set_measured(span, value = true)
|
|
13
|
+
return if span.nil?
|
|
14
|
+
# rubocop:disable Style/MultipleComparison
|
|
15
|
+
value = value == true || value == 1 ? 1 : 0
|
|
16
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_MEASURED, value)
|
|
17
|
+
end
|
|
11
18
|
end
|
|
12
19
|
|
|
13
20
|
# Extension for Datadog::Span
|
data/lib/ddtrace/buffer.rb
CHANGED
|
@@ -83,7 +83,7 @@ module Datadog
|
|
|
83
83
|
@buffer_accepted += 1
|
|
84
84
|
@buffer_accepted_lengths += trace.length
|
|
85
85
|
rescue StandardError => e
|
|
86
|
-
Datadog
|
|
86
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
def measure_drop(trace)
|
|
@@ -91,21 +91,21 @@ module Datadog
|
|
|
91
91
|
@buffer_spans -= trace.length
|
|
92
92
|
@buffer_accepted_lengths -= trace.length
|
|
93
93
|
rescue StandardError => e
|
|
94
|
-
Datadog
|
|
94
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
def measure_pop(traces)
|
|
98
98
|
# Accepted
|
|
99
|
-
|
|
100
|
-
|
|
99
|
+
Datadog.health_metrics.queue_accepted(@buffer_accepted)
|
|
100
|
+
Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths)
|
|
101
101
|
|
|
102
102
|
# Dropped
|
|
103
|
-
|
|
103
|
+
Datadog.health_metrics.queue_dropped(@buffer_dropped)
|
|
104
104
|
|
|
105
105
|
# Queue gauges
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
Datadog.health_metrics.queue_max_length(@max_size)
|
|
107
|
+
Datadog.health_metrics.queue_spans(@buffer_spans)
|
|
108
|
+
Datadog.health_metrics.queue_length(traces.length)
|
|
109
109
|
|
|
110
110
|
# Reset aggregated metrics
|
|
111
111
|
@buffer_accepted = 0
|
|
@@ -113,7 +113,7 @@ module Datadog
|
|
|
113
113
|
@buffer_dropped = 0
|
|
114
114
|
@buffer_spans = 0
|
|
115
115
|
rescue StandardError => e
|
|
116
|
-
Datadog
|
|
116
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
117
117
|
end
|
|
118
118
|
end
|
|
119
119
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'msgpack'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Chunks list of elements into batches
|
|
6
|
+
module Chunker
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
# Chunks a list into batches of at most +max_chunk_size+ elements each.
|
|
10
|
+
#
|
|
11
|
+
# An exception can occur if a single element is too large. That single
|
|
12
|
+
# element will be returned in its own chunk. You have to verify by yourself
|
|
13
|
+
# when such elements are returned.
|
|
14
|
+
#
|
|
15
|
+
# @param list [Enumerable] list of elements
|
|
16
|
+
# @param max_chunk_size [Numeric] maximum acceptable chunk size
|
|
17
|
+
# @return [Enumerable] lazy list of chunks
|
|
18
|
+
def chunk_by_size(list, max_chunk_size)
|
|
19
|
+
chunk_agg = 0
|
|
20
|
+
list.slice_before do |elem|
|
|
21
|
+
size = elem.size
|
|
22
|
+
chunk_agg += size
|
|
23
|
+
if chunk_agg > max_chunk_size
|
|
24
|
+
# Can't fit element in current chunk, start a new one.
|
|
25
|
+
chunk_agg = size
|
|
26
|
+
true
|
|
27
|
+
else
|
|
28
|
+
# Add to current chunk
|
|
29
|
+
false
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
1
3
|
require 'ddtrace/configuration/pin_setup'
|
|
2
4
|
require 'ddtrace/configuration/settings'
|
|
5
|
+
require 'ddtrace/configuration/components'
|
|
3
6
|
|
|
4
7
|
module Datadog
|
|
5
8
|
# Configuration provides a unique access point for configurations
|
|
6
9
|
module Configuration
|
|
10
|
+
extend Forwardable
|
|
11
|
+
|
|
7
12
|
attr_writer :configuration
|
|
8
13
|
|
|
9
14
|
def configuration
|
|
@@ -13,18 +18,67 @@ module Datadog
|
|
|
13
18
|
def configure(target = configuration, opts = {})
|
|
14
19
|
if target.is_a?(Settings)
|
|
15
20
|
yield(target) if block_given?
|
|
21
|
+
|
|
22
|
+
# Build immutable components from settings
|
|
23
|
+
@components ||= nil
|
|
24
|
+
@components = if @components
|
|
25
|
+
replace_components!(target, @components)
|
|
26
|
+
else
|
|
27
|
+
build_components(target)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
target
|
|
16
31
|
else
|
|
17
32
|
PinSetup.new(target, opts).call
|
|
18
33
|
end
|
|
19
34
|
end
|
|
20
35
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
def_delegators \
|
|
37
|
+
:components,
|
|
38
|
+
:health_metrics,
|
|
39
|
+
:runtime_metrics,
|
|
40
|
+
:tracer
|
|
41
|
+
|
|
42
|
+
def logger
|
|
43
|
+
if instance_variable_defined?(:@components) && @components
|
|
44
|
+
@temp_logger = nil
|
|
45
|
+
components.logger
|
|
46
|
+
else
|
|
47
|
+
# Use default logger without initializing components.
|
|
48
|
+
# This prevents recursive loops while initializing.
|
|
49
|
+
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
|
50
|
+
@temp_logger ||= begin
|
|
51
|
+
logger = configuration.logger.instance || Datadog::Logger.new(STDOUT)
|
|
52
|
+
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
53
|
+
logger
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def shutdown!
|
|
59
|
+
components.shutdown! if instance_variable_defined?(:@components) && @components
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
protected
|
|
63
|
+
|
|
64
|
+
def components
|
|
65
|
+
@components ||= build_components(configuration)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def build_components(settings)
|
|
71
|
+
components = Components.new(settings)
|
|
72
|
+
components.startup!(settings)
|
|
73
|
+
components
|
|
24
74
|
end
|
|
25
75
|
|
|
26
|
-
def
|
|
27
|
-
|
|
76
|
+
def replace_components!(settings, old)
|
|
77
|
+
components = Components.new(settings)
|
|
78
|
+
|
|
79
|
+
old.shutdown!(components)
|
|
80
|
+
components.startup!(settings)
|
|
81
|
+
components
|
|
28
82
|
end
|
|
29
83
|
end
|
|
30
84
|
end
|
|
@@ -7,6 +7,7 @@ module Datadog
|
|
|
7
7
|
module Base
|
|
8
8
|
def self.included(base)
|
|
9
9
|
base.send(:extend, Datadog::Environment::Helpers)
|
|
10
|
+
base.send(:include, Datadog::Environment::Helpers)
|
|
10
11
|
base.send(:include, Options)
|
|
11
12
|
|
|
12
13
|
base.send(:extend, ClassMethods)
|
|
@@ -23,7 +24,8 @@ module Datadog
|
|
|
23
24
|
settings_class = new_settings_class(&block)
|
|
24
25
|
|
|
25
26
|
option(name) do |o|
|
|
26
|
-
o.default settings_class.new
|
|
27
|
+
o.default { settings_class.new }
|
|
28
|
+
o.lazy
|
|
27
29
|
o.resetter do |value|
|
|
28
30
|
value.reset! if value.respond_to?(:reset!)
|
|
29
31
|
value
|
|
@@ -43,7 +45,7 @@ module Datadog
|
|
|
43
45
|
# Instance methods for configuration
|
|
44
46
|
module InstanceMethods
|
|
45
47
|
def initialize(options = {})
|
|
46
|
-
configure(options)
|
|
48
|
+
configure(options) unless options.empty?
|
|
47
49
|
end
|
|
48
50
|
|
|
49
51
|
def configure(opts = {})
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
require 'ddtrace/diagnostics/health'
|
|
2
|
+
require 'ddtrace/logger'
|
|
3
|
+
require 'ddtrace/runtime/metrics'
|
|
4
|
+
require 'ddtrace/tracer'
|
|
5
|
+
require 'ddtrace/workers/runtime_metrics'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Configuration
|
|
9
|
+
# Global components for the trace library.
|
|
10
|
+
# rubocop:disable Metrics/LineLength
|
|
11
|
+
class Components
|
|
12
|
+
class << self
|
|
13
|
+
def build_health_metrics(settings)
|
|
14
|
+
settings = settings.diagnostics.health_metrics
|
|
15
|
+
options = { enabled: settings.enabled }
|
|
16
|
+
options[:statsd] = settings.statsd unless settings.statsd.nil?
|
|
17
|
+
|
|
18
|
+
Datadog::Diagnostics::Health::Metrics.new(options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build_logger(settings)
|
|
22
|
+
logger = settings.logger.instance || Datadog::Logger.new(STDOUT)
|
|
23
|
+
logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
|
|
24
|
+
|
|
25
|
+
logger
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def build_runtime_metrics(settings)
|
|
29
|
+
options = { enabled: settings.runtime_metrics.enabled }
|
|
30
|
+
options[:statsd] = settings.runtime_metrics.statsd unless settings.runtime_metrics.statsd.nil?
|
|
31
|
+
options[:services] = [settings.service] unless settings.service.nil?
|
|
32
|
+
|
|
33
|
+
Datadog::Runtime::Metrics.new(options)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def build_runtime_metrics_worker(settings)
|
|
37
|
+
# NOTE: Should we just ignore building the worker if its not enabled?
|
|
38
|
+
options = settings.runtime_metrics.opts.merge(
|
|
39
|
+
enabled: settings.runtime_metrics.enabled,
|
|
40
|
+
metrics: build_runtime_metrics(settings)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
Datadog::Workers::RuntimeMetrics.new(options)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def build_tracer(settings)
|
|
47
|
+
# If a custom tracer has been provided, use it instead.
|
|
48
|
+
# Ignore all other options (they should already be configured.)
|
|
49
|
+
tracer = settings.tracer.instance
|
|
50
|
+
return tracer unless tracer.nil?
|
|
51
|
+
|
|
52
|
+
tracer = Tracer.new(
|
|
53
|
+
default_service: settings.service,
|
|
54
|
+
enabled: settings.tracer.enabled,
|
|
55
|
+
partial_flush: settings.tracer.partial_flush.enabled,
|
|
56
|
+
tags: build_tracer_tags(settings)
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# TODO: We reconfigure the tracer here because it has way too many
|
|
60
|
+
# options it allows to mutate, and it's overwhelming to rewrite
|
|
61
|
+
# tracer initialization for now. Just reconfigure using the
|
|
62
|
+
# existing mutable #configure function. Remove when these components
|
|
63
|
+
# are extracted.
|
|
64
|
+
tracer.configure(build_tracer_options(settings))
|
|
65
|
+
|
|
66
|
+
tracer
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def build_tracer_tags(settings)
|
|
72
|
+
settings.tags.dup.tap do |tags|
|
|
73
|
+
tags['env'] = settings.env unless settings.env.nil?
|
|
74
|
+
tags['version'] = settings.version unless settings.version.nil?
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def build_tracer_options(settings)
|
|
79
|
+
settings = settings.tracer
|
|
80
|
+
|
|
81
|
+
{}.tap do |opts|
|
|
82
|
+
opts[:hostname] = settings.hostname unless settings.hostname.nil?
|
|
83
|
+
opts[:min_spans_before_partial_flush] = settings.partial_flush.min_spans_threshold unless settings.partial_flush.min_spans_threshold.nil?
|
|
84
|
+
opts[:partial_flush] = settings.partial_flush.enabled unless settings.partial_flush.enabled.nil?
|
|
85
|
+
opts[:port] = settings.port unless settings.port.nil?
|
|
86
|
+
opts[:priority_sampling] = settings.priority_sampling unless settings.priority_sampling.nil?
|
|
87
|
+
opts[:sampler] = settings.sampler unless settings.sampler.nil?
|
|
88
|
+
opts[:transport_options] = settings.transport_options
|
|
89
|
+
opts[:writer] = settings.writer unless settings.writer.nil?
|
|
90
|
+
opts[:writer_options] = settings.writer_options if settings.writer.nil?
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
attr_reader \
|
|
96
|
+
:health_metrics,
|
|
97
|
+
:logger,
|
|
98
|
+
:runtime_metrics,
|
|
99
|
+
:tracer
|
|
100
|
+
|
|
101
|
+
def initialize(settings)
|
|
102
|
+
# Logger
|
|
103
|
+
@logger = self.class.build_logger(settings)
|
|
104
|
+
|
|
105
|
+
# Tracer
|
|
106
|
+
@tracer = self.class.build_tracer(settings)
|
|
107
|
+
|
|
108
|
+
# Runtime metrics
|
|
109
|
+
@runtime_metrics = self.class.build_runtime_metrics_worker(settings)
|
|
110
|
+
|
|
111
|
+
# Health metrics
|
|
112
|
+
@health_metrics = self.class.build_health_metrics(settings)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Starts up components
|
|
116
|
+
def startup!(settings); end
|
|
117
|
+
|
|
118
|
+
# Shuts down all the components in use.
|
|
119
|
+
# If it has another instance to compare to, it will compare
|
|
120
|
+
# and avoid tearing down parts still in use.
|
|
121
|
+
def shutdown!(replacement = nil)
|
|
122
|
+
# Shutdown the old tracer, unless it's still being used.
|
|
123
|
+
# (e.g. a custom tracer instance passed in.)
|
|
124
|
+
tracer.shutdown! unless replacement && tracer == replacement.tracer
|
|
125
|
+
|
|
126
|
+
# Shutdown workers
|
|
127
|
+
runtime_metrics.enabled = false
|
|
128
|
+
runtime_metrics.stop(true)
|
|
129
|
+
|
|
130
|
+
# Shutdown the old metrics, unless they are still being used.
|
|
131
|
+
# (e.g. custom Statsd instances.)
|
|
132
|
+
old_statsd = [
|
|
133
|
+
runtime_metrics.metrics.statsd,
|
|
134
|
+
health_metrics.statsd
|
|
135
|
+
].compact.uniq
|
|
136
|
+
|
|
137
|
+
new_statsd = if replacement
|
|
138
|
+
[
|
|
139
|
+
replacement.runtime_metrics.metrics.statsd,
|
|
140
|
+
replacement.health_metrics.statsd
|
|
141
|
+
].compact.uniq
|
|
142
|
+
else
|
|
143
|
+
[]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
unused_statsd = (old_statsd - (old_statsd & new_statsd))
|
|
147
|
+
unused_statsd.each(&:close)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -13,9 +13,10 @@ module Datadog
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def set(value)
|
|
16
|
-
|
|
16
|
+
old_value = @value
|
|
17
|
+
(@value = context_exec(value, old_value, &definition.setter)).tap do |v|
|
|
17
18
|
@is_set = true
|
|
18
|
-
context_exec(v, &definition.on_set) if definition.on_set
|
|
19
|
+
context_exec(v, old_value, &definition.on_set) if definition.on_set
|
|
19
20
|
end
|
|
20
21
|
end
|
|
21
22
|
|
|
@@ -25,7 +26,7 @@ module Datadog
|
|
|
25
26
|
elsif definition.delegate_to
|
|
26
27
|
context_eval(&definition.delegate_to)
|
|
27
28
|
else
|
|
28
|
-
set(
|
|
29
|
+
set(default_value)
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
|
|
@@ -41,6 +42,14 @@ module Datadog
|
|
|
41
42
|
end
|
|
42
43
|
end
|
|
43
44
|
|
|
45
|
+
def default_value
|
|
46
|
+
if definition.lazy
|
|
47
|
+
context_eval(&definition.default)
|
|
48
|
+
else
|
|
49
|
+
definition.default
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
44
53
|
private
|
|
45
54
|
|
|
46
55
|
def context_exec(*args, &block)
|
|
@@ -4,7 +4,7 @@ module Datadog
|
|
|
4
4
|
module Configuration
|
|
5
5
|
# Represents a definition for an integration configuration option
|
|
6
6
|
class OptionDefinition
|
|
7
|
-
IDENTITY = ->(
|
|
7
|
+
IDENTITY = ->(new_value, _old_value) { new_value }
|
|
8
8
|
|
|
9
9
|
attr_reader \
|
|
10
10
|
:default,
|
|
@@ -27,10 +27,6 @@ module Datadog
|
|
|
27
27
|
@setter = meta[:setter] || block || IDENTITY
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def default_value
|
|
31
|
-
lazy ? @default.call : @default
|
|
32
|
-
end
|
|
33
|
-
|
|
34
30
|
# Creates a new Option, bound to the context provided.
|
|
35
31
|
def build(context)
|
|
36
32
|
Option.new(self, context)
|