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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/contrib/analytics'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Que
|
|
8
|
+
# Tracer is a Que's server-side middleware which traces executed jobs
|
|
9
|
+
class Tracer
|
|
10
|
+
def call(job)
|
|
11
|
+
trace_options = {
|
|
12
|
+
service: configuration[:service_name],
|
|
13
|
+
span_type: Datadog::Ext::AppTypes::WORKER
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
tracer.trace(Ext::SPAN_JOB, trace_options) do |request_span|
|
|
17
|
+
request_span.resource = job.class.name.to_s
|
|
18
|
+
request_span.set_tag(Ext::TAG_JOB_QUEUE, job.que_attrs[:queue])
|
|
19
|
+
request_span.set_tag(Ext::TAG_JOB_ID, job.que_attrs[:id])
|
|
20
|
+
request_span.set_tag(Ext::TAG_JOB_PRIORITY, job.que_attrs[:priority])
|
|
21
|
+
request_span.set_tag(Ext::TAG_JOB_ERROR_COUNT, job.que_attrs[:error_count])
|
|
22
|
+
request_span.set_tag(Ext::TAG_JOB_RUN_AT, job.que_attrs[:run_at])
|
|
23
|
+
request_span.set_tag(Ext::TAG_JOB_EXPIRED_AT, job.que_attrs[:expired_at])
|
|
24
|
+
request_span.set_tag(Ext::TAG_JOB_FINISHED_AT, job.que_attrs[:finished_at])
|
|
25
|
+
request_span.set_tag(Ext::TAG_JOB_ARGS, job.que_attrs[:args]) if configuration[:tag_args]
|
|
26
|
+
request_span.set_tag(Ext::TAG_JOB_DATA, job.que_attrs[:data]) if configuration[:tag_data]
|
|
27
|
+
|
|
28
|
+
set_sample_rate(request_span)
|
|
29
|
+
Contrib::Analytics.set_measured(request_span)
|
|
30
|
+
|
|
31
|
+
yield
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def set_sample_rate(request_span)
|
|
38
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
39
|
+
Contrib::Analytics.set_sample_rate(
|
|
40
|
+
request_span,
|
|
41
|
+
configuration[:analytics_sample_rate]
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def tracer
|
|
47
|
+
configuration[:tracer]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def configuration
|
|
51
|
+
Datadog.configuration[Datadog::Contrib::Que::Ext::APP.to_sym]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -7,13 +7,18 @@ module Datadog
|
|
|
7
7
|
module Configuration
|
|
8
8
|
# Custom settings for the Racecar integration
|
|
9
9
|
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
10
15
|
option :analytics_enabled do |o|
|
|
11
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
12
17
|
o.lazy
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
option :analytics_sample_rate do |o|
|
|
16
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
17
22
|
o.lazy
|
|
18
23
|
end
|
|
19
24
|
|
|
@@ -41,6 +41,10 @@ module Datadog
|
|
|
41
41
|
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
42
42
|
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
43
43
|
end
|
|
44
|
+
|
|
45
|
+
# Measure service stats
|
|
46
|
+
Contrib::Analytics.set_measured(span)
|
|
47
|
+
|
|
44
48
|
span.set_tag(Ext::TAG_TOPIC, payload[:topic])
|
|
45
49
|
span.set_tag(Ext::TAG_CONSUMER, payload[:consumer_class])
|
|
46
50
|
span.set_tag(Ext::TAG_PARTITION, payload[:partition])
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'ddtrace/contrib/racecar/events/batch'
|
|
2
2
|
require 'ddtrace/contrib/racecar/events/message'
|
|
3
|
+
require 'ddtrace/contrib/racecar/events/consume'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
5
6
|
module Contrib
|
|
@@ -7,6 +8,7 @@ module Datadog
|
|
|
7
8
|
# Defines collection of instrumented Racecar events
|
|
8
9
|
module Events
|
|
9
10
|
ALL = [
|
|
11
|
+
Events::Consume,
|
|
10
12
|
Events::Batch,
|
|
11
13
|
Events::Message
|
|
12
14
|
].freeze
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ddtrace/contrib/racecar/ext'
|
|
2
|
+
require 'ddtrace/contrib/racecar/event'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Racecar
|
|
7
|
+
module Events
|
|
8
|
+
# Defines instrumentation for main_loop.racecar event
|
|
9
|
+
module Consume
|
|
10
|
+
include Racecar::Event
|
|
11
|
+
|
|
12
|
+
EVENT_NAME = 'main_loop.racecar'.freeze
|
|
13
|
+
|
|
14
|
+
module_function
|
|
15
|
+
|
|
16
|
+
def event_name
|
|
17
|
+
self::EVENT_NAME
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def span_name
|
|
21
|
+
Ext::SPAN_CONSUME
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -4,9 +4,13 @@ module Datadog
|
|
|
4
4
|
# Racecar integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'racecar'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_RACECAR_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACECAR_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_RACECAR_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RACECAR_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
SERVICE_NAME = 'racecar'.freeze
|
|
13
|
+
SPAN_CONSUME = 'racecar.consume'.freeze
|
|
10
14
|
SPAN_BATCH = 'racecar.batch'.freeze
|
|
11
15
|
SPAN_MESSAGE = 'racecar.message'.freeze
|
|
12
16
|
TAG_CONSUMER = 'kafka.consumer'.freeze
|
|
@@ -9,18 +9,21 @@ module Datadog
|
|
|
9
9
|
class Integration
|
|
10
10
|
include Contrib::Integration
|
|
11
11
|
|
|
12
|
+
MINIMUM_VERSION = Gem::Version.new('0.3.5')
|
|
13
|
+
|
|
12
14
|
register_as :racecar, auto_patch: false
|
|
13
15
|
|
|
14
16
|
def self.version
|
|
15
17
|
Gem.loaded_specs['racecar'] && Gem.loaded_specs['racecar'].version
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
def self.
|
|
19
|
-
|
|
20
|
+
def self.loaded?
|
|
21
|
+
!defined?(::Racecar).nil? \
|
|
22
|
+
&& !defined?(::ActiveSupport::Notifications).nil?
|
|
20
23
|
end
|
|
21
24
|
|
|
22
25
|
def self.compatible?
|
|
23
|
-
super &&
|
|
26
|
+
super && version >= MINIMUM_VERSION
|
|
24
27
|
end
|
|
25
28
|
|
|
26
29
|
def default_configuration
|
|
@@ -12,19 +12,13 @@ module Datadog
|
|
|
12
12
|
|
|
13
13
|
module_function
|
|
14
14
|
|
|
15
|
-
def
|
|
16
|
-
|
|
15
|
+
def target_version
|
|
16
|
+
Integration.version
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def patch
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# Subscribe to Racecar events
|
|
23
|
-
Events.subscribe!
|
|
24
|
-
rescue StandardError => e
|
|
25
|
-
Datadog::Tracer.log.error("Unable to apply Racecar integration: #{e}")
|
|
26
|
-
end
|
|
27
|
-
end
|
|
20
|
+
# Subscribe to Racecar events
|
|
21
|
+
Events.subscribe!
|
|
28
22
|
end
|
|
29
23
|
end
|
|
30
24
|
end
|
|
@@ -14,13 +14,18 @@ module Datadog
|
|
|
14
14
|
]
|
|
15
15
|
}.freeze
|
|
16
16
|
|
|
17
|
+
option :enabled do |o|
|
|
18
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
19
|
+
o.lazy
|
|
20
|
+
end
|
|
21
|
+
|
|
17
22
|
option :analytics_enabled do |o|
|
|
18
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
23
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], nil) }
|
|
19
24
|
o.lazy
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
option :analytics_sample_rate do |o|
|
|
23
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
28
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
24
29
|
o.lazy
|
|
25
30
|
end
|
|
26
31
|
|
|
@@ -4,8 +4,11 @@ module Datadog
|
|
|
4
4
|
# Rack integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rack'.freeze
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
ENV_ENABLED = 'DD_TRACE_RACK_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RACK_ANALYTICS_ENABLED'.freeze
|
|
9
|
+
ENV_ANALYTICS_ENABLED_OLD = 'DD_RACK_ANALYTICS_ENABLED'.freeze
|
|
10
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
|
+
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_RACK_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
12
|
RACK_ENV_REQUEST_SPAN = 'datadog.rack_request_span'.freeze
|
|
10
13
|
SERVICE_NAME = 'rack'.freeze
|
|
11
14
|
SPAN_HTTP_SERVER_QUEUE = 'http_server.queue'.freeze
|
|
@@ -9,14 +9,20 @@ module Datadog
|
|
|
9
9
|
class Integration
|
|
10
10
|
include Contrib::Integration
|
|
11
11
|
|
|
12
|
+
MINIMUM_VERSION = Gem::Version.new('1.1.0')
|
|
13
|
+
|
|
12
14
|
register_as :rack, auto_patch: false
|
|
13
15
|
|
|
14
16
|
def self.version
|
|
15
17
|
Gem.loaded_specs['rack'] && Gem.loaded_specs['rack'].version
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
def self.
|
|
19
|
-
|
|
20
|
+
def self.loaded?
|
|
21
|
+
!defined?(::Rack).nil?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.compatible?
|
|
25
|
+
super && version >= MINIMUM_VERSION
|
|
20
26
|
end
|
|
21
27
|
|
|
22
28
|
def default_configuration
|
|
@@ -4,6 +4,8 @@ require 'ddtrace/propagation/http_propagator'
|
|
|
4
4
|
require 'ddtrace/contrib/analytics'
|
|
5
5
|
require 'ddtrace/contrib/rack/ext'
|
|
6
6
|
require 'ddtrace/contrib/rack/request_queue'
|
|
7
|
+
require 'ddtrace/environment'
|
|
8
|
+
require 'date'
|
|
7
9
|
|
|
8
10
|
module Datadog
|
|
9
11
|
module Contrib
|
|
@@ -98,23 +100,26 @@ module Datadog
|
|
|
98
100
|
request_span.set_error(e) unless request_span.nil?
|
|
99
101
|
raise e
|
|
100
102
|
ensure
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
103
|
+
if request_span
|
|
104
|
+
# Rack is a really low level interface and it doesn't provide any
|
|
105
|
+
# advanced functionality like routers. Because of that, we assume that
|
|
106
|
+
# the underlying framework or application has more knowledge about
|
|
107
|
+
# the result for this request; `resource` and `tags` are expected to
|
|
108
|
+
# be set in another level but if they're missing, reasonable defaults
|
|
109
|
+
# are used.
|
|
110
|
+
set_request_tags!(request_span, env, status, headers, response, original_env || env)
|
|
111
|
+
|
|
112
|
+
# ensure the request_span is finished and the context reset;
|
|
113
|
+
# this assumes that the Rack middleware creates a root span
|
|
114
|
+
request_span.finish
|
|
115
|
+
end
|
|
116
|
+
|
|
112
117
|
frontend_span.finish unless frontend_span.nil?
|
|
113
118
|
|
|
114
119
|
# TODO: Remove this once we change how context propagation works. This
|
|
115
120
|
# ensures we clean thread-local variables on each HTTP request avoiding
|
|
116
121
|
# memory leaks.
|
|
117
|
-
tracer.provider.context = Datadog::Context.new
|
|
122
|
+
tracer.provider.context = Datadog::Context.new if tracer
|
|
118
123
|
end
|
|
119
124
|
|
|
120
125
|
def resource_name_for(env, status)
|
|
@@ -126,6 +131,7 @@ module Datadog
|
|
|
126
131
|
end
|
|
127
132
|
|
|
128
133
|
# rubocop:disable Metrics/AbcSize
|
|
134
|
+
# rubocop:disable Metrics/MethodLength
|
|
129
135
|
def set_request_tags!(request_span, env, status, headers, response, original_env)
|
|
130
136
|
# http://www.rubydoc.info/github/rack/rack/file/SPEC
|
|
131
137
|
# The source of truth in Rack is the PATH_INFO key that holds the
|
|
@@ -152,6 +158,9 @@ module Datadog
|
|
|
152
158
|
Contrib::Analytics.set_sample_rate(request_span, configuration[:analytics_sample_rate])
|
|
153
159
|
end
|
|
154
160
|
|
|
161
|
+
# Measure service stats
|
|
162
|
+
Contrib::Analytics.set_measured(request_span)
|
|
163
|
+
|
|
155
164
|
if request_span.get_tag(Datadog::Ext::HTTP::METHOD).nil?
|
|
156
165
|
request_span.set_tag(Datadog::Ext::HTTP::METHOD, env['REQUEST_METHOD'])
|
|
157
166
|
end
|
|
@@ -218,7 +227,7 @@ module Datadog
|
|
|
218
227
|
if key == :datadog_rack_request_span \
|
|
219
228
|
&& @datadog_span_warning \
|
|
220
229
|
&& @datadog_deprecation_warnings
|
|
221
|
-
Datadog
|
|
230
|
+
Datadog.logger.warn(REQUEST_SPAN_DEPRECATION_WARNING)
|
|
222
231
|
@datadog_span_warning = true
|
|
223
232
|
end
|
|
224
233
|
super
|
|
@@ -228,7 +237,7 @@ module Datadog
|
|
|
228
237
|
if key == :datadog_rack_request_span \
|
|
229
238
|
&& @datadog_span_warning \
|
|
230
239
|
&& @datadog_deprecation_warnings
|
|
231
|
-
Datadog
|
|
240
|
+
Datadog.logger.warn(REQUEST_SPAN_DEPRECATION_WARNING)
|
|
232
241
|
@datadog_span_warning = true
|
|
233
242
|
end
|
|
234
243
|
super
|
|
@@ -2,36 +2,33 @@ module Datadog
|
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
4
|
# Provides instrumentation for `rack`
|
|
5
|
-
module
|
|
5
|
+
module MiddlewarePatcher
|
|
6
6
|
include Contrib::Patcher
|
|
7
7
|
|
|
8
8
|
module_function
|
|
9
9
|
|
|
10
|
-
def
|
|
11
|
-
|
|
10
|
+
def target_version
|
|
11
|
+
Integration.version
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def patch
|
|
15
15
|
# Patch middleware
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
require_relative 'middlewares'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
rescue StandardError => e
|
|
34
|
-
Datadog::Tracer.log.error("Unable to apply Rack integration: #{e}")
|
|
20
|
+
# Provides instrumentation for Rack middleware names
|
|
21
|
+
module MiddlewareNamePatcher
|
|
22
|
+
include Contrib::Patcher
|
|
23
|
+
|
|
24
|
+
module_function
|
|
25
|
+
|
|
26
|
+
def target_version
|
|
27
|
+
Integration.version
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patch
|
|
31
|
+
patch_middleware_names
|
|
35
32
|
end
|
|
36
33
|
|
|
37
34
|
def patch_middleware_names
|
|
@@ -41,7 +38,7 @@ module Datadog
|
|
|
41
38
|
# context of middleware patching outside a Rails server process (eg. a
|
|
42
39
|
# process that doesn't serve HTTP requests but has Rails environment
|
|
43
40
|
# loaded such as a Resque master process)
|
|
44
|
-
|
|
41
|
+
Datadog.logger.debug("Error patching middleware stack: #{e}")
|
|
45
42
|
end
|
|
46
43
|
|
|
47
44
|
def retain_middleware_name(middleware)
|
|
@@ -67,6 +64,44 @@ module Datadog
|
|
|
67
64
|
Datadog.configuration[:rack].get_option(option)
|
|
68
65
|
end
|
|
69
66
|
end
|
|
67
|
+
|
|
68
|
+
# Applies multiple patches
|
|
69
|
+
module Patcher
|
|
70
|
+
PATCHERS = [
|
|
71
|
+
MiddlewarePatcher,
|
|
72
|
+
MiddlewareNamePatcher
|
|
73
|
+
].freeze
|
|
74
|
+
|
|
75
|
+
module_function
|
|
76
|
+
|
|
77
|
+
def patched?
|
|
78
|
+
PATCHERS.all?(&:patched?)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def target_version
|
|
82
|
+
Integration.version
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def patch
|
|
86
|
+
MiddlewarePatcher.patch unless MiddlewarePatcher.patched?
|
|
87
|
+
|
|
88
|
+
# Patch middleware names
|
|
89
|
+
if !MiddlewareNamePatcher.patched? && get_option(:middleware_names)
|
|
90
|
+
if get_option(:application)
|
|
91
|
+
MiddlewareNamePatcher.patch
|
|
92
|
+
else
|
|
93
|
+
Datadog.logger.warn(%(
|
|
94
|
+
Rack :middleware_names requires you to also pass :application.
|
|
95
|
+
Middleware names have NOT been patched; please provide :application.
|
|
96
|
+
e.g. use: :rack, middleware_names: true, application: my_rack_app).freeze)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def get_option(option)
|
|
102
|
+
Datadog.configuration[:rack].get_option(option)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
70
105
|
end
|
|
71
106
|
end
|
|
72
107
|
end
|