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
|
@@ -53,9 +53,7 @@ module Datadog
|
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
following = if middleware.instance_variable_defined?('@app')
|
|
57
|
-
middleware.instance_variable_get('@app')
|
|
58
|
-
end
|
|
56
|
+
following = (middleware.instance_variable_get('@app') if middleware.instance_variable_defined?('@app'))
|
|
59
57
|
|
|
60
58
|
retain_middleware_name(following)
|
|
61
59
|
end
|
|
@@ -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.
|
|
@@ -86,7 +90,7 @@ module Datadog
|
|
|
86
90
|
end
|
|
87
91
|
|
|
88
92
|
def after_intialize(app)
|
|
89
|
-
|
|
93
|
+
AFTER_INITIALIZE_ONLY_ONCE_PER_APP[app].run do
|
|
90
94
|
# Finish configuring the tracer after the application is initialized.
|
|
91
95
|
# We need to wait for some things, like application name, middleware stack, etc.
|
|
92
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!
|
|
@@ -6,12 +6,19 @@ module Datadog
|
|
|
6
6
|
module Configuration
|
|
7
7
|
UNIX_SCHEME = 'unix'.freeze
|
|
8
8
|
|
|
9
|
-
# Converts
|
|
9
|
+
# Converts String URLs and Hashes to a normalized connection settings Hash.
|
|
10
10
|
class Resolver < Contrib::Configuration::Resolver
|
|
11
|
-
|
|
12
|
-
|
|
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)
|
|
13
20
|
|
|
14
|
-
normalize(connection_resolver.resolve(
|
|
21
|
+
normalize(connection_resolver.resolve(matcher))
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
def normalize(hash)
|
|
@@ -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
|
|
|
@@ -23,7 +23,23 @@ module Datadog
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
option :service_name, default: Ext::SERVICE_NAME
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
# A list Ruby worker classes to be instrumented.
|
|
28
|
+
# The value of `nil` has special semantics: it instruments all workers dynamically.
|
|
29
|
+
#
|
|
30
|
+
# TODO: 1.0: Automatic patching should be the default behavior.
|
|
31
|
+
# We should not provide this option in the future,
|
|
32
|
+
# as our integrations should always instrument all possible scenarios when feasible.
|
|
33
|
+
option :workers, default: nil do |o|
|
|
34
|
+
o.on_set do |value|
|
|
35
|
+
unless value.nil?
|
|
36
|
+
Datadog.logger.warn(
|
|
37
|
+
"DEPRECATED: Resque integration now instruments all workers. \n" \
|
|
38
|
+
'The `workers:` option is unnecessary and will be removed in the future.'
|
|
39
|
+
)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
27
43
|
option :error_handler, default: Datadog::Tracer::DEFAULT_ON_ERROR
|
|
28
44
|
end
|
|
29
45
|
end
|
|
@@ -17,11 +17,11 @@ module Datadog
|
|
|
17
17
|
|
|
18
18
|
def patch
|
|
19
19
|
require_relative 'resque_job'
|
|
20
|
-
get_option(:workers).each { |worker| worker.extend(ResqueJob) }
|
|
21
|
-
end
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
::Resque::Job.send(:prepend, Resque::Job)
|
|
22
|
+
|
|
23
|
+
workers = Datadog.configuration[:resque][:workers] || []
|
|
24
|
+
workers.each { |worker| worker.extend(ResqueJob) }
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -7,9 +7,30 @@ require 'resque'
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Contrib
|
|
9
9
|
module Resque
|
|
10
|
+
# Automatically configures jobs with {ResqueJob} plugin.
|
|
11
|
+
module Job
|
|
12
|
+
def perform
|
|
13
|
+
if Datadog.configuration[:resque][:workers].nil?
|
|
14
|
+
job = payload_class
|
|
15
|
+
job.extend(Datadog::Contrib::Resque::ResqueJob) unless job.is_a? Datadog::Contrib::Resque::ResqueJob
|
|
16
|
+
end
|
|
17
|
+
ensure
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
10
22
|
# Uses Resque job hooks to create traces
|
|
11
23
|
module ResqueJob
|
|
12
|
-
|
|
24
|
+
# `around_perform` hooks are executed in alphabetical order.
|
|
25
|
+
# we use the lowest printable character that allows for an inline
|
|
26
|
+
# method definition ('0'), alongside our naming prefix for identification.
|
|
27
|
+
#
|
|
28
|
+
# We could, in theory, use any character (e.g "\x00"), but this will lead
|
|
29
|
+
# to unreadable stack traces that contain this method call.
|
|
30
|
+
#
|
|
31
|
+
# We could also just use `around_perform` but this might override the user's
|
|
32
|
+
# own method.
|
|
33
|
+
def around_perform0_ddtrace(*args)
|
|
13
34
|
return yield unless datadog_configuration && tracer
|
|
14
35
|
|
|
15
36
|
tracer.trace(Ext::SPAN_JOB, span_options) do |span|
|
|
@@ -44,6 +65,7 @@ module Datadog
|
|
|
44
65
|
def forked?
|
|
45
66
|
pin = Datadog::Pin.get_from(::Resque)
|
|
46
67
|
return false unless pin
|
|
68
|
+
|
|
47
69
|
pin.config[:forked] == true
|
|
48
70
|
end
|
|
49
71
|
|
|
@@ -76,5 +98,6 @@ Resque.after_fork do
|
|
|
76
98
|
|
|
77
99
|
# Clean the state so no CoW happens
|
|
78
100
|
next if configuration[:tracer].nil?
|
|
101
|
+
|
|
79
102
|
configuration[:tracer].provider.context = nil
|
|
80
103
|
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)
|
|
@@ -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
|
|
@@ -10,30 +10,29 @@ module Datadog
|
|
|
10
10
|
# Instance methods for configuration
|
|
11
11
|
module InstanceMethods
|
|
12
12
|
def run(example_group_instance, reporter)
|
|
13
|
-
configuration = Datadog.configuration[:rspec]
|
|
14
13
|
return super unless configuration[:enabled]
|
|
15
14
|
|
|
16
|
-
test_name =
|
|
15
|
+
test_name = full_description.strip
|
|
16
|
+
if metadata[:description].empty?
|
|
17
|
+
# for unnamed it blocks this appends something like "example at ./spec/some_spec.rb:10"
|
|
18
|
+
test_name += " #{description}"
|
|
19
|
+
end
|
|
20
|
+
|
|
17
21
|
trace_options = {
|
|
18
22
|
app: Ext::APP,
|
|
19
23
|
resource: test_name,
|
|
20
24
|
service: configuration[:service_name],
|
|
21
25
|
span_type: Datadog::Ext::AppTypes::TEST,
|
|
22
|
-
tags:
|
|
26
|
+
tags: tags.merge(Datadog.configuration.tags)
|
|
23
27
|
}
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
tracer.trace(configuration[:operation_name], trace_options) do |span|
|
|
26
30
|
span.set_tag(Datadog::Ext::Test::TAG_FRAMEWORK, Ext::FRAMEWORK)
|
|
27
31
|
span.set_tag(Datadog::Ext::Test::TAG_NAME, test_name)
|
|
28
|
-
span.set_tag(Datadog::Ext::Test::TAG_SUITE,
|
|
32
|
+
span.set_tag(Datadog::Ext::Test::TAG_SUITE, file_path)
|
|
29
33
|
span.set_tag(Datadog::Ext::Test::TAG_TYPE, Ext::TEST_TYPE)
|
|
30
34
|
span.set_tag(Datadog::Ext::Test::TAG_SPAN_KIND, Datadog::Ext::AppTypes::TEST)
|
|
31
35
|
|
|
32
|
-
# Set analytics sample rate
|
|
33
|
-
if Datadog::Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
34
|
-
Datadog::Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
35
|
-
end
|
|
36
|
-
|
|
37
36
|
# Measure service stats
|
|
38
37
|
Contrib::Analytics.set_measured(span)
|
|
39
38
|
|
|
@@ -51,9 +50,24 @@ module Datadog
|
|
|
51
50
|
span.set_tag(Datadog::Ext::Test::TAG_STATUS, Datadog::Ext::Test::Status::SKIP)
|
|
52
51
|
end
|
|
53
52
|
end
|
|
53
|
+
|
|
54
54
|
result
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def configuration
|
|
61
|
+
Datadog.configuration[:rspec]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def tracer
|
|
65
|
+
configuration[:tracer]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def tags
|
|
69
|
+
@tags ||= Datadog::Ext::CI.tags(ENV)
|
|
70
|
+
end
|
|
57
71
|
end
|
|
58
72
|
end
|
|
59
73
|
end
|
|
@@ -4,13 +4,10 @@ module Datadog
|
|
|
4
4
|
# RSpec integration constants
|
|
5
5
|
module Ext
|
|
6
6
|
APP = 'rspec'.freeze
|
|
7
|
-
ENV_ANALYTICS_ENABLED = 'DD_TRACE_RSPEC_ANALYTICS_ENABLED'.freeze
|
|
8
|
-
ENV_ANALYTICS_SAMPLE_RATE = 'DD_TRACE_RSPEC_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
7
|
ENV_ENABLED = 'DD_TRACE_RSPEC_ENABLED'.freeze
|
|
10
8
|
ENV_OPERATION_NAME = 'DD_TRACE_RSPEC_OPERATION_NAME'.freeze
|
|
11
9
|
FRAMEWORK = 'rspec'.freeze
|
|
12
10
|
OPERATION_NAME = 'rspec.example'.freeze
|
|
13
|
-
EXAMPLE_GROUP_OPERATION_NAME = 'rspec.example_group'.freeze
|
|
14
11
|
SERVICE_NAME = 'rspec'.freeze
|
|
15
12
|
TEST_TYPE = 'test'.freeze
|
|
16
13
|
end
|
|
@@ -21,13 +21,18 @@ module Datadog
|
|
|
21
21
|
|
|
22
22
|
def self.loaded?
|
|
23
23
|
!defined?(::RSpec).nil? && !defined?(::RSpec::Core).nil? && \
|
|
24
|
-
!defined?(::RSpec::Core::Example).nil?
|
|
24
|
+
!defined?(::RSpec::Core::Example).nil?
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def self.compatible?
|
|
28
28
|
super && version >= MINIMUM_VERSION
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
# test environments should not auto instrument test libraries
|
|
32
|
+
def auto_instrument?
|
|
33
|
+
false
|
|
34
|
+
end
|
|
35
|
+
|
|
31
36
|
def default_configuration
|
|
32
37
|
Configuration::Settings.new
|
|
33
38
|
end
|