ddtrace 0.44.0 → 0.48.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 +183 -15
- data/.circleci/images/primary/Dockerfile-2.0.0 +11 -1
- data/.circleci/images/primary/Dockerfile-2.1.10 +11 -1
- data/.circleci/images/primary/Dockerfile-2.2.10 +11 -1
- data/.circleci/images/primary/Dockerfile-2.3.8 +10 -0
- data/.circleci/images/primary/Dockerfile-2.4.6 +10 -0
- data/.circleci/images/primary/Dockerfile-2.5.6 +10 -0
- data/.circleci/images/primary/Dockerfile-2.6.4 +10 -0
- data/.circleci/images/primary/Dockerfile-2.7.0 +10 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2-latest +88 -0
- data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2.0.0} +1 -5
- data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
- data/.github/workflows/create-next-milestone.yml +2 -2
- data/.gitlab-ci.yml +18 -18
- data/.rubocop.yml +269 -7
- data/.rubocop_todo.yml +438 -0
- data/.simplecov +6 -0
- data/Appraisals +87 -9
- data/CHANGELOG.md +238 -1
- data/Gemfile +63 -3
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/Rakefile +65 -25
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +9 -36
- data/docker-compose.yml +75 -7
- data/docs/DevelopmentGuide.md +28 -0
- data/docs/GettingStarted.md +162 -68
- data/docs/ProfilingDevelopment.md +88 -0
- data/integration/README.md +67 -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 +28 -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 +8 -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 +121 -26
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/components.rb +87 -5
- data/lib/ddtrace/configuration/option_definition.rb +1 -3
- data/lib/ddtrace/configuration/options.rb +4 -7
- data/lib/ddtrace/configuration/settings.rb +48 -3
- data/lib/ddtrace/context.rb +5 -6
- data/lib/ddtrace/context_provider.rb +0 -1
- 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 -1
- 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/makara_resolver.rb +30 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +107 -18
- data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +57 -20
- data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +2 -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/patcher.rb +1 -0
- data/lib/ddtrace/contrib/aws/services.rb +2 -0
- data/lib/ddtrace/contrib/configurable.rb +63 -39
- data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +19 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -10
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -2
- data/lib/ddtrace/contrib/cucumber/formatter.rb +5 -11
- data/lib/ddtrace/contrib/cucumber/integration.rb +5 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -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 +10 -9
- data/lib/ddtrace/contrib/excon/middleware.rb +2 -6
- 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/endpoint.rb +8 -15
- 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 +5 -5
- 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 +14 -20
- data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
- 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/qless_job.rb +1 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +19 -19
- data/lib/ddtrace/contrib/que/tracer.rb +1 -1
- 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 +6 -2
- 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 +11 -4
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -0
- 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 +17 -1
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/patcher.rb +4 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +24 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -10
- data/lib/ddtrace/contrib/rspec/example.rb +24 -10
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -3
- data/lib/ddtrace/contrib/rspec/integration.rb +6 -1
- data/lib/ddtrace/contrib/rspec/patcher.rb +0 -2
- 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 +7 -4
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +2 -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 +3 -3
- data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
- data/lib/ddtrace/contrib/sneakers/tracer.rb +2 -4
- data/lib/ddtrace/contrib/status_code_matcher.rb +5 -3
- data/lib/ddtrace/correlation.rb +1 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +3 -2
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
- data/lib/ddtrace/error.rb +2 -0
- data/lib/ddtrace/ext/ci.rb +43 -10
- data/lib/ddtrace/ext/distributed.rb +1 -1
- data/lib/ddtrace/ext/git.rb +0 -1
- data/lib/ddtrace/ext/http.rb +1 -1
- data/lib/ddtrace/ext/profiling.rb +52 -0
- data/lib/ddtrace/ext/runtime.rb +3 -1
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/forced_tracing.rb +2 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/metrics.rb +14 -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/profiling.rb +54 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +32 -0
- data/lib/ddtrace/profiling/buffer.rb +41 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +253 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +31 -0
- data/lib/ddtrace/profiling/event.rb +13 -0
- data/lib/ddtrace/profiling/events/stack.rb +102 -0
- data/lib/ddtrace/profiling/exporter.rb +23 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +54 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +134 -0
- data/lib/ddtrace/profiling/ext/forking.rb +97 -0
- data/lib/ddtrace/profiling/flush.rb +41 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +121 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +85 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +12 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +18 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +81 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +90 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +10 -0
- data/lib/ddtrace/profiling/pprof/template.rb +114 -0
- data/lib/ddtrace/profiling/preload.rb +3 -0
- data/lib/ddtrace/profiling/profiler.rb +28 -0
- data/lib/ddtrace/profiling/recorder.rb +87 -0
- data/lib/ddtrace/profiling/scheduler.rb +84 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +77 -0
- data/lib/ddtrace/profiling/transport/client.rb +12 -0
- data/lib/ddtrace/profiling/transport/http.rb +122 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +43 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +90 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +36 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +40 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +28 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +33 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +21 -0
- data/lib/ddtrace/profiling/transport/io.rb +30 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +27 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +16 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +17 -0
- data/lib/ddtrace/profiling/transport/request.rb +15 -0
- data/lib/ddtrace/profiling/transport/response.rb +8 -0
- 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 +32 -26
- data/lib/ddtrace/runtime/identity.rb +8 -0
- data/lib/ddtrace/sampler.rb +1 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +4 -9
- data/lib/ddtrace/span.rb +7 -7
- data/lib/ddtrace/sync_writer.rb +12 -12
- data/lib/ddtrace/tasks/exec.rb +48 -0
- data/lib/ddtrace/tasks/help.rb +14 -0
- data/lib/ddtrace/tracer.rb +28 -5
- 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/client.rb +15 -8
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +6 -0
- data/lib/ddtrace/transport/parcel.rb +4 -0
- data/lib/ddtrace/transport/traces.rb +18 -1
- data/lib/ddtrace/utils/compression.rb +27 -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 +3 -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 +14 -1
- data/lib/ddtrace/workers/trace_writer.rb +10 -10
- data/lib/ddtrace/writer.rb +7 -4
- metadata +213 -379
- 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/contrib/rspec/example_group.rb +0 -61
- data/lib/ddtrace/monkey.rb +0 -58
|
@@ -5,33 +5,32 @@ module Datadog
|
|
|
5
5
|
module Configuration
|
|
6
6
|
# Resolves a value to a configuration key
|
|
7
7
|
module Resolvers
|
|
8
|
-
# Matches
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
# Matches Strings and Regexps against `object.to_s` objects
|
|
9
|
+
# and Procs against plain objects.
|
|
10
|
+
class PatternResolver < Contrib::Configuration::Resolver
|
|
11
|
+
def resolve(value)
|
|
12
|
+
return if configurations.empty?
|
|
12
13
|
|
|
13
14
|
# Try to find a matching pattern
|
|
14
|
-
|
|
15
|
-
if
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
end
|
|
15
|
+
_, config = configurations.reverse_each.find do |matcher, _|
|
|
16
|
+
matcher === if matcher.is_a?(Proc)
|
|
17
|
+
value
|
|
18
|
+
else
|
|
19
|
+
value.to_s
|
|
20
|
+
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
matching_pattern
|
|
23
|
+
config
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
patterns << (pattern.is_a?(Regexp) || pattern.is_a?(Proc) ? pattern : pattern.to_s)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
26
|
+
protected
|
|
32
27
|
|
|
33
|
-
def
|
|
34
|
-
|
|
28
|
+
def parse_matcher(matcher)
|
|
29
|
+
if matcher.is_a?(Regexp) || matcher.is_a?(Proc)
|
|
30
|
+
matcher
|
|
31
|
+
else
|
|
32
|
+
matcher.to_s
|
|
33
|
+
end
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
36
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/configuration/base'
|
|
2
|
+
require 'ddtrace/utils/only_once'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
4
5
|
module Contrib
|
|
@@ -7,6 +8,8 @@ module Datadog
|
|
|
7
8
|
class Settings
|
|
8
9
|
include Datadog::Configuration::Base
|
|
9
10
|
|
|
11
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
12
|
+
|
|
10
13
|
option :analytics_enabled, default: false
|
|
11
14
|
option :analytics_sample_rate, default: 1.0
|
|
12
15
|
option :enabled, default: true
|
|
@@ -14,7 +17,7 @@ module Datadog
|
|
|
14
17
|
option :tracer do |o|
|
|
15
18
|
o.delegate_to { Datadog.tracer }
|
|
16
19
|
o.on_set do |_value|
|
|
17
|
-
log_deprecation_warning
|
|
20
|
+
log_deprecation_warning
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
|
|
@@ -41,11 +44,9 @@ module Datadog
|
|
|
41
44
|
the correct tracer internally.
|
|
42
45
|
).freeze
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
do_once(method_name) do
|
|
48
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
|
|
47
|
+
def log_deprecation_warning
|
|
48
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
49
|
+
Datadog.logger.warn("tracer:#{DEPRECATION_WARNING}:#{caller.join("\n")}")
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
end
|
|
@@ -12,16 +12,6 @@ module Datadog
|
|
|
12
12
|
o.lazy
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
option :analytics_enabled do |o|
|
|
16
|
-
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, true) }
|
|
17
|
-
o.lazy
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
option :analytics_sample_rate do |o|
|
|
21
|
-
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
22
|
-
o.lazy
|
|
23
|
-
end
|
|
24
|
-
|
|
25
15
|
option :service_name do |o|
|
|
26
16
|
o.default { Datadog.configuration.service || Ext::SERVICE_NAME }
|
|
27
17
|
o.lazy
|
|
@@ -4,8 +4,6 @@ module Datadog
|
|
|
4
4
|
# Cucumber integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'cucumber'.freeze
|
|
7
|
-
ENV_ANALYTICS_ENABLED = 'DD_TRACE_CUCUMBER_ANALYTICS_ENABLED'.freeze
|
|
8
|
-
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_CUCUMBER_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
7
|
ENV_ENABLED = 'DD_TRACE_CUCUMBER_ENABLED'.freeze
|
|
10
8
|
ENV_OPERATION_NAME = 'DD_TRACE_CUCUMBER_OPERATION_NAME'.freeze
|
|
11
9
|
FRAMEWORK = 'cucumber'.freeze
|
|
@@ -9,10 +9,8 @@ module Datadog
|
|
|
9
9
|
module Cucumber
|
|
10
10
|
# Defines collection of instrumented Cucumber events
|
|
11
11
|
class Formatter
|
|
12
|
-
attr_reader :config
|
|
12
|
+
attr_reader :config, :current_feature_span, :current_step_span
|
|
13
13
|
private :config
|
|
14
|
-
|
|
15
|
-
attr_reader :current_feature_span, :current_step_span
|
|
16
14
|
private :current_feature_span, :current_step_span
|
|
17
15
|
|
|
18
16
|
def initialize(config)
|
|
@@ -43,17 +41,13 @@ module Datadog
|
|
|
43
41
|
@current_feature_span.set_tag(Datadog::Ext::Test::TAG_TYPE, Ext::TEST_TYPE)
|
|
44
42
|
@current_feature_span.set_tag(Datadog::Ext::Test::TAG_SPAN_KIND, Datadog::Ext::AppTypes::TEST)
|
|
45
43
|
|
|
46
|
-
# Set analytics sample rate
|
|
47
|
-
if Datadog::Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
48
|
-
Datadog::Contrib::Analytics.set_sample_rate(@current_feature_span, configuration[:analytics_sample_rate])
|
|
49
|
-
end
|
|
50
|
-
|
|
51
44
|
# Measure service stats
|
|
52
45
|
Contrib::Analytics.set_measured(@current_feature_span)
|
|
53
46
|
end
|
|
54
47
|
|
|
55
48
|
def on_test_case_finished(event)
|
|
56
49
|
return if @current_feature_span.nil?
|
|
50
|
+
|
|
57
51
|
@current_feature_span.status = 1 if event.result.failed?
|
|
58
52
|
@current_feature_span.set_tag(Datadog::Ext::Test::TAG_STATUS, status_from_result(event.result))
|
|
59
53
|
@current_feature_span.finish
|
|
@@ -69,9 +63,8 @@ module Datadog
|
|
|
69
63
|
|
|
70
64
|
def on_test_step_finished(event)
|
|
71
65
|
return if @current_step_span.nil?
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
end
|
|
66
|
+
|
|
67
|
+
@current_step_span.set_error event.result.exception unless event.result.passed?
|
|
75
68
|
@current_step_span.set_tag(Datadog::Ext::Test::TAG_STATUS, status_from_result(event.result))
|
|
76
69
|
@current_step_span.finish
|
|
77
70
|
end
|
|
@@ -84,6 +77,7 @@ module Datadog
|
|
|
84
77
|
elsif result.ok?
|
|
85
78
|
return Datadog::Ext::Test::Status::PASS
|
|
86
79
|
end
|
|
80
|
+
|
|
87
81
|
Datadog::Ext::Test::Status::FAIL
|
|
88
82
|
end
|
|
89
83
|
|
|
@@ -17,46 +17,8 @@ module Datadog
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def patch
|
|
20
|
-
add_pin!
|
|
21
20
|
::Dalli::Server.send(:include, Instrumentation)
|
|
22
21
|
end
|
|
23
|
-
|
|
24
|
-
# DEPRECATED: Only kept for users still using `Dalli.datadog_pin` to configure.
|
|
25
|
-
# Replaced by configuration API, i.e. `c.use :dalli`.
|
|
26
|
-
def add_pin!
|
|
27
|
-
DeprecatedPin
|
|
28
|
-
.new(
|
|
29
|
-
get_option(:service_name),
|
|
30
|
-
app: Ext::APP,
|
|
31
|
-
app_type: Datadog::Ext::AppTypes::CACHE,
|
|
32
|
-
tracer: -> { get_option(:tracer) }
|
|
33
|
-
).onto(::Dalli)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def get_option(option)
|
|
37
|
-
Datadog.configuration[:dalli].get_option(option)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
41
|
-
# To be removed when support for Datadog::Pin with Dalli is removed.
|
|
42
|
-
class DeprecatedPin < Datadog::Pin
|
|
43
|
-
include Datadog::DeprecatedPin
|
|
44
|
-
|
|
45
|
-
DEPRECATION_WARNING = %(
|
|
46
|
-
Use of Datadog::Pin with Dalli is DEPRECATED.
|
|
47
|
-
Upgrade to the configuration API using the migration guide here:
|
|
48
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
49
|
-
|
|
50
|
-
def service_name=(service_name)
|
|
51
|
-
Datadog.configuration[:dalli][:service_name] = service_name
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def log_deprecation_warning(method_name)
|
|
55
|
-
do_once(method_name) do
|
|
56
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
22
|
end
|
|
61
23
|
end
|
|
62
24
|
end
|
|
@@ -17,7 +17,7 @@ module Datadog
|
|
|
17
17
|
|
|
18
18
|
def format_url(url)
|
|
19
19
|
sanitize_fragment_with_id(url)
|
|
20
|
-
.gsub(/(
|
|
20
|
+
.gsub(/(?:\d+)/, PLACEHOLDER)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def format_body(body, options = {})
|
|
@@ -60,6 +60,7 @@ module Datadog
|
|
|
60
60
|
# If JSON parsing fails, it prints fail_value.
|
|
61
61
|
def reserialize_json(string, fail_value = PLACEHOLDER)
|
|
62
62
|
return string unless block_given?
|
|
63
|
+
|
|
63
64
|
begin
|
|
64
65
|
JSON.dump(yield(JSON.parse(string)))
|
|
65
66
|
rescue JSON::ParserError
|
|
@@ -72,7 +73,7 @@ module Datadog
|
|
|
72
73
|
# This is meant as simple heuristic that attempts to detect if particular fragment
|
|
73
74
|
# represents document Id. This is meant to reduce the cardinality in most frequent cases.
|
|
74
75
|
def sanitize_fragment_with_id(url)
|
|
75
|
-
url.gsub(%r{^(/?[^/]*/[^/]*/)(?:[
|
|
76
|
+
url.gsub(%r{^(/?[^/]*/[^/]*/)(?:[^?/\d]*\d+[^?/]*)}, ID_PLACEHOLDER)
|
|
76
77
|
end
|
|
77
78
|
end
|
|
78
79
|
end
|
|
@@ -13,8 +13,8 @@ module Datadog
|
|
|
13
13
|
def self.included(base)
|
|
14
14
|
base.send(:prepend, InstanceMethods)
|
|
15
15
|
end
|
|
16
|
+
|
|
16
17
|
# InstanceMethods - implementing instrumentation
|
|
17
|
-
# rubocop:disable Metrics/ModuleLength
|
|
18
18
|
module InstanceMethods
|
|
19
19
|
include Datadog::Contrib::HttpAnnotationHelper
|
|
20
20
|
|
|
@@ -36,12 +36,14 @@ module Datadog
|
|
|
36
36
|
def perform
|
|
37
37
|
load_datadog_configuration_for(url)
|
|
38
38
|
return super unless tracer_enabled?
|
|
39
|
+
|
|
39
40
|
datadog_before_request
|
|
40
41
|
super
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
def complete
|
|
44
45
|
return super unless tracer_enabled?
|
|
46
|
+
|
|
45
47
|
begin
|
|
46
48
|
response_options = mirror.options
|
|
47
49
|
response_code = (response_options[:response_code] || response_options[:code]).to_i
|
|
@@ -100,20 +102,20 @@ module Datadog
|
|
|
100
102
|
def datadog_tag_request
|
|
101
103
|
span = @datadog_span
|
|
102
104
|
method = Ext::NOT_APPLICABLE_METHOD
|
|
103
|
-
if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
|
|
104
|
-
method = @datadog_method.to_s
|
|
105
|
-
end
|
|
105
|
+
method = @datadog_method.to_s if instance_variable_defined?(:@datadog_method) && !@datadog_method.nil?
|
|
106
106
|
span.resource = method
|
|
107
107
|
# Tag as an external peer service
|
|
108
108
|
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
109
109
|
# Set analytics sample rate
|
|
110
110
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
111
111
|
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
this_uri = uri
|
|
113
|
+
return unless this_uri
|
|
114
|
+
|
|
115
|
+
span.set_tag(Datadog::Ext::HTTP::URL, this_uri.path)
|
|
114
116
|
span.set_tag(Datadog::Ext::HTTP::METHOD, method)
|
|
115
|
-
span.set_tag(Datadog::Ext::NET::TARGET_HOST,
|
|
116
|
-
span.set_tag(Datadog::Ext::NET::TARGET_PORT,
|
|
117
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, this_uri.host)
|
|
118
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, this_uri.port)
|
|
117
119
|
end
|
|
118
120
|
|
|
119
121
|
def set_span_error_message(message)
|
|
@@ -124,7 +126,6 @@ module Datadog
|
|
|
124
126
|
|
|
125
127
|
def uri
|
|
126
128
|
URI.parse(url)
|
|
127
|
-
# rubocop:disable Lint/HandleExceptions
|
|
128
129
|
rescue URI::InvalidURIError
|
|
129
130
|
end
|
|
130
131
|
|
|
@@ -119,9 +119,7 @@ module Datadog
|
|
|
119
119
|
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
120
120
|
|
|
121
121
|
# Set analytics sample rate
|
|
122
|
-
if analytics_enabled?
|
|
123
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
124
|
-
end
|
|
122
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
125
123
|
|
|
126
124
|
span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
|
|
127
125
|
span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
|
|
@@ -136,9 +134,7 @@ module Datadog
|
|
|
136
134
|
|
|
137
135
|
if datum.key?(:response)
|
|
138
136
|
response = datum[:response]
|
|
139
|
-
if error_handler.call(response)
|
|
140
|
-
span.set_error(["Error #{response[:status]}", response[:body]])
|
|
141
|
-
end
|
|
137
|
+
span.set_error(["Error #{response[:status]}", response[:body]]) if error_handler.call(response)
|
|
142
138
|
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response[:status])
|
|
143
139
|
end
|
|
144
140
|
span.set_error(datum[:error]) if datum.key?(:error)
|
|
@@ -27,8 +27,27 @@ module Datadog
|
|
|
27
27
|
|
|
28
28
|
# Activate integrations
|
|
29
29
|
if target.respond_to?(:integrations_pending_activation)
|
|
30
|
+
reduce_verbosity = target.respond_to?(:reduce_verbosity?) ? target.reduce_verbosity? : false
|
|
30
31
|
target.integrations_pending_activation.each do |integration|
|
|
31
|
-
|
|
32
|
+
next unless integration.respond_to?(:patch)
|
|
33
|
+
|
|
34
|
+
# integration.patch returns either true or a hash of details on why patching failed
|
|
35
|
+
patch_results = integration.patch
|
|
36
|
+
|
|
37
|
+
next if patch_results == true
|
|
38
|
+
|
|
39
|
+
# if patching failed, only log output if verbosity is unset
|
|
40
|
+
# or if patching failure is due to compatibility or integration specific reasons
|
|
41
|
+
next unless !reduce_verbosity ||
|
|
42
|
+
((patch_results[:available] && patch_results[:loaded]) &&
|
|
43
|
+
(!patch_results[:compatible] || !patch_results[:patchable]))
|
|
44
|
+
|
|
45
|
+
desc = "Available?: #{patch_results[:available]}"
|
|
46
|
+
desc += ", Loaded? #{patch_results[:loaded]}"
|
|
47
|
+
desc += ", Compatible? #{patch_results[:compatible]}"
|
|
48
|
+
desc += ", Patchable? #{patch_results[:patchable]}"
|
|
49
|
+
|
|
50
|
+
Datadog.logger.warn("Unable to patch #{patch_results[:name]} (#{desc})")
|
|
32
51
|
end
|
|
33
52
|
|
|
34
53
|
target.integrations_pending_activation.clear
|
|
@@ -48,9 +67,32 @@ module Datadog
|
|
|
48
67
|
end
|
|
49
68
|
end
|
|
50
69
|
|
|
51
|
-
|
|
70
|
+
# For the provided `integration_name`, resolves a matching configuration
|
|
71
|
+
# for the provided integration from an integration-specific `key`.
|
|
72
|
+
#
|
|
73
|
+
# How the matching is performed is integration-specific.
|
|
74
|
+
#
|
|
75
|
+
# @param [Symbol] integration_name the integration name
|
|
76
|
+
# @param [Object] key the integration-specific lookup key
|
|
77
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
|
78
|
+
def [](integration_name, key = :default)
|
|
79
|
+
integration = fetch_integration(integration_name)
|
|
80
|
+
integration.resolve(key) unless integration.nil?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# For the provided `integration_name`, retrieves a configuration previously
|
|
84
|
+
# stored by `#instrument`. Specifically, `describes` should be
|
|
85
|
+
# the same value provided in the `describes:` option for `#instrument`.
|
|
86
|
+
#
|
|
87
|
+
# If no `describes` value is provided, the default configuration is returned.
|
|
88
|
+
#
|
|
89
|
+
# @param [Symbol] integration_name the integration name
|
|
90
|
+
# @param [Object] describes the previously configured `describes:` object. If `nil`,
|
|
91
|
+
# fetches the default configuration
|
|
92
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
|
93
|
+
def configuration(integration_name, describes = nil)
|
|
52
94
|
integration = fetch_integration(integration_name)
|
|
53
|
-
integration.configuration(
|
|
95
|
+
integration.configuration(describes) unless integration.nil?
|
|
54
96
|
end
|
|
55
97
|
|
|
56
98
|
def instrument(integration_name, options = {}, &block)
|
|
@@ -86,6 +128,14 @@ module Datadog
|
|
|
86
128
|
registry[name] ||
|
|
87
129
|
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
|
88
130
|
end
|
|
131
|
+
|
|
132
|
+
def reduce_verbosity?
|
|
133
|
+
defined?(@reduce_verbosity) ? @reduce_verbosity : false
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def reduce_log_verbosity
|
|
137
|
+
@reduce_verbosity ||= true
|
|
138
|
+
end
|
|
89
139
|
end
|
|
90
140
|
end
|
|
91
141
|
end
|
|
@@ -57,9 +57,7 @@ module Datadog
|
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def handle_response(span, env, options)
|
|
60
|
-
if options.fetch(:error_handler).call(env)
|
|
61
|
-
span.set_error(["Error #{env[:status]}", env[:body]])
|
|
62
|
-
end
|
|
60
|
+
span.set_error(["Error #{env[:status]}", env[:body]]) if options.fetch(:error_handler).call(env)
|
|
63
61
|
|
|
64
62
|
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status])
|
|
65
63
|
end
|
|
@@ -20,21 +20,10 @@ module Datadog
|
|
|
20
20
|
def patch
|
|
21
21
|
require 'ddtrace/contrib/faraday/middleware'
|
|
22
22
|
|
|
23
|
-
add_pin!
|
|
24
23
|
register_middleware!
|
|
25
24
|
add_default_middleware!
|
|
26
25
|
end
|
|
27
26
|
|
|
28
|
-
def add_pin!
|
|
29
|
-
DeprecatedPin
|
|
30
|
-
.new(
|
|
31
|
-
get_option(:service_name),
|
|
32
|
-
app: Ext::APP,
|
|
33
|
-
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
|
34
|
-
tracer: -> { get_option(:tracer) }
|
|
35
|
-
).onto(::Faraday)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
27
|
def register_middleware!
|
|
39
28
|
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
|
40
29
|
end
|
|
@@ -58,31 +47,6 @@ module Datadog
|
|
|
58
47
|
::Faraday::RackBuilder.send(:prepend, RackBuilder)
|
|
59
48
|
end
|
|
60
49
|
end
|
|
61
|
-
|
|
62
|
-
def get_option(option)
|
|
63
|
-
Datadog.configuration[:faraday].get_option(option)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
67
|
-
# To be removed when support for Datadog::Pin with Faraday is removed.
|
|
68
|
-
class DeprecatedPin < Datadog::Pin
|
|
69
|
-
include Datadog::DeprecatedPin
|
|
70
|
-
|
|
71
|
-
DEPRECATION_WARNING = %(
|
|
72
|
-
Use of Datadog::Pin with Faraday is DEPRECATED.
|
|
73
|
-
Upgrade to the configuration API using the migration guide here:
|
|
74
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
75
|
-
|
|
76
|
-
def service_name=(service_name)
|
|
77
|
-
Datadog.configuration[:faraday][:service_name] = service_name
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def log_deprecation_warning(method_name)
|
|
81
|
-
do_once(method_name) do
|
|
82
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
50
|
end
|
|
87
51
|
end
|
|
88
52
|
end
|