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/utils.rb
CHANGED
data/lib/ddtrace/version.rb
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
# Base class for work tasks
|
|
3
|
+
class Worker
|
|
4
|
+
attr_reader \
|
|
5
|
+
:task
|
|
6
|
+
|
|
7
|
+
def initialize(&block)
|
|
8
|
+
@task = block
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def perform(*args)
|
|
12
|
+
task.call(*args) unless task.nil?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
attr_writer \
|
|
18
|
+
:task
|
|
19
|
+
end
|
|
20
|
+
end
|
data/lib/ddtrace/workers.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
require 'time'
|
|
2
2
|
|
|
3
|
+
require 'ddtrace/workers/trace_writer'
|
|
4
|
+
require 'ddtrace/workers/runtime_metrics'
|
|
5
|
+
|
|
3
6
|
require 'ddtrace/buffer'
|
|
4
7
|
require 'ddtrace/runtime/metrics'
|
|
5
8
|
|
|
@@ -25,7 +28,6 @@ module Datadog
|
|
|
25
28
|
|
|
26
29
|
# Callbacks
|
|
27
30
|
@trace_task = options[:on_trace]
|
|
28
|
-
@runtime_metrics_task = options[:on_runtime_metrics]
|
|
29
31
|
|
|
30
32
|
# Intervals
|
|
31
33
|
interval = options.fetch(:interval, DEFAULT_FLUSH_INTERVAL)
|
|
@@ -55,26 +57,18 @@ module Datadog
|
|
|
55
57
|
# ensures that the thread will not die because of an exception.
|
|
56
58
|
# TODO[manu]: findout the reason and reschedule the send if it's not
|
|
57
59
|
# a fatal exception
|
|
58
|
-
Datadog
|
|
60
|
+
Datadog.logger.error(
|
|
59
61
|
"Error during traces flush: dropped #{traces.length} items. Cause: #{e} Location: #{e.backtrace.first}"
|
|
60
62
|
)
|
|
61
63
|
end
|
|
62
64
|
end
|
|
63
65
|
|
|
64
|
-
def callback_runtime_metrics
|
|
65
|
-
@runtime_metrics_task.call unless @runtime_metrics_task.nil?
|
|
66
|
-
rescue StandardError => e
|
|
67
|
-
Datadog::Tracer.log.error(
|
|
68
|
-
"Error during runtime metrics flush. Cause: #{e} Location: #{e.backtrace.first}"
|
|
69
|
-
)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
66
|
# Start the timer execution.
|
|
73
67
|
def start
|
|
74
68
|
@mutex.synchronize do
|
|
75
69
|
return if @run
|
|
76
70
|
@run = true
|
|
77
|
-
|
|
71
|
+
Datadog.logger.debug("Starting thread in the process: #{Process.pid}")
|
|
78
72
|
@worker = Thread.new { perform }
|
|
79
73
|
end
|
|
80
74
|
end
|
|
@@ -112,8 +106,6 @@ module Datadog
|
|
|
112
106
|
loop do
|
|
113
107
|
@back_off = flush_data ? @flush_interval : [@back_off * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
|
114
108
|
|
|
115
|
-
callback_runtime_metrics
|
|
116
|
-
|
|
117
109
|
@mutex.synchronize do
|
|
118
110
|
return if !@run && @trace_buffer.empty?
|
|
119
111
|
@shutdown.wait(@mutex, @back_off) if @run # do not wait when shutting down
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
require 'ddtrace/logger'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Workers
|
|
5
|
+
module Async
|
|
6
|
+
# Adds threading behavior to workers
|
|
7
|
+
# to run tasks asynchronously.
|
|
8
|
+
# rubocop:disable Metrics/ModuleLength
|
|
9
|
+
module Thread
|
|
10
|
+
FORK_POLICY_STOP = :stop
|
|
11
|
+
FORK_POLICY_RESTART = :restart
|
|
12
|
+
SHUTDOWN_TIMEOUT = 1
|
|
13
|
+
|
|
14
|
+
def self.included(base)
|
|
15
|
+
base.send(:prepend, PrependedMethods)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Methods that must be prepended
|
|
19
|
+
module PrependedMethods
|
|
20
|
+
def perform(*args)
|
|
21
|
+
start { self.result = super(*args) } unless started?
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
attr_reader \
|
|
26
|
+
:error,
|
|
27
|
+
:result
|
|
28
|
+
|
|
29
|
+
attr_writer \
|
|
30
|
+
:fork_policy
|
|
31
|
+
|
|
32
|
+
def join(timeout = nil)
|
|
33
|
+
return true unless running?
|
|
34
|
+
!worker.join(timeout).nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def terminate
|
|
38
|
+
return false unless running?
|
|
39
|
+
@run_async = false
|
|
40
|
+
worker.terminate
|
|
41
|
+
true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def run_async?
|
|
45
|
+
return false unless instance_variable_defined?(:@run_async)
|
|
46
|
+
@run_async == true
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def started?
|
|
50
|
+
!(worker.nil? || forked?)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def running?
|
|
54
|
+
!worker.nil? && worker.alive?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def error?
|
|
58
|
+
return false unless instance_variable_defined?(:@error)
|
|
59
|
+
!@error.nil?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def completed?
|
|
63
|
+
!worker.nil? && worker.status == false && !error?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def failed?
|
|
67
|
+
!worker.nil? && worker.status.nil?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def forked?
|
|
71
|
+
!pid.nil? && pid != Process.pid
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def fork_policy
|
|
75
|
+
@fork_policy ||= FORK_POLICY_STOP
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
protected
|
|
79
|
+
|
|
80
|
+
attr_writer \
|
|
81
|
+
:result
|
|
82
|
+
|
|
83
|
+
def mutex
|
|
84
|
+
@mutex ||= Mutex.new
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def after_fork
|
|
88
|
+
# Do nothing by default
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
attr_reader \
|
|
94
|
+
:pid
|
|
95
|
+
|
|
96
|
+
def mutex_after_fork
|
|
97
|
+
@mutex_after_fork ||= Mutex.new
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def worker
|
|
101
|
+
@worker ||= nil
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def start(&block)
|
|
105
|
+
mutex.synchronize do
|
|
106
|
+
return if running?
|
|
107
|
+
if forked?
|
|
108
|
+
case fork_policy
|
|
109
|
+
when FORK_POLICY_STOP
|
|
110
|
+
stop_fork
|
|
111
|
+
when FORK_POLICY_RESTART
|
|
112
|
+
restart_after_fork(&block)
|
|
113
|
+
end
|
|
114
|
+
elsif !run_async?
|
|
115
|
+
start_worker(&block)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def start_worker
|
|
121
|
+
@run_async = true
|
|
122
|
+
@pid = Process.pid
|
|
123
|
+
@error = nil
|
|
124
|
+
Datadog.logger.debug("Starting thread in the process: #{Process.pid}")
|
|
125
|
+
|
|
126
|
+
@worker = ::Thread.new do
|
|
127
|
+
begin
|
|
128
|
+
yield
|
|
129
|
+
# rubocop:disable Lint/RescueException
|
|
130
|
+
rescue Exception => e
|
|
131
|
+
@error = e
|
|
132
|
+
Datadog.logger.debug("Worker thread error. Cause #{e.message} Location: #{e.backtrace.first}")
|
|
133
|
+
raise
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def stop_fork
|
|
139
|
+
mutex_after_fork.synchronize do
|
|
140
|
+
if forked?
|
|
141
|
+
# Trigger callback to allow workers to reset themselves accordingly
|
|
142
|
+
after_fork
|
|
143
|
+
|
|
144
|
+
# Reset and turn off
|
|
145
|
+
@pid = Process.pid
|
|
146
|
+
@run_async = false
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def restart_after_fork(&block)
|
|
152
|
+
mutex_after_fork.synchronize do
|
|
153
|
+
if forked?
|
|
154
|
+
# Trigger callback to allow workers to reset themselves accordingly
|
|
155
|
+
after_fork
|
|
156
|
+
|
|
157
|
+
# Start worker
|
|
158
|
+
start_worker(&block)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Workers
|
|
3
|
+
# Adds looping behavior to workers, with a sleep
|
|
4
|
+
# interval between each loop.
|
|
5
|
+
module IntervalLoop
|
|
6
|
+
BACK_OFF_RATIO = 1.2
|
|
7
|
+
BACK_OFF_MAX = 5
|
|
8
|
+
BASE_INTERVAL = 1
|
|
9
|
+
|
|
10
|
+
def self.included(base)
|
|
11
|
+
base.send(:prepend, PrependedMethods)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Methods that must be prepended
|
|
15
|
+
module PrependedMethods
|
|
16
|
+
def perform(*args)
|
|
17
|
+
perform_loop { super(*args) }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def stop_loop
|
|
22
|
+
mutex.synchronize do
|
|
23
|
+
return false unless run_loop?
|
|
24
|
+
@run_loop = false
|
|
25
|
+
shutdown.signal
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def work_pending?
|
|
32
|
+
run_loop?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def run_loop?
|
|
36
|
+
return false unless instance_variable_defined?(:@run_loop)
|
|
37
|
+
@run_loop == true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def loop_base_interval
|
|
41
|
+
@loop_base_interval ||= BASE_INTERVAL
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def loop_back_off_ratio
|
|
45
|
+
@loop_back_off_ratio ||= BACK_OFF_RATIO
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def loop_back_off_max
|
|
49
|
+
@loop_back_off_max ||= BACK_OFF_MAX
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def loop_wait_time
|
|
53
|
+
@loop_wait_time ||= loop_base_interval
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def loop_back_off?
|
|
57
|
+
false
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def loop_back_off!(amount = nil)
|
|
61
|
+
@loop_wait_time = amount || [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
protected
|
|
65
|
+
|
|
66
|
+
attr_writer \
|
|
67
|
+
:loop_back_off_max,
|
|
68
|
+
:loop_back_off_ratio,
|
|
69
|
+
:loop_base_interval
|
|
70
|
+
|
|
71
|
+
def mutex
|
|
72
|
+
@mutex ||= Mutex.new
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
def perform_loop
|
|
78
|
+
@run_loop = true
|
|
79
|
+
|
|
80
|
+
loop do
|
|
81
|
+
if work_pending?
|
|
82
|
+
# Run the task
|
|
83
|
+
yield
|
|
84
|
+
|
|
85
|
+
# Reset the wait interval
|
|
86
|
+
loop_back_off!(loop_base_interval)
|
|
87
|
+
elsif loop_back_off?
|
|
88
|
+
# Back off the wait interval a bit
|
|
89
|
+
loop_back_off!
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Wait for an interval, unless shutdown has been signaled.
|
|
93
|
+
mutex.synchronize do
|
|
94
|
+
return unless run_loop? || work_pending?
|
|
95
|
+
shutdown.wait(mutex, loop_wait_time) if run_loop?
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def shutdown
|
|
101
|
+
@shutdown ||= ConditionVariable.new
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'ddtrace/workers/async'
|
|
2
|
+
require 'ddtrace/workers/loop'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Workers
|
|
6
|
+
# Adds polling (async looping) behavior to workers
|
|
7
|
+
module Polling
|
|
8
|
+
SHUTDOWN_TIMEOUT = 1
|
|
9
|
+
|
|
10
|
+
def self.included(base)
|
|
11
|
+
base.send(:include, Workers::IntervalLoop)
|
|
12
|
+
base.send(:include, Workers::Async::Thread)
|
|
13
|
+
base.send(:prepend, PrependedMethods)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Methods that must be prepended
|
|
17
|
+
module PrependedMethods
|
|
18
|
+
def perform(*args)
|
|
19
|
+
super if enabled?
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def stop(force_stop = false, timeout = SHUTDOWN_TIMEOUT)
|
|
24
|
+
if running?
|
|
25
|
+
# Attempt graceful stop and wait
|
|
26
|
+
stop_loop
|
|
27
|
+
graceful = join(timeout)
|
|
28
|
+
|
|
29
|
+
# If timeout and force stop...
|
|
30
|
+
!graceful && force_stop ? terminate : graceful
|
|
31
|
+
else
|
|
32
|
+
false
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def enabled?
|
|
37
|
+
return true unless instance_variable_defined?(:@enabled)
|
|
38
|
+
@enabled
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Allow worker to be started
|
|
42
|
+
def enabled=(value)
|
|
43
|
+
# Coerce to boolean
|
|
44
|
+
@enabled = (value == true)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Workers
|
|
3
|
+
# Adds queue behavior to workers, with a buffer
|
|
4
|
+
# to which items can be queued then dequeued.
|
|
5
|
+
module Queue
|
|
6
|
+
def self.included(base)
|
|
7
|
+
base.send(:prepend, PrependedMethods)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Methods that must be prepended
|
|
11
|
+
module PrependedMethods
|
|
12
|
+
def perform(*args)
|
|
13
|
+
super(*dequeue) if work_pending?
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def buffer
|
|
18
|
+
@buffer ||= []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def enqueue(*args)
|
|
22
|
+
buffer.push(args)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def dequeue
|
|
26
|
+
buffer.shift
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def work_pending?
|
|
30
|
+
!buffer.empty?
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
|
|
35
|
+
attr_writer \
|
|
36
|
+
:buffer
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|