ddtrace 0.42.0 → 0.47.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 +5 -5
- data/.circleci/config.yml +274 -137
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2-latest} +2 -1
- data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-truffleruby-21.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 +397 -0
- data/.simplecov +9 -0
- data/Appraisals +386 -142
- data/CHANGELOG.md +1218 -362
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +55 -3
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/Rakefile +216 -29
- data/ddtrace.gemspec +4 -36
- data/docker-compose.yml +105 -7
- data/docs/DevelopmentGuide.md +30 -2
- data/docs/GettingStarted.md +242 -22
- 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 +4 -4
- data/lib/ddtrace/configuration.rb +108 -23
- 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 +4 -7
- data/lib/ddtrace/configuration/settings.rb +21 -5
- data/lib/ddtrace/context.rb +23 -6
- data/lib/ddtrace/context_provider.rb +12 -2
- 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 +101 -18
- 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 +3 -0
- data/lib/ddtrace/contrib/configurable.rb +63 -37
- data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
- 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 +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +2 -1
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
- 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 +53 -3
- 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/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 +147 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +15 -21
- data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
- 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 +9 -6
- data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
- 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 +11 -4
- 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 +14 -5
- 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 +4 -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 +25 -4
- data/lib/ddtrace/pin.rb +8 -61
- data/lib/ddtrace/pipeline/span_filter.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
- data/lib/ddtrace/propagation/http_propagator.rb +17 -2
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +2 -2
- data/lib/ddtrace/runtime/container.rb +27 -29
- data/lib/ddtrace/runtime/identity.rb +12 -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 +12 -12
- data/lib/ddtrace/tracer.rb +21 -6
- data/lib/ddtrace/transport/http.rb +15 -8
- data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
- 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 +7 -1
- data/lib/ddtrace/transport/http/env.rb +8 -0
- data/lib/ddtrace/transport/http/traces.rb +2 -3
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +6 -0
- data/lib/ddtrace/transport/traces.rb +18 -1
- data/lib/ddtrace/utils.rb +10 -11
- data/lib/ddtrace/utils/compression.rb +27 -0
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/utils/object_set.rb +41 -0
- data/lib/ddtrace/utils/only_once.rb +40 -0
- data/lib/ddtrace/utils/sequence.rb +17 -0
- data/lib/ddtrace/utils/string_table.rb +45 -0
- data/lib/ddtrace/utils/time.rb +32 -1
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +5 -0
- data/lib/ddtrace/workers/async.rb +11 -3
- data/lib/ddtrace/workers/loop.rb +17 -3
- data/lib/ddtrace/workers/polling.rb +1 -0
- data/lib/ddtrace/workers/queue.rb +1 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
- data/lib/ddtrace/workers/trace_writer.rb +10 -10
- data/lib/ddtrace/writer.rb +26 -5
- metadata +186 -373
- 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
|
@@ -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
|
|
@@ -14,10 +14,8 @@ module Datadog
|
|
|
14
14
|
# Class behavior for a configuration object with options
|
|
15
15
|
module ClassMethods
|
|
16
16
|
def options
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
20
|
-
end
|
|
17
|
+
# Allows for class inheritance of option definitions
|
|
18
|
+
@options ||= superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
protected
|
|
@@ -51,6 +49,7 @@ module Datadog
|
|
|
51
49
|
def define_helpers(helpers)
|
|
52
50
|
helpers.each do |name, block|
|
|
53
51
|
next unless block.is_a?(Proc)
|
|
52
|
+
|
|
54
53
|
define_method(name, &block)
|
|
55
54
|
end
|
|
56
55
|
end
|
|
@@ -102,9 +101,7 @@ module Datadog
|
|
|
102
101
|
end
|
|
103
102
|
|
|
104
103
|
def assert_valid_option!(name)
|
|
105
|
-
unless option_defined?(name)
|
|
106
|
-
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
107
|
-
end
|
|
104
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
108
105
|
end
|
|
109
106
|
end
|
|
110
107
|
|
|
@@ -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
|
|
@@ -15,7 +15,18 @@ module Datadog
|
|
|
15
15
|
|
|
16
16
|
# Return the local context.
|
|
17
17
|
def context(key = nil)
|
|
18
|
-
key.nil? ? @context.local : @context.local(key)
|
|
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
|
|
|
@@ -44,7 +55,6 @@ module Datadog
|
|
|
44
55
|
|
|
45
56
|
# Return the thread-local context.
|
|
46
57
|
def local(thread = Thread.current)
|
|
47
|
-
raise ArgumentError, '\'thread\' must be a Thread.' unless thread.is_a?(Thread)
|
|
48
58
|
thread[@key] ||= Datadog::Context.new
|
|
49
59
|
end
|
|
50
60
|
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
|
|
@@ -6,36 +6,119 @@ module Datadog
|
|
|
6
6
|
module ActiveRecord
|
|
7
7
|
module Configuration
|
|
8
8
|
# Converts Symbols, Strings, and Hashes to a normalized connection settings Hash.
|
|
9
|
+
#
|
|
10
|
+
# When matching using a Hash, these are the valid fields:
|
|
11
|
+
# ```
|
|
12
|
+
# {
|
|
13
|
+
# adapter: ...,
|
|
14
|
+
# host: ...,
|
|
15
|
+
# port: ...,
|
|
16
|
+
# database: ...,
|
|
17
|
+
# username: ...,
|
|
18
|
+
# role: ...,
|
|
19
|
+
# }
|
|
20
|
+
# ```
|
|
21
|
+
#
|
|
22
|
+
# Partial matching is supported: not including certain fields or setting them to `nil`
|
|
23
|
+
# will cause them to matching all values for that field. For example: `database: nil`
|
|
24
|
+
# will match any database, given the remaining fields match.
|
|
25
|
+
#
|
|
26
|
+
# Any fields not listed above are discarded.
|
|
27
|
+
#
|
|
28
|
+
# When more than one configuration could be matched, the last one to match is selected,
|
|
29
|
+
# based on addition order (`#add`).
|
|
9
30
|
class Resolver < Contrib::Configuration::Resolver
|
|
10
|
-
def initialize(
|
|
11
|
-
|
|
31
|
+
def initialize(active_record_configuration = nil)
|
|
32
|
+
super()
|
|
33
|
+
|
|
34
|
+
@active_record_configuration = active_record_configuration
|
|
12
35
|
end
|
|
13
36
|
|
|
14
|
-
def
|
|
15
|
-
|
|
37
|
+
def active_record_configuration
|
|
38
|
+
@active_record_configuration || ::ActiveRecord::Base.configurations
|
|
16
39
|
end
|
|
17
40
|
|
|
18
|
-
def
|
|
19
|
-
|
|
41
|
+
def add(matcher, value)
|
|
42
|
+
parsed = parse_matcher(matcher)
|
|
43
|
+
|
|
44
|
+
# In case of error parsing, don't store `nil` key
|
|
45
|
+
# as it wouldn't be useful for matching configuration
|
|
46
|
+
# hashes in `#resolve`.
|
|
47
|
+
super(parsed, value) if parsed
|
|
20
48
|
end
|
|
21
49
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
50
|
+
def resolve(db_config)
|
|
51
|
+
active_record_config = resolve_connection_key(db_config).symbolize_keys
|
|
52
|
+
|
|
53
|
+
hash = normalize(active_record_config)
|
|
54
|
+
|
|
55
|
+
# Hashes in Ruby maintain insertion order
|
|
56
|
+
_, config = @configurations.reverse_each.find do |matcher, _|
|
|
57
|
+
matcher.none? do |key, value|
|
|
58
|
+
value != hash[key]
|
|
28
59
|
end
|
|
29
60
|
end
|
|
61
|
+
|
|
62
|
+
config
|
|
63
|
+
rescue => e
|
|
64
|
+
Datadog.logger.error(
|
|
65
|
+
"Failed to resolve ActiveRecord configuration key #{db_config.inspect}. " \
|
|
66
|
+
"Cause: #{e.message} Source: #{e.backtrace.first}"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
nil
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
protected
|
|
73
|
+
|
|
74
|
+
def parse_matcher(matcher)
|
|
75
|
+
resolved_pattern = resolve_connection_key(matcher).symbolize_keys
|
|
76
|
+
normalized = normalize(resolved_pattern)
|
|
77
|
+
|
|
78
|
+
# Remove empty fields to allow for partial matching
|
|
79
|
+
normalized.reject! { |_, v| v.nil? }
|
|
80
|
+
|
|
81
|
+
normalized
|
|
82
|
+
rescue => e
|
|
83
|
+
Datadog.logger.error(
|
|
84
|
+
"Failed to resolve ActiveRecord configuration key #{matcher.inspect}. " \
|
|
85
|
+
"Cause: #{e.message} Source: #{e.backtrace.first}"
|
|
86
|
+
)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def connection_resolver
|
|
90
|
+
@resolver ||= if defined?(::ActiveRecord::Base.configurations.resolve)
|
|
91
|
+
::ActiveRecord::DatabaseConfigurations.new(active_record_configuration)
|
|
92
|
+
elsif defined?(::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver)
|
|
93
|
+
::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
|
94
|
+
active_record_configuration
|
|
95
|
+
)
|
|
96
|
+
else
|
|
97
|
+
::Datadog::Vendor::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
|
98
|
+
active_record_configuration
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def resolve_connection_key(key)
|
|
104
|
+
result = connection_resolver.resolve(key)
|
|
105
|
+
|
|
106
|
+
if result.respond_to?(:configuration_hash) # Rails >= 6.1
|
|
107
|
+
result.configuration_hash
|
|
108
|
+
else # Rails < 6.1
|
|
109
|
+
result
|
|
110
|
+
end
|
|
30
111
|
end
|
|
31
112
|
|
|
32
|
-
|
|
113
|
+
# Extract only fields we'd like to match
|
|
114
|
+
# from the ActiveRecord configuration.
|
|
115
|
+
def normalize(active_record_config)
|
|
33
116
|
{
|
|
34
|
-
adapter:
|
|
35
|
-
host:
|
|
36
|
-
port:
|
|
37
|
-
database:
|
|
38
|
-
username:
|
|
117
|
+
adapter: active_record_config[:adapter],
|
|
118
|
+
host: active_record_config[:host],
|
|
119
|
+
port: active_record_config[:port],
|
|
120
|
+
database: active_record_config[:database],
|
|
121
|
+
username: active_record_config[:username]
|
|
39
122
|
}
|
|
40
123
|
end
|
|
41
124
|
end
|