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
|
@@ -60,7 +60,7 @@ module Datadog
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def default(value = nil, &block)
|
|
63
|
-
@default =
|
|
63
|
+
@default = block || value
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
def delegate_to(&block)
|
|
@@ -71,8 +71,6 @@ module Datadog
|
|
|
71
71
|
@helpers[name] = block
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
-
# rubocop:disable Style/TrivialAccessors
|
|
75
|
-
# (Rubocop erroneously thinks #lazy == #lazy= )
|
|
76
74
|
def lazy(value = true)
|
|
77
75
|
@lazy = value
|
|
78
76
|
end
|
|
@@ -14,10 +14,8 @@ module Datadog
|
|
|
14
14
|
# Class behavior for a configuration object with options
|
|
15
15
|
module ClassMethods
|
|
16
16
|
def options
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
20
|
-
end
|
|
17
|
+
# Allows for class inheritance of option definitions
|
|
18
|
+
@options ||= superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
protected
|
|
@@ -51,6 +49,7 @@ module Datadog
|
|
|
51
49
|
def define_helpers(helpers)
|
|
52
50
|
helpers.each do |name, block|
|
|
53
51
|
next unless block.is_a?(Proc)
|
|
52
|
+
|
|
54
53
|
define_method(name, &block)
|
|
55
54
|
end
|
|
56
55
|
end
|
|
@@ -102,9 +101,7 @@ module Datadog
|
|
|
102
101
|
end
|
|
103
102
|
|
|
104
103
|
def assert_valid_option!(name)
|
|
105
|
-
unless option_defined?(name)
|
|
106
|
-
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
107
|
-
end
|
|
104
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
108
105
|
end
|
|
109
106
|
end
|
|
110
107
|
|
|
@@ -3,6 +3,7 @@ require 'ddtrace/configuration/base'
|
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/ext/analytics'
|
|
5
5
|
require 'ddtrace/ext/distributed'
|
|
6
|
+
require 'ddtrace/ext/profiling'
|
|
6
7
|
require 'ddtrace/ext/runtime'
|
|
7
8
|
require 'ddtrace/ext/sampling'
|
|
8
9
|
|
|
@@ -108,6 +109,36 @@ module Datadog
|
|
|
108
109
|
get_option(:logger).instance = logger
|
|
109
110
|
end
|
|
110
111
|
|
|
112
|
+
settings :profiling do
|
|
113
|
+
option :enabled do |o|
|
|
114
|
+
o.default { env_to_bool(Ext::Profiling::ENV_ENABLED, false) }
|
|
115
|
+
o.lazy
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
settings :exporter do
|
|
119
|
+
option :instances
|
|
120
|
+
option :transport
|
|
121
|
+
option :transport_options, default: ->(_o) { {} }, lazy: true
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
option :max_events, default: 32768
|
|
125
|
+
|
|
126
|
+
# Controls the maximum number of frames for each thread sampled. Can be tuned to avoid omitted frames in the
|
|
127
|
+
# produced profiles. Increasing this may increase the overhead of profiling.
|
|
128
|
+
option :max_frames do |o|
|
|
129
|
+
o.default { env_to_int(Ext::Profiling::ENV_MAX_FRAMES, 400) }
|
|
130
|
+
o.lazy
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
settings :upload do
|
|
134
|
+
option :timeout do |o|
|
|
135
|
+
o.setter { |value| value.nil? ? 30.0 : value.to_f }
|
|
136
|
+
o.default { env_to_float(Ext::Profiling::ENV_UPLOAD_TIMEOUT, 30.0) }
|
|
137
|
+
o.lazy
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
111
142
|
option :report_hostname do |o|
|
|
112
143
|
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
113
144
|
o.lazy
|
|
@@ -187,9 +218,7 @@ module Datadog
|
|
|
187
218
|
string_tags = Hash[new_value.collect { |k, v| [k.to_s, v] }]
|
|
188
219
|
|
|
189
220
|
# Cross-populate tag values with other settings
|
|
190
|
-
if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
191
|
-
self.env = string_tags[Ext::Environment::TAG_ENV]
|
|
192
|
-
end
|
|
221
|
+
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
193
222
|
|
|
194
223
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
195
224
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
@@ -206,6 +235,22 @@ module Datadog
|
|
|
206
235
|
o.lazy
|
|
207
236
|
end
|
|
208
237
|
|
|
238
|
+
option :time_now_provider do |o|
|
|
239
|
+
o.default { ::Time.now }
|
|
240
|
+
|
|
241
|
+
o.on_set do |time_provider|
|
|
242
|
+
Utils::Time.now_provider = time_provider
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
o.resetter do |_value|
|
|
246
|
+
# TODO: Resetter needs access to the default value
|
|
247
|
+
# TODO: to help reduce duplication.
|
|
248
|
+
-> { ::Time.now }.tap do |default|
|
|
249
|
+
Utils::Time.now_provider = default
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
209
254
|
settings :tracer do
|
|
210
255
|
option :enabled do |o|
|
|
211
256
|
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'thread'
|
|
2
1
|
require 'ddtrace/diagnostics/health'
|
|
3
2
|
|
|
4
3
|
require 'ddtrace/context_flush'
|
|
@@ -126,6 +125,7 @@ module Datadog
|
|
|
126
125
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
127
126
|
set_current_span(span.parent)
|
|
128
127
|
return if span.tracer.nil?
|
|
128
|
+
|
|
129
129
|
if span.parent.nil? && !all_spans_finished?
|
|
130
130
|
if Datadog.configuration.diagnostics.debug
|
|
131
131
|
opened_spans = @trace.length - @finished_spans
|
|
@@ -230,7 +230,7 @@ module Datadog
|
|
|
230
230
|
# Return a string representation of the context.
|
|
231
231
|
def to_s
|
|
232
232
|
@mutex.synchronize do
|
|
233
|
-
# rubocop:disable
|
|
233
|
+
# rubocop:disable Layout/LineLength
|
|
234
234
|
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
|
235
235
|
end
|
|
236
236
|
end
|
|
@@ -300,6 +300,7 @@ module Datadog
|
|
|
300
300
|
def start_time
|
|
301
301
|
@mutex.synchronize do
|
|
302
302
|
return nil if @trace.empty?
|
|
303
|
+
|
|
303
304
|
@trace[0].start_time
|
|
304
305
|
end
|
|
305
306
|
end
|
|
@@ -312,11 +313,9 @@ module Datadog
|
|
|
312
313
|
end
|
|
313
314
|
|
|
314
315
|
# Iterate on each span within the trace. This is thread safe.
|
|
315
|
-
def each_span
|
|
316
|
+
def each_span(&block)
|
|
316
317
|
@mutex.synchronize do
|
|
317
|
-
@trace.each
|
|
318
|
-
yield span
|
|
319
|
-
end
|
|
318
|
+
@trace.each(&block)
|
|
320
319
|
end
|
|
321
320
|
end
|
|
322
321
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_cable/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_cable/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -36,9 +36,7 @@ module Datadog
|
|
|
36
36
|
|
|
37
37
|
begin
|
|
38
38
|
# Set the resource name, if it's still the default name
|
|
39
|
-
if span.resource == span.name
|
|
40
|
-
span.resource = "#{payload.fetch(:controller)}##{payload.fetch(:action)}"
|
|
41
|
-
end
|
|
39
|
+
span.resource = "#{payload.fetch(:controller)}##{payload.fetch(:action)}" if span.resource == span.name
|
|
42
40
|
|
|
43
41
|
# Set the resource name of the Rack request span unless this is an exception controller.
|
|
44
42
|
unless exception_controller?(payload)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_pack/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_pack/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -25,6 +26,12 @@ module Datadog
|
|
|
25
26
|
super && version >= MINIMUM_VERSION
|
|
26
27
|
end
|
|
27
28
|
|
|
29
|
+
# enabled by rails integration so should only auto instrument
|
|
30
|
+
# if detected that it is being used without rails
|
|
31
|
+
def auto_instrument?
|
|
32
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
33
|
+
end
|
|
34
|
+
|
|
28
35
|
def default_configuration
|
|
29
36
|
Configuration::Settings.new
|
|
30
37
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'ddtrace/contrib/integration'
|
|
2
2
|
require 'ddtrace/contrib/action_view/configuration/settings'
|
|
3
3
|
require 'ddtrace/contrib/action_view/patcher'
|
|
4
|
+
require 'ddtrace/contrib/rails/utils'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
module Contrib
|
|
@@ -32,6 +33,12 @@ module Datadog
|
|
|
32
33
|
super && version >= MINIMUM_VERSION
|
|
33
34
|
end
|
|
34
35
|
|
|
36
|
+
# enabled by rails integration so should only auto instrument
|
|
37
|
+
# if detected that it is being used without rails
|
|
38
|
+
def auto_instrument?
|
|
39
|
+
!Datadog::Contrib::Rails::Utils.railtie_supported?
|
|
40
|
+
end
|
|
41
|
+
|
|
35
42
|
def default_configuration
|
|
36
43
|
Configuration::Settings.new
|
|
37
44
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module ActiveRecord
|
|
4
|
+
module Configuration
|
|
5
|
+
# The `makara` gem has the concept of **role**, which can be
|
|
6
|
+
# inferred from the configuration `name`, in the form of:
|
|
7
|
+
# `master/0`, `replica/0`, `replica/1`, etc.
|
|
8
|
+
# The first part of this string is the database role.
|
|
9
|
+
#
|
|
10
|
+
# This allows the matching of a connection based on its role,
|
|
11
|
+
# instead of connection-specific information.
|
|
12
|
+
module MakaraResolver
|
|
13
|
+
def normalize_for_config(active_record_config)
|
|
14
|
+
hash = super
|
|
15
|
+
hash[:makara_role] = active_record_config[:makara_role]
|
|
16
|
+
hash
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def normalize_for_resolve(active_record_config)
|
|
20
|
+
hash = super
|
|
21
|
+
|
|
22
|
+
hash[:makara_role] = active_record_config[:name].split('/')[0].to_s if active_record_config[:name].is_a?(String)
|
|
23
|
+
|
|
24
|
+
hash
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -1,43 +1,132 @@
|
|
|
1
1
|
require 'ddtrace/contrib/configuration/resolver'
|
|
2
2
|
require 'ddtrace/vendor/active_record/connection_specification'
|
|
3
|
+
require_relative 'makara_resolver'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
5
6
|
module Contrib
|
|
6
7
|
module ActiveRecord
|
|
7
8
|
module Configuration
|
|
8
9
|
# Converts Symbols, Strings, and Hashes to a normalized connection settings Hash.
|
|
10
|
+
#
|
|
11
|
+
# When matching using a Hash, these are the valid fields:
|
|
12
|
+
# ```
|
|
13
|
+
# {
|
|
14
|
+
# adapter: ...,
|
|
15
|
+
# host: ...,
|
|
16
|
+
# port: ...,
|
|
17
|
+
# database: ...,
|
|
18
|
+
# username: ...,
|
|
19
|
+
# role: ...,
|
|
20
|
+
# }
|
|
21
|
+
# ```
|
|
22
|
+
#
|
|
23
|
+
# Partial matching is supported: not including certain fields or setting them to `nil`
|
|
24
|
+
# will cause them to matching all values for that field. For example: `database: nil`
|
|
25
|
+
# will match any database, given the remaining fields match.
|
|
26
|
+
#
|
|
27
|
+
# Any fields not listed above are discarded.
|
|
28
|
+
#
|
|
29
|
+
# When more than one configuration could be matched, the last one to match is selected,
|
|
30
|
+
# based on addition order (`#add`).
|
|
9
31
|
class Resolver < Contrib::Configuration::Resolver
|
|
10
|
-
|
|
11
|
-
|
|
32
|
+
prepend MakaraResolver
|
|
33
|
+
|
|
34
|
+
def initialize(active_record_configuration = nil)
|
|
35
|
+
super()
|
|
36
|
+
|
|
37
|
+
@active_record_configuration = active_record_configuration
|
|
12
38
|
end
|
|
13
39
|
|
|
14
|
-
def
|
|
15
|
-
|
|
40
|
+
def active_record_configuration
|
|
41
|
+
@active_record_configuration || ::ActiveRecord::Base.configurations
|
|
16
42
|
end
|
|
17
43
|
|
|
18
|
-
def
|
|
19
|
-
|
|
44
|
+
def add(matcher, value)
|
|
45
|
+
parsed = parse_matcher(matcher)
|
|
46
|
+
|
|
47
|
+
# In case of error parsing, don't store `nil` key
|
|
48
|
+
# as it wouldn't be useful for matching configuration
|
|
49
|
+
# hashes in `#resolve`.
|
|
50
|
+
super(parsed, value) if parsed
|
|
20
51
|
end
|
|
21
52
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
53
|
+
def resolve(db_config)
|
|
54
|
+
active_record_config = resolve_connection_key(db_config).symbolize_keys
|
|
55
|
+
|
|
56
|
+
hash = normalize_for_resolve(active_record_config)
|
|
57
|
+
|
|
58
|
+
# Hashes in Ruby maintain insertion order
|
|
59
|
+
_, config = @configurations.reverse_each.find do |matcher, _|
|
|
60
|
+
matcher.none? do |key, value|
|
|
61
|
+
value != hash[key]
|
|
28
62
|
end
|
|
29
63
|
end
|
|
64
|
+
|
|
65
|
+
config
|
|
66
|
+
rescue => e
|
|
67
|
+
Datadog.logger.error(
|
|
68
|
+
"Failed to resolve ActiveRecord configuration key #{db_config.inspect}. " \
|
|
69
|
+
"Cause: #{e.message} Source: #{e.backtrace.first}"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
nil
|
|
30
73
|
end
|
|
31
74
|
|
|
32
|
-
|
|
75
|
+
protected
|
|
76
|
+
|
|
77
|
+
def parse_matcher(matcher)
|
|
78
|
+
resolved_pattern = resolve_connection_key(matcher).symbolize_keys
|
|
79
|
+
normalized = normalize_for_config(resolved_pattern)
|
|
80
|
+
|
|
81
|
+
# Remove empty fields to allow for partial matching
|
|
82
|
+
normalized.reject! { |_, v| v.nil? }
|
|
83
|
+
|
|
84
|
+
normalized
|
|
85
|
+
rescue => e
|
|
86
|
+
Datadog.logger.error(
|
|
87
|
+
"Failed to resolve ActiveRecord configuration key #{matcher.inspect}. " \
|
|
88
|
+
"Cause: #{e.message} Source: #{e.backtrace.first}"
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def connection_resolver
|
|
93
|
+
@resolver ||= if defined?(::ActiveRecord::Base.configurations.resolve)
|
|
94
|
+
::ActiveRecord::DatabaseConfigurations.new(active_record_configuration)
|
|
95
|
+
elsif defined?(::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver)
|
|
96
|
+
::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
|
97
|
+
active_record_configuration
|
|
98
|
+
)
|
|
99
|
+
else
|
|
100
|
+
::Datadog::Vendor::ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new(
|
|
101
|
+
active_record_configuration
|
|
102
|
+
)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def resolve_connection_key(key)
|
|
107
|
+
result = connection_resolver.resolve(key)
|
|
108
|
+
|
|
109
|
+
if result.respond_to?(:configuration_hash) # Rails >= 6.1
|
|
110
|
+
result.configuration_hash
|
|
111
|
+
else # Rails < 6.1
|
|
112
|
+
result
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Extract only fields we'd like to match
|
|
117
|
+
# from the ActiveRecord configuration.
|
|
118
|
+
def normalize_for_config(active_record_config)
|
|
33
119
|
{
|
|
34
|
-
adapter:
|
|
35
|
-
host:
|
|
36
|
-
port:
|
|
37
|
-
database:
|
|
38
|
-
username:
|
|
120
|
+
adapter: active_record_config[:adapter],
|
|
121
|
+
host: active_record_config[:host],
|
|
122
|
+
port: active_record_config[:port],
|
|
123
|
+
database: active_record_config[:database],
|
|
124
|
+
username: active_record_config[:username]
|
|
39
125
|
}
|
|
40
126
|
end
|
|
127
|
+
|
|
128
|
+
# Both resolvers perform the same operations for this implementation, but can be specialized
|
|
129
|
+
alias_method :normalize_for_resolve, :normalize_for_config
|
|
41
130
|
end
|
|
42
131
|
end
|
|
43
132
|
end
|