ddtrace 0.41.0 → 0.46.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 +223 -126
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.rubocop.yml +250 -7
- data/.rubocop_todo.yml +396 -0
- data/.simplecov +3 -0
- data/Appraisals +429 -135
- data/CHANGELOG.md +1158 -354
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +40 -3
- data/README.md +1 -0
- data/Rakefile +236 -29
- data/ddtrace.gemspec +4 -35
- data/docker-compose.yml +30 -0
- data/docs/DevelopmentGuide.md +40 -2
- data/docs/GettingStarted.md +186 -16
- data/integration/README.md +68 -0
- data/integration/apps/rack/.dockerignore +1 -0
- data/integration/apps/rack/.envrc.sample +1 -0
- data/integration/apps/rack/.gitignore +4 -0
- data/integration/apps/rack/.rspec +1 -0
- data/integration/apps/rack/Dockerfile +25 -0
- data/integration/apps/rack/Dockerfile-ci +11 -0
- data/integration/apps/rack/Gemfile +24 -0
- data/integration/apps/rack/README.md +93 -0
- data/integration/apps/rack/app/acme.rb +80 -0
- data/integration/apps/rack/app/datadog.rb +17 -0
- data/integration/apps/rack/bin/run +22 -0
- data/integration/apps/rack/bin/setup +17 -0
- data/integration/apps/rack/bin/test +24 -0
- data/integration/apps/rack/config.ru +6 -0
- data/integration/apps/rack/config/puma.rb +14 -0
- data/integration/apps/rack/config/unicorn.rb +23 -0
- data/integration/apps/rack/docker-compose.ci.yml +62 -0
- data/integration/apps/rack/docker-compose.yml +78 -0
- data/integration/apps/rack/script/build-images +38 -0
- data/integration/apps/rack/script/ci +50 -0
- data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rack/spec/spec_helper.rb +16 -0
- data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/.dockerignore +1 -0
- data/integration/apps/rails-five/.env +3 -0
- data/integration/apps/rails-five/.envrc.sample +1 -0
- data/integration/apps/rails-five/.gitignore +30 -0
- data/integration/apps/rails-five/Dockerfile +25 -0
- data/integration/apps/rails-five/Dockerfile-ci +11 -0
- data/integration/apps/rails-five/Gemfile +104 -0
- data/integration/apps/rails-five/README.md +94 -0
- data/integration/apps/rails-five/Rakefile +6 -0
- data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
- data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
- data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
- data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
- data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
- data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
- data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
- data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
- data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
- data/integration/apps/rails-five/app/models/application_record.rb +3 -0
- data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/models/test.rb +2 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
- data/integration/apps/rails-five/bin/bundle +3 -0
- data/integration/apps/rails-five/bin/rails +9 -0
- data/integration/apps/rails-five/bin/rake +9 -0
- data/integration/apps/rails-five/bin/run +24 -0
- data/integration/apps/rails-five/bin/setup +27 -0
- data/integration/apps/rails-five/bin/spring +17 -0
- data/integration/apps/rails-five/bin/test +21 -0
- data/integration/apps/rails-five/bin/update +28 -0
- data/integration/apps/rails-five/config.ru +5 -0
- data/integration/apps/rails-five/config/application.rb +97 -0
- data/integration/apps/rails-five/config/boot.rb +4 -0
- data/integration/apps/rails-five/config/cable.yml +10 -0
- data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
- data/integration/apps/rails-five/config/database.yml +28 -0
- data/integration/apps/rails-five/config/environment.rb +5 -0
- data/integration/apps/rails-five/config/environments/development.rb +51 -0
- data/integration/apps/rails-five/config/environments/production.rb +82 -0
- data/integration/apps/rails-five/config/environments/test.rb +43 -0
- data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
- data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
- data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
- data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
- data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
- data/integration/apps/rails-five/config/locales/en.yml +33 -0
- data/integration/apps/rails-five/config/puma.rb +24 -0
- data/integration/apps/rails-five/config/routes.rb +11 -0
- data/integration/apps/rails-five/config/spring.rb +6 -0
- data/integration/apps/rails-five/config/unicorn.rb +29 -0
- data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
- data/integration/apps/rails-five/db/schema.rb +23 -0
- data/integration/apps/rails-five/db/seeds.rb +7 -0
- data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
- data/integration/apps/rails-five/docker-compose.yml +100 -0
- data/integration/apps/rails-five/lib/tasks/.keep +0 -0
- data/integration/apps/rails-five/log/.keep +0 -0
- data/integration/apps/rails-five/public/robots.txt +1 -0
- data/integration/apps/rails-five/script/build-images +35 -0
- data/integration/apps/rails-five/script/ci +50 -0
- data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
- data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/storage/.keep +0 -0
- data/integration/apps/rails-five/tmp/.keep +0 -0
- data/integration/apps/rails-five/vendor/.keep +0 -0
- data/integration/apps/ruby/.dockerignore +1 -0
- data/integration/apps/ruby/.envrc.sample +1 -0
- data/integration/apps/ruby/.gitignore +2 -0
- data/integration/apps/ruby/Dockerfile +25 -0
- data/integration/apps/ruby/Dockerfile-ci +11 -0
- data/integration/apps/ruby/Gemfile +11 -0
- data/integration/apps/ruby/README.md +70 -0
- data/integration/apps/ruby/agent.yaml +3 -0
- data/integration/apps/ruby/app/datadog.rb +13 -0
- data/integration/apps/ruby/app/fibonacci.rb +58 -0
- data/integration/apps/ruby/bin/run +20 -0
- data/integration/apps/ruby/bin/setup +17 -0
- data/integration/apps/ruby/bin/test +21 -0
- data/integration/apps/ruby/docker-compose.ci.yml +51 -0
- data/integration/apps/ruby/docker-compose.yml +63 -0
- data/integration/apps/ruby/script/build-images +38 -0
- data/integration/apps/ruby/script/ci +50 -0
- data/integration/images/agent/Dockerfile +2 -0
- data/integration/images/agent/agent.yaml +3 -0
- data/integration/images/include/datadog/analyzer.rb +71 -0
- data/integration/images/include/datadog/demo_env.rb +101 -0
- data/integration/images/include/http-health-check +33 -0
- data/integration/images/ruby/2.0/Dockerfile +54 -0
- data/integration/images/ruby/2.1/Dockerfile +54 -0
- data/integration/images/ruby/2.2/Dockerfile +54 -0
- data/integration/images/ruby/2.3/Dockerfile +70 -0
- data/integration/images/ruby/2.4/Dockerfile +54 -0
- data/integration/images/ruby/2.5/Dockerfile +54 -0
- data/integration/images/ruby/2.6/Dockerfile +54 -0
- data/integration/images/ruby/2.7/Dockerfile +54 -0
- data/integration/images/ruby/3.0/Dockerfile +54 -0
- data/integration/images/wrk/Dockerfile +33 -0
- data/integration/images/wrk/scripts/entrypoint.sh +17 -0
- data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
- data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
- data/integration/script/build-images +43 -0
- data/lib/ddtrace.rb +10 -5
- data/lib/ddtrace/analytics.rb +2 -0
- data/lib/ddtrace/auto_instrument.rb +3 -0
- data/lib/ddtrace/auto_instrument_base.rb +6 -0
- data/lib/ddtrace/buffer.rb +230 -134
- data/lib/ddtrace/configuration.rb +21 -5
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/components.rb +2 -2
- data/lib/ddtrace/configuration/option_definition.rb +1 -3
- data/lib/ddtrace/configuration/options.rb +2 -3
- data/lib/ddtrace/configuration/settings.rb +21 -5
- data/lib/ddtrace/context.rb +23 -6
- data/lib/ddtrace/context_provider.rb +18 -5
- data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
- data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/event.rb +1 -5
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +17 -5
- data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +68 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +12 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +1 -1
- data/lib/ddtrace/contrib/aws/services.rb +2 -0
- data/lib/ddtrace/contrib/configurable.rb +2 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +6 -8
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +2 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +38 -15
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +11 -10
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +9 -7
- data/lib/ddtrace/contrib/extensions.rb +28 -1
- data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +47 -21
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
- data/lib/ddtrace/contrib/http/instrumentation.rb +7 -7
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +151 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +35 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +5 -6
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
- data/lib/ddtrace/contrib/patchable.rb +18 -7
- data/lib/ddtrace/contrib/patcher.rb +1 -1
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +19 -19
- data/lib/ddtrace/contrib/que/tracer.rb +3 -2
- data/lib/ddtrace/contrib/racecar/event.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
- data/lib/ddtrace/contrib/rack/integration.rb +7 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +19 -5
- data/lib/ddtrace/contrib/rails/utils.rb +4 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
- data/lib/ddtrace/contrib/rake/integration.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +3 -1
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +28 -0
- data/lib/ddtrace/contrib/redis/tags.rb +5 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
- data/lib/ddtrace/contrib/registry.rb +2 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/resque_job.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/rspec/example.rb +75 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +3 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +5 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
- data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +5 -5
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
- data/lib/ddtrace/contrib/sneakers/tracer.rb +16 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
- data/lib/ddtrace/correlation.rb +1 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +297 -0
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +11 -0
- data/lib/ddtrace/ext/http.rb +1 -1
- data/lib/ddtrace/ext/runtime.rb +2 -1
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/forced_tracing.rb +2 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/metrics.rb +10 -6
- data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
- data/lib/ddtrace/opentracer/span.rb +2 -6
- data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
- data/lib/ddtrace/patcher.rb +2 -3
- data/lib/ddtrace/pin.rb +3 -52
- data/lib/ddtrace/pipeline/span_filter.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +17 -4
- data/lib/ddtrace/propagation/http_propagator.rb +17 -2
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +2 -2
- data/lib/ddtrace/runtime/identity.rb +4 -5
- data/lib/ddtrace/sampler.rb +1 -1
- data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
- data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
- data/lib/ddtrace/span.rb +7 -7
- data/lib/ddtrace/sync_writer.rb +7 -10
- data/lib/ddtrace/tracer.rb +23 -10
- data/lib/ddtrace/transport/http.rb +1 -3
- data/lib/ddtrace/transport/http/adapters/net.rb +9 -4
- data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/builder.rb +2 -0
- data/lib/ddtrace/transport/http/traces.rb +2 -3
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/traces.rb +3 -0
- data/lib/ddtrace/utils.rb +10 -11
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/utils/time.rb +25 -1
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +5 -0
- data/lib/ddtrace/workers/async.rb +8 -0
- data/lib/ddtrace/workers/loop.rb +3 -0
- data/lib/ddtrace/workers/polling.rb +1 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
- data/lib/ddtrace/workers/trace_writer.rb +9 -10
- data/lib/ddtrace/writer.rb +22 -4
- metadata +168 -358
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/monkey.rb +0 -58
|
@@ -48,18 +48,34 @@ module Datadog
|
|
|
48
48
|
# This prevents recursive loops while initializing.
|
|
49
49
|
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
|
50
50
|
@temp_logger ||= begin
|
|
51
|
-
logger = configuration.logger.instance || Datadog::Logger.new(
|
|
51
|
+
logger = configuration.logger.instance || Datadog::Logger.new($stdout)
|
|
52
52
|
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
53
53
|
logger
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
# Gracefully shuts down all components.
|
|
59
|
+
#
|
|
60
|
+
# Components will still respond to method calls as usual,
|
|
61
|
+
# but might not internally perform their work after shutdown.
|
|
62
|
+
#
|
|
63
|
+
# This avoids errors being raised across the host application
|
|
64
|
+
# during shutdown, while allowing for graceful decommission of resources.
|
|
65
|
+
#
|
|
66
|
+
# Components won't be automatically reinitialized after a shutdown.
|
|
58
67
|
def shutdown!
|
|
59
|
-
if instance_variable_defined?(:@components) && @components
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
components.shutdown! if instance_variable_defined?(:@components) && @components
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Gracefully shuts down the tracer and disposes of component references,
|
|
72
|
+
# allowing execution to start anew.
|
|
73
|
+
#
|
|
74
|
+
# In contrast with +#shutdown!+, components will be automatically
|
|
75
|
+
# reinitialized after a reset.
|
|
76
|
+
def reset!
|
|
77
|
+
shutdown!
|
|
78
|
+
@components = nil
|
|
63
79
|
end
|
|
64
80
|
|
|
65
81
|
protected
|
|
@@ -7,7 +7,7 @@ require 'ddtrace/workers/runtime_metrics'
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Configuration
|
|
9
9
|
# Global components for the trace library.
|
|
10
|
-
# rubocop:disable
|
|
10
|
+
# rubocop:disable Layout/LineLength
|
|
11
11
|
class Components
|
|
12
12
|
class << self
|
|
13
13
|
def build_health_metrics(settings)
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def build_logger(settings)
|
|
22
|
-
logger = settings.logger.instance || Datadog::Logger.new(
|
|
22
|
+
logger = settings.logger.instance || Datadog::Logger.new($stdout)
|
|
23
23
|
logger.level = settings.diagnostics.debug ? ::Logger::DEBUG : settings.logger.level
|
|
24
24
|
|
|
25
25
|
logger
|
|
@@ -60,7 +60,7 @@ module Datadog
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def default(value = nil, &block)
|
|
63
|
-
@default =
|
|
63
|
+
@default = block || value
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def delegate_to(&block)
|
|
@@ -71,8 +71,6 @@ module Datadog
|
|
|
71
71
|
@helpers[name] = block
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
-
# rubocop:disable Style/TrivialAccessors
|
|
75
|
-
# (Rubocop erroneously thinks #lazy == #lazy= )
|
|
76
74
|
def lazy(value = true)
|
|
77
75
|
@lazy = value
|
|
78
76
|
end
|
|
@@ -51,6 +51,7 @@ module Datadog
|
|
|
51
51
|
def define_helpers(helpers)
|
|
52
52
|
helpers.each do |name, block|
|
|
53
53
|
next unless block.is_a?(Proc)
|
|
54
|
+
|
|
54
55
|
define_method(name, &block)
|
|
55
56
|
end
|
|
56
57
|
end
|
|
@@ -102,9 +103,7 @@ module Datadog
|
|
|
102
103
|
end
|
|
103
104
|
|
|
104
105
|
def assert_valid_option!(name)
|
|
105
|
-
unless option_defined?(name)
|
|
106
|
-
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
107
|
-
end
|
|
106
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
108
107
|
end
|
|
109
108
|
end
|
|
110
109
|
|
|
@@ -69,7 +69,8 @@ module Datadog
|
|
|
69
69
|
option :propagation_extract_style do |o|
|
|
70
70
|
o.default do
|
|
71
71
|
# Look for all headers by default
|
|
72
|
-
env_to_list(Ext::DistributedTracing::
|
|
72
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_EXTRACT_ENV,
|
|
73
|
+
Ext::DistributedTracing::PROPAGATION_EXTRACT_STYLE_ENV_OLD],
|
|
73
74
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG,
|
|
74
75
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3,
|
|
75
76
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3_SINGLE_HEADER])
|
|
@@ -81,7 +82,8 @@ module Datadog
|
|
|
81
82
|
option :propagation_inject_style do |o|
|
|
82
83
|
o.default do
|
|
83
84
|
# Only inject Datadog headers by default
|
|
84
|
-
env_to_list(Ext::DistributedTracing::
|
|
85
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_INJECT_ENV,
|
|
86
|
+
Ext::DistributedTracing::PROPAGATION_INJECT_STYLE_ENV_OLD],
|
|
85
87
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG])
|
|
86
88
|
end
|
|
87
89
|
|
|
@@ -185,9 +187,7 @@ module Datadog
|
|
|
185
187
|
string_tags = Hash[new_value.collect { |k, v| [k.to_s, v] }]
|
|
186
188
|
|
|
187
189
|
# Cross-populate tag values with other settings
|
|
188
|
-
if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
189
|
-
self.env = string_tags[Ext::Environment::TAG_ENV]
|
|
190
|
-
end
|
|
190
|
+
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
191
191
|
|
|
192
192
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
193
193
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
@@ -204,6 +204,22 @@ module Datadog
|
|
|
204
204
|
o.lazy
|
|
205
205
|
end
|
|
206
206
|
|
|
207
|
+
option :time_now_provider do |o|
|
|
208
|
+
o.default { ::Time.now }
|
|
209
|
+
|
|
210
|
+
o.on_set do |time_provider|
|
|
211
|
+
Utils::Time.now_provider = time_provider
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
o.resetter do |_value|
|
|
215
|
+
# TODO: Resetter needs access to the default value
|
|
216
|
+
# TODO: to help reduce duplication.
|
|
217
|
+
-> { ::Time.now }.tap do |default|
|
|
218
|
+
Utils::Time.now_provider = default
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
207
223
|
settings :tracer do
|
|
208
224
|
option :enabled do |o|
|
|
209
225
|
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require 'thread'
|
|
2
1
|
require 'ddtrace/diagnostics/health'
|
|
3
2
|
|
|
4
3
|
require 'ddtrace/context_flush'
|
|
5
4
|
require 'ddtrace/context_provider'
|
|
5
|
+
require 'ddtrace/utils/forking'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# \Context is used to keep track of a hierarchy of spans for the current
|
|
@@ -19,6 +19,8 @@ module Datadog
|
|
|
19
19
|
# This data structure is thread-safe.
|
|
20
20
|
# rubocop:disable Metrics/ClassLength
|
|
21
21
|
class Context
|
|
22
|
+
include Datadog::Utils::Forking
|
|
23
|
+
|
|
22
24
|
# 100k spans is about a 100Mb footprint
|
|
23
25
|
DEFAULT_MAX_LENGTH = 100_000
|
|
24
26
|
|
|
@@ -123,6 +125,7 @@ module Datadog
|
|
|
123
125
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
124
126
|
set_current_span(span.parent)
|
|
125
127
|
return if span.tracer.nil?
|
|
128
|
+
|
|
126
129
|
if span.parent.nil? && !all_spans_finished?
|
|
127
130
|
if Datadog.configuration.diagnostics.debug
|
|
128
131
|
opened_spans = @trace.length - @finished_spans
|
|
@@ -227,11 +230,26 @@ module Datadog
|
|
|
227
230
|
# Return a string representation of the context.
|
|
228
231
|
def to_s
|
|
229
232
|
@mutex.synchronize do
|
|
230
|
-
# rubocop:disable
|
|
233
|
+
# rubocop:disable Layout/LineLength
|
|
231
234
|
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
|
232
235
|
end
|
|
233
236
|
end
|
|
234
237
|
|
|
238
|
+
# Generates equivalent context for forked processes.
|
|
239
|
+
#
|
|
240
|
+
# When Context from parent process is forked, child process
|
|
241
|
+
# should have a Context belonging to the same trace but not
|
|
242
|
+
# have the parent process spans.
|
|
243
|
+
def fork_clone
|
|
244
|
+
self.class.new(
|
|
245
|
+
trace_id: trace_id,
|
|
246
|
+
span_id: span_id,
|
|
247
|
+
sampled: sampled?,
|
|
248
|
+
sampling_priority: sampling_priority,
|
|
249
|
+
origin: origin
|
|
250
|
+
)
|
|
251
|
+
end
|
|
252
|
+
|
|
235
253
|
private
|
|
236
254
|
|
|
237
255
|
def reset(options = {})
|
|
@@ -282,6 +300,7 @@ module Datadog
|
|
|
282
300
|
def start_time
|
|
283
301
|
@mutex.synchronize do
|
|
284
302
|
return nil if @trace.empty?
|
|
303
|
+
|
|
285
304
|
@trace[0].start_time
|
|
286
305
|
end
|
|
287
306
|
end
|
|
@@ -294,11 +313,9 @@ module Datadog
|
|
|
294
313
|
end
|
|
295
314
|
|
|
296
315
|
# Iterate on each span within the trace. This is thread safe.
|
|
297
|
-
def each_span
|
|
316
|
+
def each_span(&block)
|
|
298
317
|
@mutex.synchronize do
|
|
299
|
-
@trace.each
|
|
300
|
-
yield span
|
|
301
|
-
end
|
|
318
|
+
@trace.each(&block)
|
|
302
319
|
end
|
|
303
320
|
end
|
|
304
321
|
end
|
|
@@ -13,9 +13,20 @@ module Datadog
|
|
|
13
13
|
@context.local = ctx
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
# Return the
|
|
17
|
-
def context
|
|
18
|
-
@context.local
|
|
16
|
+
# Return the local context.
|
|
17
|
+
def context(key = nil)
|
|
18
|
+
current_context = key.nil? ? @context.local : @context.local(key)
|
|
19
|
+
|
|
20
|
+
# Rebuild/reset context after a fork
|
|
21
|
+
#
|
|
22
|
+
# We don't want forked processes to copy and retransmit spans
|
|
23
|
+
# that were generated from the parent process. Reset it such
|
|
24
|
+
# that it acts like a distributed trace.
|
|
25
|
+
current_context.after_fork! do
|
|
26
|
+
current_context = self.context = current_context.fork_clone
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
current_context
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
32
|
|
|
@@ -43,8 +54,10 @@ module Datadog
|
|
|
43
54
|
end
|
|
44
55
|
|
|
45
56
|
# Return the thread-local context.
|
|
46
|
-
def local
|
|
47
|
-
Thread.
|
|
57
|
+
def local(thread = Thread.current)
|
|
58
|
+
raise ArgumentError, '\'thread\' must be a Thread.' unless thread.is_a?(Thread)
|
|
59
|
+
|
|
60
|
+
thread[@key] ||= Datadog::Context.new
|
|
48
61
|
end
|
|
49
62
|
end
|
|
50
63
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_cable/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_cable/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -36,9 +36,7 @@ module Datadog
|
|
|
36
36
|
|
|
37
37
|
begin
|
|
38
38
|
# Set the resource name, if it's still the default name
|
|
39
|
-
if span.resource == span.name
|
|
40
|
-
span.resource = "#{payload.fetch(:controller)}##{payload.fetch(:action)}"
|
|
41
|
-
end
|
|
39
|
+
span.resource = "#{payload.fetch(:controller)}##{payload.fetch(:action)}" if span.resource == span.name
|
|
42
40
|
|
|
43
41
|
# Set the resource name of the Rack request span unless this is an exception controller.
|
|
44
42
|
unless exception_controller?(payload)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_pack/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_pack/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -12,10 +12,6 @@ module Datadog
|
|
|
12
12
|
|
|
13
13
|
# Class methods for ActionView events.
|
|
14
14
|
module ClassMethods
|
|
15
|
-
def span_options
|
|
16
|
-
{ service: configuration[:service_name] }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
15
|
def tracer
|
|
20
16
|
-> { configuration[:tracer] }
|
|
21
17
|
end
|
|
@@ -25,7 +21,7 @@ module Datadog
|
|
|
25
21
|
end
|
|
26
22
|
|
|
27
23
|
def record_exception(span, payload)
|
|
28
|
-
if payload
|
|
24
|
+
if payload[:exception_object]
|
|
29
25
|
span.set_error(payload[:exception_object])
|
|
30
26
|
elsif payload[:exception]
|
|
31
27
|
# Fallback for ActiveSupport < 5.0
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_view/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_view/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -32,6 +33,12 @@ module Datadog
|
|
|
32
33
|
super && version >= MINIMUM_VERSION
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
# enabled by rails integration so should only auto instrument
|
|
37
|
+
# if detected that it is being used without rails
|
|
38
|
+
def auto_instrument?
|
|
39
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
40
|
+
end
|
|
41
|
+
|
|
35
42
|
def default_configuration
|
|
36
43
|
Configuration::Settings.new
|
|
37
44
|
end
|
|
@@ -12,7 +12,17 @@ module Datadog
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def resolve(key)
|
|
15
|
-
normalize(
|
|
15
|
+
normalize(resolve_connection_key(key).symbolize_keys)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def resolve_connection_key(key)
|
|
19
|
+
result = connection_resolver.resolve(key)
|
|
20
|
+
|
|
21
|
+
if result.respond_to?(:configuration_hash) # Rails >= 6.1
|
|
22
|
+
result.configuration_hash
|
|
23
|
+
else # Rails < 6.1
|
|
24
|
+
result
|
|
25
|
+
end
|
|
16
26
|
end
|
|
17
27
|
|
|
18
28
|
def configurations
|
|
@@ -21,7 +31,9 @@ module Datadog
|
|
|
21
31
|
|
|
22
32
|
def connection_resolver
|
|
23
33
|
@resolver ||= begin
|
|
24
|
-
if defined?(::ActiveRecord::
|
|
34
|
+
if defined?(::ActiveRecord::Base.configurations.resolve)
|
|
35
|
+
::ActiveRecord::DatabaseConfigurations.new(configurations)
|
|
36
|
+
elsif defined?(::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver)
|
|
25
37
|
::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(configurations)
|
|
26
38
|
else
|
|
27
39
|
::Datadog::Vendor::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(configurations)
|
|
@@ -31,9 +43,9 @@ module Datadog
|
|
|
31
43
|
|
|
32
44
|
def normalize(hash)
|
|
33
45
|
{
|
|
34
|
-
adapter:
|
|
35
|
-
host:
|
|
36
|
-
port:
|
|
46
|
+
adapter: hash[:adapter],
|
|
47
|
+
host: hash[:host],
|
|
48
|
+
port: hash[:port],
|
|
37
49
|
database: hash[:database],
|
|
38
50
|
username: hash[:username]
|
|
39
51
|
}
|