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
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
module Datadog
|
|
2
2
|
module Contrib
|
|
3
3
|
module Rack
|
|
4
|
-
#
|
|
4
|
+
# Retrieves the time spent in an upstream proxy
|
|
5
|
+
# for the current Rack request.
|
|
6
|
+
#
|
|
7
|
+
# This time captures the request delay introduced but
|
|
8
|
+
# such proxy before the request made it to the Ruby
|
|
9
|
+
# process.
|
|
5
10
|
module QueueTime
|
|
6
11
|
REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
|
|
7
12
|
QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'ddtrace'
|
|
2
|
+
|
|
3
|
+
# Railtie to include AutoInstrumentation in rails loading
|
|
4
|
+
class DatadogAutoInstrumentRailtie < Rails::Railtie
|
|
5
|
+
# we want to load before config initializers so that any user supplied config
|
|
6
|
+
# in config/initializers/datadog.rb will take precedence
|
|
7
|
+
initializer 'datadog.start_tracer', before: :load_config_initializers do
|
|
8
|
+
Datadog::Contrib::AutoInstrument.patch_all
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -3,6 +3,7 @@ require 'ddtrace/contrib/rails/framework'
|
|
|
3
3
|
require 'ddtrace/contrib/rails/middlewares'
|
|
4
4
|
require 'ddtrace/contrib/rails/log_injection'
|
|
5
5
|
require 'ddtrace/contrib/rack/middlewares'
|
|
6
|
+
require 'ddtrace/utils/only_once'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
8
9
|
module Contrib
|
|
@@ -11,6 +12,9 @@ module Datadog
|
|
|
11
12
|
module Patcher
|
|
12
13
|
include Contrib::Patcher
|
|
13
14
|
|
|
15
|
+
BEFORE_INITIALIZE_ONLY_ONCE_PER_APP = Hash.new { |h, key| h[key] = Datadog::Utils::OnlyOnce.new }
|
|
16
|
+
AFTER_INITIALIZE_ONLY_ONCE_PER_APP = Hash.new { |h, key| h[key] = Datadog::Utils::OnlyOnce.new }
|
|
17
|
+
|
|
14
18
|
module_function
|
|
15
19
|
|
|
16
20
|
def target_version
|
|
@@ -29,7 +33,7 @@ module Datadog
|
|
|
29
33
|
end
|
|
30
34
|
|
|
31
35
|
def before_intialize(app)
|
|
32
|
-
|
|
36
|
+
BEFORE_INITIALIZE_ONLY_ONCE_PER_APP[app].run do
|
|
33
37
|
# Middleware must be added before the application is initialized.
|
|
34
38
|
# Otherwise the middleware stack will be frozen.
|
|
35
39
|
# Sometimes we don't want to activate middleware e.g. OpenTracing, etc.
|
|
@@ -53,6 +57,7 @@ module Datadog
|
|
|
53
57
|
end
|
|
54
58
|
|
|
55
59
|
def add_logger(app)
|
|
60
|
+
should_warn = true
|
|
56
61
|
# check if lograge key exists
|
|
57
62
|
# Note: Rails executes initializers sequentially based on alphabetical order,
|
|
58
63
|
# and lograge config could occur after dd config.
|
|
@@ -62,6 +67,7 @@ module Datadog
|
|
|
62
67
|
# See: https://github.com/roidrage/lograge/blob/1729eab7956bb95c5992e4adab251e4f93ff9280/lib/lograge/railtie.rb#L7-L12
|
|
63
68
|
if app.config.respond_to?(:lograge)
|
|
64
69
|
Datadog::Contrib::Rails::LogInjection.add_lograge_logger(app)
|
|
70
|
+
should_warn = false
|
|
65
71
|
end
|
|
66
72
|
|
|
67
73
|
# if lograge isn't set, check if tagged logged is enabled.
|
|
@@ -71,9 +77,10 @@ module Datadog
|
|
|
71
77
|
logger.is_a?(::ActiveSupport::TaggedLogging)
|
|
72
78
|
|
|
73
79
|
Datadog::Contrib::Rails::LogInjection.add_as_tagged_logging_logger(app)
|
|
74
|
-
|
|
75
|
-
Datadog.logger.warn("Unable to enable Datadog Trace context, Logger #{logger} is not supported")
|
|
80
|
+
should_warn = false
|
|
76
81
|
end
|
|
82
|
+
|
|
83
|
+
Datadog.logger.warn("Unable to enable Datadog Trace context, Logger #{logger} is not supported") if should_warn
|
|
77
84
|
end
|
|
78
85
|
|
|
79
86
|
def patch_after_intialize
|
|
@@ -83,7 +90,7 @@ module Datadog
|
|
|
83
90
|
end
|
|
84
91
|
|
|
85
92
|
def after_intialize(app)
|
|
86
|
-
|
|
93
|
+
AFTER_INITIALIZE_ONLY_ONCE_PER_APP[app].run do
|
|
87
94
|
# Finish configuring the tracer after the application is initialized.
|
|
88
95
|
# We need to wait for some things, like application name, middleware stack, etc.
|
|
89
96
|
setup_tracer
|
|
@@ -16,7 +16,8 @@ module Datadog
|
|
|
16
16
|
return super unless enabled?
|
|
17
17
|
|
|
18
18
|
tracer.trace(Ext::SPAN_INVOKE, span_options) do |span|
|
|
19
|
-
|
|
19
|
+
annotate_invoke!(span, args)
|
|
20
|
+
super
|
|
20
21
|
end
|
|
21
22
|
ensure
|
|
22
23
|
shutdown_tracer!
|
|
@@ -26,7 +27,8 @@ module Datadog
|
|
|
26
27
|
return super unless enabled?
|
|
27
28
|
|
|
28
29
|
tracer.trace(Ext::SPAN_EXECUTE, span_options) do |span|
|
|
29
|
-
|
|
30
|
+
annotate_execute!(span, args)
|
|
31
|
+
super
|
|
30
32
|
end
|
|
31
33
|
ensure
|
|
32
34
|
shutdown_tracer!
|
|
@@ -4,16 +4,25 @@ module Datadog
|
|
|
4
4
|
module Contrib
|
|
5
5
|
module Redis
|
|
6
6
|
module Configuration
|
|
7
|
-
|
|
7
|
+
UNIX_SCHEME = 'unix'.freeze
|
|
8
|
+
|
|
9
|
+
# Converts String URLs and Hashes to a normalized connection settings Hash.
|
|
8
10
|
class Resolver < Contrib::Configuration::Resolver
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
# @param [Hash,String] Redis connection information
|
|
12
|
+
def resolve(hash)
|
|
13
|
+
super(parse_matcher(hash))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
|
|
18
|
+
def parse_matcher(matcher)
|
|
19
|
+
matcher = { url: matcher } if matcher.is_a?(String)
|
|
11
20
|
|
|
12
|
-
normalize(connection_resolver.resolve(
|
|
21
|
+
normalize(connection_resolver.resolve(matcher))
|
|
13
22
|
end
|
|
14
23
|
|
|
15
24
|
def normalize(hash)
|
|
16
|
-
return { url: hash[:url] } if hash[:scheme] ==
|
|
25
|
+
return { url: hash[:url] } if hash[:scheme] == UNIX_SCHEME
|
|
17
26
|
|
|
18
27
|
# Connexion strings are always converted to host, port, db and scheme
|
|
19
28
|
# but the host, port, db and scheme will generate the :url only after
|
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
ENV_ANALYTICS_ENABLED_OLD = 'DD_REDIS_ANALYTICS_ENABLED'.freeze
|
|
10
10
|
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
11
11
|
ENV_ANALYTICS_SAMPLE_RATE_OLD = 'DD_REDIS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
12
|
+
ENV_COMMAND_ARGS = 'DD_REDIS_COMMAND_ARGS'.freeze
|
|
12
13
|
METRIC_PIPELINE_LEN = 'redis.pipeline_length'.freeze
|
|
13
14
|
SERVICE_NAME = 'redis'.freeze
|
|
14
15
|
SPAN_COMMAND = 'redis.command'.freeze
|
|
@@ -28,6 +28,7 @@ module Datadog
|
|
|
28
28
|
|
|
29
29
|
# rubocop:disable Metrics/MethodLength
|
|
30
30
|
# rubocop:disable Metrics/BlockLength
|
|
31
|
+
# rubocop:disable Metrics/AbcSize
|
|
31
32
|
def patch_redis_client
|
|
32
33
|
::Redis::Client.class_eval do
|
|
33
34
|
alias_method :call_without_datadog, :call
|
|
@@ -40,7 +41,7 @@ module Datadog
|
|
|
40
41
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
41
42
|
span.service = pin.service
|
|
42
43
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
43
|
-
span.resource =
|
|
44
|
+
span.resource = get_command(args)
|
|
44
45
|
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
45
46
|
|
|
46
47
|
response = call_without_datadog(*args, &block)
|
|
@@ -59,10 +60,10 @@ module Datadog
|
|
|
59
60
|
pin.tracer.trace(Datadog::Contrib::Redis::Ext::SPAN_COMMAND) do |span|
|
|
60
61
|
span.service = pin.service
|
|
61
62
|
span.span_type = Datadog::Contrib::Redis::Ext::TYPE
|
|
62
|
-
commands = args
|
|
63
|
+
commands = get_pipeline_commands(args)
|
|
63
64
|
span.resource = commands.join("\n")
|
|
64
|
-
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
65
65
|
span.set_metric Datadog::Contrib::Redis::Ext::METRIC_PIPELINE_LEN, commands.length
|
|
66
|
+
Datadog::Contrib::Redis::Tags.set_common_tags(self, span)
|
|
66
67
|
|
|
67
68
|
response = call_pipeline_without_datadog(*args, &block)
|
|
68
69
|
end
|
|
@@ -84,6 +85,22 @@ module Datadog
|
|
|
84
85
|
|
|
85
86
|
private
|
|
86
87
|
|
|
88
|
+
def get_command(args)
|
|
89
|
+
if datadog_configuration[:command_args]
|
|
90
|
+
Datadog::Contrib::Redis::Quantize.format_command_args(*args)
|
|
91
|
+
else
|
|
92
|
+
Datadog::Contrib::Redis::Quantize.get_verb(*args)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def get_pipeline_commands(args)
|
|
97
|
+
if datadog_configuration[:command_args]
|
|
98
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.format_command_args(c) }
|
|
99
|
+
else
|
|
100
|
+
args[0].commands.map { |c| Datadog::Contrib::Redis::Quantize.get_verb(c) }
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
87
104
|
def datadog_configuration
|
|
88
105
|
Datadog.configuration[:redis, options]
|
|
89
106
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
4
|
module Contrib
|
|
3
5
|
module Redis
|
|
@@ -8,6 +10,19 @@ module Datadog
|
|
|
8
10
|
VALUE_MAX_LEN = 50
|
|
9
11
|
CMD_MAX_LEN = 500
|
|
10
12
|
|
|
13
|
+
MULTI_VERB_COMMANDS = Set.new(
|
|
14
|
+
%w[
|
|
15
|
+
ACL
|
|
16
|
+
CLIENT
|
|
17
|
+
CLUSTER
|
|
18
|
+
COMMAND
|
|
19
|
+
CONFIG
|
|
20
|
+
DEBUG
|
|
21
|
+
LATENCY
|
|
22
|
+
MEMORY
|
|
23
|
+
]
|
|
24
|
+
).freeze
|
|
25
|
+
|
|
11
26
|
module_function
|
|
12
27
|
|
|
13
28
|
def format_arg(arg)
|
|
@@ -27,8 +42,21 @@ module Datadog
|
|
|
27
42
|
Utils.truncate(cmd, CMD_MAX_LEN, TOO_LONG_MARK)
|
|
28
43
|
end
|
|
29
44
|
|
|
45
|
+
def get_verb(command_args)
|
|
46
|
+
return unless command_args.is_a?(Array)
|
|
47
|
+
|
|
48
|
+
return get_verb(command_args.first) if command_args.first.is_a?(Array)
|
|
49
|
+
|
|
50
|
+
arg = command_args.first
|
|
51
|
+
verb = arg.is_a?(Symbol) ? arg.to_s.upcase : arg.to_s
|
|
52
|
+
return verb unless MULTI_VERB_COMMANDS.include?(verb) && command_args[1]
|
|
53
|
+
|
|
54
|
+
"#{verb} #{command_args[1]}"
|
|
55
|
+
end
|
|
56
|
+
|
|
30
57
|
def auth_command?(command_args)
|
|
31
58
|
return false unless command_args.is_a?(Array) && !command_args.empty?
|
|
59
|
+
|
|
32
60
|
command_args.first.to_sym == :auth
|
|
33
61
|
end
|
|
34
62
|
|
|
@@ -19,7 +19,7 @@ module Datadog
|
|
|
19
19
|
span.set_tag Datadog::Ext::NET::TARGET_HOST, client.host
|
|
20
20
|
span.set_tag Datadog::Ext::NET::TARGET_PORT, client.port
|
|
21
21
|
span.set_tag Ext::TAG_DB, client.db
|
|
22
|
-
span.set_tag Ext::TAG_RAW_COMMAND, span.resource
|
|
22
|
+
span.set_tag Ext::TAG_RAW_COMMAND, span.resource if show_command_args?
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
private
|
|
@@ -35,6 +35,10 @@ module Datadog
|
|
|
35
35
|
def analytics_sample_rate
|
|
36
36
|
datadog_configuration[:analytics_sample_rate]
|
|
37
37
|
end
|
|
38
|
+
|
|
39
|
+
def show_command_args?
|
|
40
|
+
datadog_configuration[:command_args]
|
|
41
|
+
end
|
|
38
42
|
end
|
|
39
43
|
end
|
|
40
44
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2009 Ezra Zygmuntowicz
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -56,11 +56,9 @@ module Datadog
|
|
|
56
56
|
defaults = DEFAULTS.dup
|
|
57
57
|
options = options.dup
|
|
58
58
|
|
|
59
|
-
defaults.
|
|
59
|
+
defaults.each_key do |key|
|
|
60
60
|
# Fill in defaults if needed
|
|
61
|
-
if defaults[key].respond_to?(:call)
|
|
62
|
-
defaults[key] = defaults[key].call
|
|
63
|
-
end
|
|
61
|
+
defaults[key] = defaults[key].call if defaults[key].respond_to?(:call)
|
|
64
62
|
|
|
65
63
|
# Symbolize only keys that are needed
|
|
66
64
|
options[key] = options[key.to_s] if options.key?(key.to_s)
|
|
@@ -73,9 +71,10 @@ module Datadog
|
|
|
73
71
|
if url
|
|
74
72
|
uri = URI(url)
|
|
75
73
|
|
|
76
|
-
|
|
74
|
+
case uri.scheme
|
|
75
|
+
when 'unix'
|
|
77
76
|
defaults[:path] = uri.path
|
|
78
|
-
|
|
77
|
+
when 'redis', 'rediss'
|
|
79
78
|
defaults[:scheme] = uri.scheme
|
|
80
79
|
defaults[:host] = uri.host if uri.host
|
|
81
80
|
defaults[:port] = uri.port if uri.port
|
|
@@ -90,7 +89,7 @@ module Datadog
|
|
|
90
89
|
end
|
|
91
90
|
|
|
92
91
|
# Use default when option is not specified or nil
|
|
93
|
-
defaults.
|
|
92
|
+
defaults.each_key do |key|
|
|
94
93
|
options[key] = defaults[key] if options[key].nil?
|
|
95
94
|
end
|
|
96
95
|
|
|
@@ -44,11 +44,12 @@ module Datadog
|
|
|
44
44
|
def forked?
|
|
45
45
|
pin = Datadog::Pin.get_from(::Resque)
|
|
46
46
|
return false unless pin
|
|
47
|
+
|
|
47
48
|
pin.config[:forked] == true
|
|
48
49
|
end
|
|
49
50
|
|
|
50
51
|
def span_options
|
|
51
|
-
{ service: datadog_configuration[:service_name] }
|
|
52
|
+
{ service: datadog_configuration[:service_name], on_error: datadog_configuration[:error_handler] }
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def tracer
|
|
@@ -76,5 +77,6 @@ Resque.after_fork do
|
|
|
76
77
|
|
|
77
78
|
# Clean the state so no CoW happens
|
|
78
79
|
next if configuration[:tracer].nil?
|
|
80
|
+
|
|
79
81
|
configuration[:tracer].provider.context = nil
|
|
80
82
|
end
|
|
@@ -54,9 +54,7 @@ module Datadog
|
|
|
54
54
|
yield(span).tap do |response|
|
|
55
55
|
# Verify return value is a response
|
|
56
56
|
# If so, add additional tags.
|
|
57
|
-
if response.is_a?(::RestClient::Response)
|
|
58
|
-
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
|
|
59
|
-
end
|
|
57
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code) if response.is_a?(::RestClient::Response)
|
|
60
58
|
end
|
|
61
59
|
rescue ::RestClient::ExceptionWithResponse => e
|
|
62
60
|
span.set_error(e) if Datadog::Ext::HTTP::ERROR_RANGE.cover?(e.http_code)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/rspec/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module RSpec
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the RSpec 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 :service_name do |o|
|
|
16
|
+
o.default { Datadog.configuration.service || Ext::SERVICE_NAME }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :operation_name do |o|
|
|
21
|
+
o.default { ENV.key?(Ext::ENV_OPERATION_NAME) ? ENV[Ext::ENV_OPERATION_NAME] : Ext::OPERATION_NAME }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|