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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/api/map'
|
|
2
|
+
require 'ddtrace/profiling/encoding/profile'
|
|
3
|
+
require 'ddtrace/profiling/transport/http/api/spec'
|
|
4
|
+
require 'ddtrace/profiling/transport/http/api/instance'
|
|
5
|
+
require 'ddtrace/profiling/transport/http/api/endpoint'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Profiling
|
|
9
|
+
module Transport
|
|
10
|
+
module HTTP
|
|
11
|
+
# Extensions for HTTP API Spec
|
|
12
|
+
module API
|
|
13
|
+
# Default API versions
|
|
14
|
+
V1 = 'v1'.freeze
|
|
15
|
+
|
|
16
|
+
module_function
|
|
17
|
+
|
|
18
|
+
def agent_defaults
|
|
19
|
+
@agent_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
20
|
+
V1 => Spec.new do |s|
|
|
21
|
+
s.profiles = Endpoint.new(
|
|
22
|
+
'/profiling/v1/input'.freeze,
|
|
23
|
+
Profiling::Encoding::Profile::Protobuf
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def api_defaults
|
|
30
|
+
@api_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
31
|
+
V1 => Spec.new do |s|
|
|
32
|
+
s.profiles = Endpoint.new(
|
|
33
|
+
'/v1/input'.freeze,
|
|
34
|
+
Profiling::Encoding::Profile::Protobuf
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'ddtrace/ext/profiling'
|
|
2
|
+
require 'ddtrace/utils/compression'
|
|
3
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
|
|
4
|
+
|
|
5
|
+
require 'ddtrace/transport/http/api/endpoint'
|
|
6
|
+
require 'ddtrace/profiling/transport/http/response'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Profiling
|
|
10
|
+
module Transport
|
|
11
|
+
module HTTP
|
|
12
|
+
module API
|
|
13
|
+
# Datadog API endpoint for profiling
|
|
14
|
+
class Endpoint < Datadog::Transport::HTTP::API::Endpoint
|
|
15
|
+
include Datadog::Ext::Profiling::Transport::HTTP
|
|
16
|
+
|
|
17
|
+
attr_reader \
|
|
18
|
+
:encoder
|
|
19
|
+
|
|
20
|
+
def initialize(path, encoder, options = {})
|
|
21
|
+
super(:post, path)
|
|
22
|
+
@encoder = encoder
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def call(env, &block)
|
|
26
|
+
# Build request
|
|
27
|
+
env.form = build_form(env)
|
|
28
|
+
|
|
29
|
+
# Send request
|
|
30
|
+
http_response = super(env, &block)
|
|
31
|
+
|
|
32
|
+
# Build response
|
|
33
|
+
Profiling::Transport::HTTP::Response.new(http_response)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def build_form(env)
|
|
37
|
+
flush = env.request.parcel.data
|
|
38
|
+
pprof_file, types = build_pprof(flush)
|
|
39
|
+
|
|
40
|
+
form = {
|
|
41
|
+
# NOTE: Redundant w/ 'runtime-id' tag below; may want to remove this later.
|
|
42
|
+
FORM_FIELD_RUNTIME_ID => flush.runtime_id,
|
|
43
|
+
FORM_FIELD_RECORDING_START => flush.start.utc.iso8601,
|
|
44
|
+
FORM_FIELD_RECORDING_END => flush.finish.utc.iso8601,
|
|
45
|
+
FORM_FIELD_TAGS => [
|
|
46
|
+
"#{FORM_FIELD_TAG_RUNTIME}:#{flush.language}",
|
|
47
|
+
"#{FORM_FIELD_TAG_RUNTIME_ID}:#{flush.runtime_id}",
|
|
48
|
+
"#{FORM_FIELD_TAG_RUNTIME_ENGINE}:#{flush.runtime_engine}",
|
|
49
|
+
"#{FORM_FIELD_TAG_RUNTIME_PLATFORM}:#{flush.runtime_platform}",
|
|
50
|
+
"#{FORM_FIELD_TAG_RUNTIME_VERSION}:#{flush.runtime_version}",
|
|
51
|
+
"#{FORM_FIELD_TAG_PROFILER_VERSION}:#{flush.profiler_version}",
|
|
52
|
+
# NOTE: Redundant w/ 'runtime'; may want to remove this later.
|
|
53
|
+
"#{FORM_FIELD_TAG_LANGUAGE}:#{flush.language}",
|
|
54
|
+
"#{FORM_FIELD_TAG_HOST}:#{flush.host}"
|
|
55
|
+
],
|
|
56
|
+
FORM_FIELD_DATA => pprof_file,
|
|
57
|
+
FORM_FIELD_RUNTIME => flush.language,
|
|
58
|
+
FORM_FIELD_FORMAT => FORM_FIELD_FORMAT_PPROF
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# Add types
|
|
62
|
+
form[FORM_FIELD_TYPES] = types.join(',')
|
|
63
|
+
|
|
64
|
+
# Optional fields
|
|
65
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_SERVICE}:#{flush.service}" unless flush.service.nil?
|
|
66
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_ENV}:#{flush.env}" unless flush.env.nil?
|
|
67
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_VERSION}:#{flush.version}" unless flush.version.nil?
|
|
68
|
+
|
|
69
|
+
form
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def build_pprof(flush)
|
|
73
|
+
pprof = encoder.encode(flush)
|
|
74
|
+
|
|
75
|
+
# Wrap pprof as a gzipped file
|
|
76
|
+
gzipped_data = Datadog::Utils::Compression.gzip(pprof.data)
|
|
77
|
+
pprof_file = Datadog::Vendor::Multipart::Post::UploadIO.new(
|
|
78
|
+
StringIO.new(gzipped_data),
|
|
79
|
+
HEADER_CONTENT_TYPE_OCTET_STREAM,
|
|
80
|
+
PPROF_DEFAULT_FILENAME
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
[pprof_file, [FORM_FIELD_TYPES_AUTO]]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/api/instance'
|
|
2
|
+
require 'ddtrace/profiling/transport/http/api/spec'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
module API
|
|
9
|
+
# API instance for profiling
|
|
10
|
+
class Instance < Datadog::Transport::HTTP::API::Instance
|
|
11
|
+
def send_profiling_flush(env)
|
|
12
|
+
raise ProfilesNotSupportedError, spec unless spec.is_a?(Spec)
|
|
13
|
+
|
|
14
|
+
spec.send_profiling_flush(env) do |request_env|
|
|
15
|
+
call(request_env)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Raised when profiles sent to API that does not support profiles
|
|
20
|
+
class ProfilesNotSupportedError < StandardError
|
|
21
|
+
attr_reader :spec
|
|
22
|
+
|
|
23
|
+
def initialize(spec)
|
|
24
|
+
@spec = spec
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def message
|
|
28
|
+
'Profiles not supported for this API!'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/api/spec'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Profiling
|
|
5
|
+
module Transport
|
|
6
|
+
module HTTP
|
|
7
|
+
module API
|
|
8
|
+
# API specification for profiling
|
|
9
|
+
class Spec < Datadog::Transport::HTTP::API::Spec
|
|
10
|
+
attr_accessor \
|
|
11
|
+
:profiles
|
|
12
|
+
|
|
13
|
+
def send_profiling_flush(env, &block)
|
|
14
|
+
raise NoProfilesEndpointDefinedError, self if profiles.nil?
|
|
15
|
+
|
|
16
|
+
profiles.call(env, &block)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def encoder
|
|
20
|
+
profiles.encoder
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Raised when profiles sent but no profiles endpoint is defined
|
|
24
|
+
class NoProfilesEndpointDefinedError < StandardError
|
|
25
|
+
attr_reader :spec
|
|
26
|
+
|
|
27
|
+
def initialize(spec)
|
|
28
|
+
@spec = spec
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def message
|
|
32
|
+
'No profiles endpoint is defined for API specification!'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/builder'
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/profiling/transport/http/api'
|
|
4
|
+
require 'ddtrace/profiling/transport/http/client'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module Transport
|
|
9
|
+
module HTTP
|
|
10
|
+
# Builds new instances of Transport::HTTP::Client
|
|
11
|
+
class Builder < Datadog::Transport::HTTP::Builder
|
|
12
|
+
def api_instance_class
|
|
13
|
+
API::Instance
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_transport
|
|
17
|
+
raise Datadog::Transport::HTTP::Builder::NoDefaultApiError if @default_api.nil?
|
|
18
|
+
|
|
19
|
+
# TODO: Profiling doesn't have multiple APIs yet.
|
|
20
|
+
# When it does, we should build it out with these APIs.
|
|
21
|
+
# Just use :default_api for now.
|
|
22
|
+
Client.new(to_api_instances[@default_api])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/client'
|
|
2
|
+
require 'ddtrace/profiling/transport/client'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
# Routes, encodes, and sends tracer data to the trace agent via HTTP.
|
|
9
|
+
class Client < Datadog::Transport::HTTP::Client
|
|
10
|
+
include Transport::Client
|
|
11
|
+
|
|
12
|
+
def send_profiling_flush(flush)
|
|
13
|
+
# Build a request
|
|
14
|
+
request = Profiling::Transport::Request.new(flush)
|
|
15
|
+
send_payload(request).tap do |response|
|
|
16
|
+
if response.ok?
|
|
17
|
+
Datadog.logger.debug('Successfully reported profiling data')
|
|
18
|
+
else
|
|
19
|
+
Datadog.logger.debug { "Failed to report profiling data -- #{response.inspect}" }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def send_payload(request)
|
|
25
|
+
send_request(request) do |api, env|
|
|
26
|
+
api.send_profiling_flush(env)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'ddtrace/transport/http/response'
|
|
2
|
+
require 'ddtrace/profiling/transport/response'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
# HTTP transport behavior for profiling
|
|
8
|
+
module HTTP
|
|
9
|
+
# Response from HTTP transport for profiling
|
|
10
|
+
class Response
|
|
11
|
+
include Datadog::Transport::HTTP::Response
|
|
12
|
+
include Profiling::Transport::Response
|
|
13
|
+
|
|
14
|
+
def initialize(http_response, options = {})
|
|
15
|
+
super(http_response)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'ddtrace/profiling/transport/io/client'
|
|
2
|
+
require 'ddtrace/profiling/encoding/profile'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
# Namespace for profiling IO transport components
|
|
8
|
+
module IO
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
# Builds a new Profiling::Transport::IO::Client
|
|
12
|
+
def new(out, encoder, options = {})
|
|
13
|
+
Client.new(out, encoder, options)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Builds a new Profiling::Transport::IO::Client with default settings
|
|
17
|
+
# Pass options to override any settings.
|
|
18
|
+
def default(options = {})
|
|
19
|
+
options = options.dup
|
|
20
|
+
|
|
21
|
+
new(
|
|
22
|
+
options.delete(:out) || $stdout,
|
|
23
|
+
options.delete(:encoder) || Profiling::Encoding::Profile::Protobuf,
|
|
24
|
+
options
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ddtrace/transport/io/client'
|
|
2
|
+
require 'ddtrace/profiling/transport/client'
|
|
3
|
+
require 'ddtrace/profiling/transport/request'
|
|
4
|
+
require 'ddtrace/profiling/transport/io/response'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module Transport
|
|
9
|
+
module IO
|
|
10
|
+
# IO transport for profiling
|
|
11
|
+
class Client < Datadog::Transport::IO::Client
|
|
12
|
+
include Transport::Client
|
|
13
|
+
|
|
14
|
+
def send_profiling_flush(flush)
|
|
15
|
+
# Build a request
|
|
16
|
+
request = Profiling::Transport::Request.new(flush)
|
|
17
|
+
send_request(request)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def build_response(_request, _data, result)
|
|
21
|
+
Profiling::Transport::IO::Response.new(result)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/transport/io/response'
|
|
2
|
+
require 'ddtrace/profiling/transport/response'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
# IO transport behavior for profiling
|
|
8
|
+
module IO
|
|
9
|
+
# Response from IO transport for profiling
|
|
10
|
+
class Response < Datadog::Transport::IO::Response
|
|
11
|
+
include Profiling::Transport::Response
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'ddtrace/transport/parcel'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Profiling
|
|
5
|
+
module Transport
|
|
6
|
+
# Data transfer object for profiling data
|
|
7
|
+
class Parcel
|
|
8
|
+
include Datadog::Transport::Parcel
|
|
9
|
+
|
|
10
|
+
def encode_with(encoder)
|
|
11
|
+
# TODO: Determine encoding behavior
|
|
12
|
+
encoder.encode(data)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'ddtrace/transport/request'
|
|
2
|
+
require 'ddtrace/profiling/transport/parcel'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
# Profiling request
|
|
8
|
+
class Request < Datadog::Transport::Request
|
|
9
|
+
def initialize(flush)
|
|
10
|
+
super(Parcel.new(flush))
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -19,6 +19,7 @@ module Datadog
|
|
|
19
19
|
def self.extract(metadata)
|
|
20
20
|
metadata = Carrier.new(metadata)
|
|
21
21
|
return Datadog::Context.new unless metadata.valid?
|
|
22
|
+
|
|
22
23
|
Datadog::Context.new(trace_id: metadata.trace_id,
|
|
23
24
|
span_id: metadata.parent_id,
|
|
24
25
|
sampling_priority: metadata.sampling_priority,
|
|
@@ -26,7 +26,14 @@ module Datadog
|
|
|
26
26
|
# Inject all configured propagation styles
|
|
27
27
|
::Datadog.configuration.distributed_tracing.propagation_inject_style.each do |style|
|
|
28
28
|
propagator = PROPAGATION_STYLES[style]
|
|
29
|
-
|
|
29
|
+
begin
|
|
30
|
+
propagator.inject!(context, env) unless propagator.nil?
|
|
31
|
+
rescue => e
|
|
32
|
+
Datadog.logger.error(
|
|
33
|
+
'Error injecting propagated context into the environment. ' \
|
|
34
|
+
"Cause: #{e} Location: #{e.backtrace.first}"
|
|
35
|
+
)
|
|
36
|
+
end
|
|
30
37
|
end
|
|
31
38
|
end
|
|
32
39
|
|
|
@@ -42,7 +49,15 @@ module Datadog
|
|
|
42
49
|
|
|
43
50
|
# Extract context
|
|
44
51
|
# DEV: `propagator.extract` will return `nil`, where `HTTPPropagator#extract` will not
|
|
45
|
-
|
|
52
|
+
begin
|
|
53
|
+
extracted_context = propagator.extract(env)
|
|
54
|
+
rescue => e
|
|
55
|
+
Datadog.logger.error(
|
|
56
|
+
'Error extracting propagated context from the environment. ' \
|
|
57
|
+
"Cause: #{e} Location: #{e.backtrace.first}"
|
|
58
|
+
)
|
|
59
|
+
end
|
|
60
|
+
|
|
46
61
|
# Skip this style if no valid headers were found
|
|
47
62
|
next if extracted_context.nil?
|
|
48
63
|
|