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
|
@@ -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::AppTypes::WEB,
|
|
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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/configuration/settings'
|
|
2
2
|
require 'ddtrace/ext/http'
|
|
3
3
|
require 'ddtrace/contrib/grape/ext'
|
|
4
|
+
require 'ddtrace/contrib/status_code_matcher'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -24,6 +25,12 @@ module Datadog
|
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
option :service_name, default: Ext::SERVICE_NAME
|
|
28
|
+
|
|
29
|
+
option :error_statuses, default: nil do |o|
|
|
30
|
+
o.setter do |new_value, _old_value|
|
|
31
|
+
Datadog::Contrib::StatusCodeMatcher.new(new_value) unless new_value.nil?
|
|
32
|
+
end
|
|
33
|
+
end
|
|
27
34
|
end
|
|
28
35
|
end
|
|
29
36
|
end
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
require 'ddtrace/ext/http'
|
|
3
2
|
require 'ddtrace/ext/errors'
|
|
4
3
|
require 'ddtrace/contrib/analytics'
|
|
@@ -52,6 +51,7 @@ module Datadog
|
|
|
52
51
|
|
|
53
52
|
def endpoint_run(name, start, finish, id, payload)
|
|
54
53
|
return unless Thread.current[KEY_RUN]
|
|
54
|
+
|
|
55
55
|
Thread.current[KEY_RUN] = false
|
|
56
56
|
|
|
57
57
|
return unless enabled?
|
|
@@ -62,17 +62,12 @@ module Datadog
|
|
|
62
62
|
begin
|
|
63
63
|
# collect endpoint details
|
|
64
64
|
api = payload[:endpoint].options[:for]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
api.to_s
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
path = payload[:endpoint].options[:path].join('/')
|
|
75
|
-
resource = "#{api_view}##{path}"
|
|
65
|
+
|
|
66
|
+
api_view = api_view(api)
|
|
67
|
+
|
|
68
|
+
request_method = payload[:endpoint].options[:method].first
|
|
69
|
+
path = endpoint_expand_path(payload[:endpoint])
|
|
70
|
+
resource = "#{api_view} #{request_method} #{path}"
|
|
76
71
|
span.resource = resource
|
|
77
72
|
|
|
78
73
|
# set the request span resource if it's a `rack.request` span
|
|
@@ -82,19 +77,22 @@ module Datadog
|
|
|
82
77
|
end
|
|
83
78
|
|
|
84
79
|
# Set analytics sample rate
|
|
85
|
-
if analytics_enabled?
|
|
86
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
87
|
-
end
|
|
80
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
88
81
|
|
|
89
82
|
# Measure service stats
|
|
90
83
|
Contrib::Analytics.set_measured(span)
|
|
91
84
|
|
|
92
85
|
# catch thrown exceptions
|
|
93
|
-
|
|
86
|
+
|
|
87
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
94
88
|
|
|
95
89
|
# override the current span with this notification values
|
|
96
90
|
span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
|
|
97
91
|
span.set_tag(Ext::TAG_ROUTE_PATH, path)
|
|
92
|
+
span.set_tag(Ext::TAG_ROUTE_METHOD, request_method)
|
|
93
|
+
|
|
94
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, request_method)
|
|
95
|
+
span.set_tag(Datadog::Ext::HTTP::URL, path)
|
|
98
96
|
ensure
|
|
99
97
|
span.start(start)
|
|
100
98
|
span.finish(finish)
|
|
@@ -121,6 +119,7 @@ module Datadog
|
|
|
121
119
|
|
|
122
120
|
def endpoint_render(name, start, finish, id, payload)
|
|
123
121
|
return unless Thread.current[KEY_RENDER]
|
|
122
|
+
|
|
124
123
|
Thread.current[KEY_RENDER] = false
|
|
125
124
|
|
|
126
125
|
return unless enabled?
|
|
@@ -133,7 +132,7 @@ module Datadog
|
|
|
133
132
|
# Measure service stats
|
|
134
133
|
Contrib::Analytics.set_measured(span)
|
|
135
134
|
|
|
136
|
-
span.set_error(payload[:exception_object])
|
|
135
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
137
136
|
ensure
|
|
138
137
|
span.start(start)
|
|
139
138
|
span.finish(finish)
|
|
@@ -160,15 +159,14 @@ module Datadog
|
|
|
160
159
|
|
|
161
160
|
begin
|
|
162
161
|
# Set analytics sample rate
|
|
163
|
-
if analytics_enabled?
|
|
164
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
165
|
-
end
|
|
162
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
166
163
|
|
|
167
164
|
# Measure service stats
|
|
168
165
|
Contrib::Analytics.set_measured(span)
|
|
169
166
|
|
|
170
167
|
# catch thrown exceptions
|
|
171
|
-
span.set_error(payload[:exception_object])
|
|
168
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
169
|
+
|
|
172
170
|
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
173
171
|
ensure
|
|
174
172
|
span.start(start)
|
|
@@ -180,6 +178,25 @@ module Datadog
|
|
|
180
178
|
|
|
181
179
|
private
|
|
182
180
|
|
|
181
|
+
def api_view(api)
|
|
182
|
+
# If the API inherits from Grape::API in version >= 1.2.0
|
|
183
|
+
# then the API will be an instance and the name must be derived from the base.
|
|
184
|
+
# See https://github.com/ruby-grape/grape/issues/1825
|
|
185
|
+
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
|
|
186
|
+
api.base.to_s
|
|
187
|
+
else
|
|
188
|
+
api.to_s
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def endpoint_expand_path(endpoint)
|
|
193
|
+
route_path = endpoint.options[:path]
|
|
194
|
+
namespace = endpoint.routes.first && endpoint.routes.first.namespace || ''
|
|
195
|
+
|
|
196
|
+
parts = (namespace.split('/') + route_path).reject { |p| p.blank? || p.eql?('/') }
|
|
197
|
+
parts.join('/').prepend('/')
|
|
198
|
+
end
|
|
199
|
+
|
|
183
200
|
def tracer
|
|
184
201
|
datadog_configuration[:tracer]
|
|
185
202
|
end
|
|
@@ -196,6 +213,15 @@ module Datadog
|
|
|
196
213
|
datadog_configuration[:analytics_sample_rate]
|
|
197
214
|
end
|
|
198
215
|
|
|
216
|
+
def exception_is_error?(exception)
|
|
217
|
+
matcher = datadog_configuration[:error_statuses]
|
|
218
|
+
return false unless exception
|
|
219
|
+
return true unless matcher
|
|
220
|
+
return true unless exception.respond_to?('status')
|
|
221
|
+
|
|
222
|
+
matcher.include?(exception.status)
|
|
223
|
+
end
|
|
224
|
+
|
|
199
225
|
def enabled?
|
|
200
226
|
datadog_configuration[:enabled] == true
|
|
201
227
|
end
|
|
@@ -22,51 +22,9 @@ module Datadog
|
|
|
22
22
|
# Patch endpoints
|
|
23
23
|
::Grape::Endpoint.send(:include, Instrumentation)
|
|
24
24
|
|
|
25
|
-
add_pin!
|
|
26
|
-
|
|
27
25
|
# Subscribe to ActiveSupport events
|
|
28
26
|
Datadog::Contrib::Grape::Endpoint.subscribe
|
|
29
27
|
end
|
|
30
|
-
|
|
31
|
-
def add_pin!
|
|
32
|
-
# Attach a Pin object globally and set the service once
|
|
33
|
-
pin = DeprecatedPin.new(
|
|
34
|
-
get_option(:service_name),
|
|
35
|
-
app: Ext::APP,
|
|
36
|
-
app_type: Datadog::Ext::AppTypes::WEB,
|
|
37
|
-
tracer: -> { get_option(:tracer) }
|
|
38
|
-
)
|
|
39
|
-
pin.onto(::Grape)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def get_option(option)
|
|
43
|
-
Datadog.configuration[:grape].get_option(option)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
47
|
-
# To be removed when support for Datadog::Pin with Grape is removed.
|
|
48
|
-
class DeprecatedPin < Datadog::Pin
|
|
49
|
-
include Datadog::DeprecatedPin
|
|
50
|
-
|
|
51
|
-
DEPRECATION_WARNING = %(
|
|
52
|
-
Use of Datadog::Pin with Grape is DEPRECATED.
|
|
53
|
-
Upgrade to the configuration API using the migration guide here:
|
|
54
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
55
|
-
|
|
56
|
-
def tracer=(tracer)
|
|
57
|
-
Datadog.configuration[:grape][:tracer] = tracer
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def service_name=(service_name)
|
|
61
|
-
Datadog.configuration[:grape][:service_name] = service_name
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def log_deprecation_warning(method_name)
|
|
65
|
-
do_once(method_name) do
|
|
66
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
28
|
end
|
|
71
29
|
end
|
|
72
30
|
end
|
|
@@ -15,20 +15,20 @@ module Datadog
|
|
|
15
15
|
add_datadog_pin! { |c| yield(c) if block_given? }
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def request_response(**keywords)
|
|
19
|
-
trace(keywords)
|
|
18
|
+
def request_response(**keywords, &block)
|
|
19
|
+
trace(keywords, &block)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def client_streamer(**keywords)
|
|
23
|
-
trace(keywords)
|
|
22
|
+
def client_streamer(**keywords, &block)
|
|
23
|
+
trace(keywords, &block)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def server_streamer(**keywords)
|
|
27
|
-
trace(keywords)
|
|
26
|
+
def server_streamer(**keywords, &block)
|
|
27
|
+
trace(keywords, &block)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
def bidi_streamer(**keywords)
|
|
31
|
-
trace(keywords)
|
|
30
|
+
def bidi_streamer(**keywords, &block)
|
|
31
|
+
trace(keywords, &block)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
private
|
|
@@ -19,49 +19,13 @@ module Datadog
|
|
|
19
19
|
require 'ddtrace/contrib/grpc/datadog_interceptor'
|
|
20
20
|
require 'ddtrace/contrib/grpc/intercept_with_datadog'
|
|
21
21
|
|
|
22
|
-
add_pin!
|
|
23
|
-
|
|
24
22
|
prepend_interceptor
|
|
25
23
|
end
|
|
26
24
|
|
|
27
|
-
def add_pin!
|
|
28
|
-
DeprecatedPin.new(
|
|
29
|
-
get_option(:service_name),
|
|
30
|
-
app: Ext::APP,
|
|
31
|
-
app_type: Datadog::Ext::AppTypes::WEB,
|
|
32
|
-
tracer: -> { get_option(:tracer) }
|
|
33
|
-
).onto(::GRPC)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
25
|
def prepend_interceptor
|
|
37
26
|
::GRPC::InterceptionContext
|
|
38
27
|
.send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
|
|
39
28
|
end
|
|
40
|
-
|
|
41
|
-
def get_option(option)
|
|
42
|
-
Datadog.configuration[:grpc].get_option(option)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
46
|
-
# To be removed when support for Datadog::Pin with GRPC is removed.
|
|
47
|
-
class DeprecatedPin < Datadog::Pin
|
|
48
|
-
include Datadog::DeprecatedPin
|
|
49
|
-
|
|
50
|
-
DEPRECATION_WARNING = %(
|
|
51
|
-
Use of Datadog::Pin with GRPC is DEPRECATED.
|
|
52
|
-
Upgrade to the configuration API using the migration guide here:
|
|
53
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
54
|
-
|
|
55
|
-
def service_name=(service_name)
|
|
56
|
-
Datadog.configuration[:grpc][:service_name] = service_name
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def log_deprecation_warning(method_name)
|
|
60
|
-
do_once(method_name) do
|
|
61
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
29
|
end
|
|
66
30
|
end
|
|
67
31
|
end
|
|
@@ -27,9 +27,7 @@ module Datadog
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def should_skip_distributed_tracing?(pin)
|
|
30
|
-
if pin.config && pin.config.key?(:distributed_tracing)
|
|
31
|
-
return !pin.config[:distributed_tracing]
|
|
32
|
-
end
|
|
30
|
+
return !pin.config[:distributed_tracing] if pin.config && pin.config.key?(:distributed_tracing)
|
|
33
31
|
|
|
34
32
|
!Datadog.configuration[:http][:distributed_tracing]
|
|
35
33
|
end
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
|
|
20
20
|
# Span hook invoked after request is completed.
|
|
21
21
|
def self.after_request(&block)
|
|
22
|
-
if
|
|
22
|
+
if block
|
|
23
23
|
# Set hook
|
|
24
24
|
@after_request = block
|
|
25
25
|
else
|
|
@@ -32,15 +32,14 @@ module Datadog
|
|
|
32
32
|
module InstanceMethods
|
|
33
33
|
include Datadog::Contrib::HttpAnnotationHelper
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
# :yield: +response+
|
|
36
|
+
def request(req, body = nil, &block)
|
|
36
37
|
host, = host_and_port(req)
|
|
37
38
|
request_options = datadog_configuration(host)
|
|
38
39
|
pin = datadog_pin(request_options)
|
|
39
40
|
return super(req, body, &block) unless pin && pin.tracer
|
|
40
41
|
|
|
41
|
-
if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
|
|
42
|
-
return super(req, body, &block)
|
|
43
|
-
end
|
|
42
|
+
return super(req, body, &block) if Datadog::Contrib::HTTP.should_skip_tracing?(req, pin.tracer)
|
|
44
43
|
|
|
45
44
|
pin.tracer.trace(Ext::SPAN_REQUEST, on_error: method(:annotate_span_with_error!)) do |span|
|
|
46
45
|
begin
|
|
@@ -108,6 +107,7 @@ module Datadog
|
|
|
108
107
|
|
|
109
108
|
def set_analytics_sample_rate(span, request_options)
|
|
110
109
|
return unless analytics_enabled?(request_options)
|
|
110
|
+
|
|
111
111
|
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate(request_options))
|
|
112
112
|
end
|
|
113
113
|
|
|
@@ -118,7 +118,7 @@ module Datadog
|
|
|
118
118
|
@datadog_pin ||= Datadog::Pin.new(
|
|
119
119
|
service,
|
|
120
120
|
app: Ext::APP,
|
|
121
|
-
app_type: Datadog::Ext::
|
|
121
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
|
122
122
|
tracer: -> { config[:tracer] }
|
|
123
123
|
)
|
|
124
124
|
|
|
@@ -146,7 +146,7 @@ module Datadog
|
|
|
146
146
|
@default_datadog_pin ||= Datadog::Pin.new(
|
|
147
147
|
service,
|
|
148
148
|
app: Ext::APP,
|
|
149
|
-
app_type: Datadog::Ext::
|
|
149
|
+
app_type: Datadog::Ext::HTTP::TYPE_OUTBOUND,
|
|
150
150
|
tracer: -> { config[:tracer] }
|
|
151
151
|
)
|
|
152
152
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/httpclient/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module Httpclient
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the Httpclient integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ENABLED, true) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_enabled do |o|
|
|
16
|
+
o.default { env_to_bool([Ext::ENV_ANALYTICS_ENABLED, Ext::ENV_ANALYTICS_ENABLED_OLD], false) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :analytics_sample_rate do |o|
|
|
21
|
+
o.default { env_to_float([Ext::ENV_ANALYTICS_SAMPLE_RATE, Ext::ENV_ANALYTICS_SAMPLE_RATE_OLD], 1.0) }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
option :distributed_tracing, default: true
|
|
26
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
27
|
+
option :split_by_domain, default: false
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|