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
|
@@ -4,7 +4,7 @@ module Datadog
|
|
|
4
4
|
module Runtime
|
|
5
5
|
# For control groups
|
|
6
6
|
module Cgroup
|
|
7
|
-
LINE_REGEX = /^(\d+):([^:]*):(.+)
|
|
7
|
+
LINE_REGEX = /^(\d+):([^:]*):(.+)$/.freeze
|
|
8
8
|
|
|
9
9
|
Descriptor = Struct.new(
|
|
10
10
|
:id,
|
|
@@ -21,7 +21,7 @@ module Datadog
|
|
|
21
21
|
filepath = "/proc/#{process}/cgroup"
|
|
22
22
|
|
|
23
23
|
if File.exist?(filepath)
|
|
24
|
-
File.
|
|
24
|
+
File.foreach("/proc/#{process}/cgroup") do |line|
|
|
25
25
|
line = line.strip
|
|
26
26
|
descriptors << parse(line) unless line.empty?
|
|
27
27
|
end
|
|
@@ -8,8 +8,9 @@ module Datadog
|
|
|
8
8
|
UUID_PATTERN = '[0-9a-f]{8}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{4}[-_]?[0-9a-f]{12}'.freeze
|
|
9
9
|
CONTAINER_PATTERN = '[0-9a-f]{64}'.freeze
|
|
10
10
|
|
|
11
|
-
POD_REGEX = /(pod)?(#{UUID_PATTERN})(?:.slice)
|
|
12
|
-
CONTAINER_REGEX = /(#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)
|
|
11
|
+
POD_REGEX = /(pod)?(#{UUID_PATTERN})(?:.slice)?$/.freeze
|
|
12
|
+
CONTAINER_REGEX = /(#{UUID_PATTERN}|#{CONTAINER_PATTERN})(?:.scope)?$/.freeze
|
|
13
|
+
FARGATE_14_CONTAINER_REGEX = /[0-9a-f]{32}-[0-9]{10}/.freeze
|
|
13
14
|
|
|
14
15
|
Descriptor = Struct.new(
|
|
15
16
|
:platform,
|
|
@@ -32,39 +33,44 @@ module Datadog
|
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def descriptor
|
|
35
|
-
@descriptor ||=
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
next if path.nil?
|
|
36
|
+
@descriptor ||= Descriptor.new.tap do |descriptor|
|
|
37
|
+
begin
|
|
38
|
+
Cgroup.descriptors.each do |cgroup_descriptor|
|
|
39
|
+
# Parse container data from cgroup descriptor
|
|
40
|
+
path = cgroup_descriptor.path
|
|
41
|
+
next if path.nil?
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
next if parts.length < 2
|
|
43
|
+
# Split path into parts
|
|
44
|
+
parts = path.split('/')
|
|
45
|
+
parts.shift # Remove leading empty part
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
# Read info from path
|
|
48
|
+
platform = parts[0]
|
|
49
|
+
container_id, task_uid = nil
|
|
50
|
+
|
|
51
|
+
case parts.length
|
|
52
|
+
when 2
|
|
53
|
+
container_id = parts[-1][CONTAINER_REGEX] || parts[-1][FARGATE_14_CONTAINER_REGEX]
|
|
54
|
+
else
|
|
49
55
|
platform = parts[0]
|
|
50
56
|
container_id = parts[-1][CONTAINER_REGEX]
|
|
51
57
|
task_uid = parts[-2][POD_REGEX]
|
|
58
|
+
end
|
|
52
59
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
60
|
+
# If container ID wasn't found, ignore.
|
|
61
|
+
# Path might describe a non-container environment.
|
|
62
|
+
next if container_id.nil?
|
|
56
63
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
descriptor.platform = platform
|
|
65
|
+
descriptor.container_id = container_id
|
|
66
|
+
descriptor.task_uid = task_uid
|
|
60
67
|
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
rescue StandardError => e
|
|
64
|
-
Datadog.logger.error(
|
|
65
|
-
"Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
|
|
66
|
-
)
|
|
68
|
+
break
|
|
67
69
|
end
|
|
70
|
+
rescue StandardError => e
|
|
71
|
+
Datadog.logger.error(
|
|
72
|
+
"Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
|
|
73
|
+
)
|
|
68
74
|
end
|
|
69
75
|
end
|
|
70
76
|
end
|
|
@@ -24,10 +24,18 @@ module Datadog
|
|
|
24
24
|
Ext::Runtime::LANG
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
def lang_engine
|
|
28
|
+
Ext::Runtime::LANG_ENGINE
|
|
29
|
+
end
|
|
30
|
+
|
|
27
31
|
def lang_interpreter
|
|
28
32
|
Ext::Runtime::LANG_INTERPRETER
|
|
29
33
|
end
|
|
30
34
|
|
|
35
|
+
def lang_platform
|
|
36
|
+
Ext::Runtime::LANG_PLATFORM
|
|
37
|
+
end
|
|
38
|
+
|
|
31
39
|
def lang_version
|
|
32
40
|
Ext::Runtime::LANG_VERSION
|
|
33
41
|
end
|
data/lib/ddtrace/sampler.rb
CHANGED
|
@@ -81,7 +81,7 @@ module Datadog
|
|
|
81
81
|
:default_key
|
|
82
82
|
|
|
83
83
|
def initialize(default_key, default_rate = 1.0, &block)
|
|
84
|
-
raise ArgumentError, 'No resolver given!' unless
|
|
84
|
+
raise ArgumentError, 'No resolver given!' unless block
|
|
85
85
|
|
|
86
86
|
@default_key = default_key
|
|
87
87
|
@resolver = block
|
|
@@ -5,6 +5,7 @@ require 'ddtrace/ext/priority'
|
|
|
5
5
|
require 'ddtrace/ext/sampling'
|
|
6
6
|
require 'ddtrace/sampler'
|
|
7
7
|
require 'ddtrace/sampling/rate_limiter'
|
|
8
|
+
require 'ddtrace/sampling/rule'
|
|
8
9
|
|
|
9
10
|
module Datadog
|
|
10
11
|
module Sampling
|
|
@@ -45,15 +46,8 @@ module Datadog
|
|
|
45
46
|
@default_sampler = if default_sampler
|
|
46
47
|
default_sampler
|
|
47
48
|
elsif default_sample_rate
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# We address that here by not setting the rate in the constructor,
|
|
52
|
-
# but using the setter method.
|
|
53
|
-
#
|
|
54
|
-
# We don't want to make this change directly to \RateSampler
|
|
55
|
-
# because it breaks its current contract to existing users.
|
|
56
|
-
Datadog::RateSampler.new.tap { |s| s.sample_rate = default_sample_rate }
|
|
49
|
+
# Add to the end of the rule list a rule always matches any span
|
|
50
|
+
@rules << SimpleRule.new(sample_rate: default_sample_rate)
|
|
57
51
|
else
|
|
58
52
|
RateByServiceSampler.new(1.0, env: -> { Datadog.tracer.tags[:env] })
|
|
59
53
|
end
|
|
@@ -88,6 +82,7 @@ module Datadog
|
|
|
88
82
|
|
|
89
83
|
def update(*args)
|
|
90
84
|
return false unless @default_sampler.respond_to?(:update)
|
|
85
|
+
|
|
91
86
|
@default_sampler.update(*args)
|
|
92
87
|
end
|
|
93
88
|
|
data/lib/ddtrace/span.rb
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'time'
|
|
4
|
-
require 'thread'
|
|
5
|
-
|
|
6
4
|
require 'ddtrace/utils'
|
|
7
5
|
require 'ddtrace/ext/errors'
|
|
8
6
|
require 'ddtrace/ext/priority'
|
|
@@ -38,14 +36,16 @@ module Datadog
|
|
|
38
36
|
EXTERNAL_MAX_ID = 1 << 64
|
|
39
37
|
|
|
40
38
|
# This limit is for numeric tags because uint64 could end up rounded.
|
|
41
|
-
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53)
|
|
39
|
+
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53).freeze
|
|
42
40
|
|
|
43
41
|
attr_accessor :name, :service, :resource, :span_type,
|
|
44
42
|
:span_id, :trace_id, :parent_id,
|
|
45
43
|
:status, :sampled,
|
|
46
|
-
:tracer, :context
|
|
44
|
+
:tracer, :context
|
|
45
|
+
|
|
46
|
+
attr_reader :parent, :start_time, :end_time
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
attr_writer :duration
|
|
49
49
|
|
|
50
50
|
# Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
|
|
51
51
|
# and then <tt>finish()</tt> once the tracer operation is over.
|
|
@@ -180,7 +180,7 @@ module Datadog
|
|
|
180
180
|
# behavior and so we maintain it for backward compatibility for those
|
|
181
181
|
# who are using async manual instrumentation that may rely on this
|
|
182
182
|
|
|
183
|
-
@start_time = start_time || Time.now.utc
|
|
183
|
+
@start_time = start_time || Utils::Time.now.utc
|
|
184
184
|
@duration_start = start_time.nil? ? duration_marker : nil
|
|
185
185
|
|
|
186
186
|
self
|
|
@@ -206,7 +206,7 @@ module Datadog
|
|
|
206
206
|
|
|
207
207
|
@allocation_count_finish = now_allocations
|
|
208
208
|
|
|
209
|
-
now = Time.now.utc
|
|
209
|
+
now = Utils::Time.now.utc
|
|
210
210
|
|
|
211
211
|
# Provide a default start_time if unset.
|
|
212
212
|
# Using `now` here causes duration to be 0; this is expected
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
require 'ddtrace/ext/net'
|
|
2
2
|
require 'ddtrace/runtime/socket'
|
|
3
3
|
require 'ddtrace/runtime/metrics'
|
|
4
|
+
require 'ddtrace/utils/only_once'
|
|
4
5
|
|
|
5
6
|
module Datadog
|
|
6
7
|
# SyncWriter flushes both services and traces synchronously
|
|
7
8
|
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
9
|
+
#
|
|
10
|
+
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
11
|
+
# the separate `datadog-lambda` uses it as of February 2021:
|
|
12
|
+
# <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
|
|
8
13
|
class SyncWriter
|
|
14
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
15
|
+
|
|
9
16
|
attr_reader \
|
|
10
17
|
:priority_sampler,
|
|
11
18
|
:transport
|
|
@@ -21,17 +28,15 @@ module Datadog
|
|
|
21
28
|
|
|
22
29
|
def write(trace, services = nil)
|
|
23
30
|
unless services.nil?
|
|
24
|
-
|
|
31
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
25
32
|
Datadog.logger.warn(%(
|
|
26
33
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
27
|
-
write(traces, services) can be
|
|
34
|
+
write(traces, services) can be updated to write(traces)
|
|
28
35
|
))
|
|
29
36
|
end
|
|
30
37
|
end
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
proc { flush_trace(trace) }
|
|
34
|
-
)
|
|
39
|
+
flush_trace(trace)
|
|
35
40
|
rescue => e
|
|
36
41
|
Datadog.logger.debug(e)
|
|
37
42
|
end
|
|
@@ -44,13 +49,10 @@ module Datadog
|
|
|
44
49
|
|
|
45
50
|
private
|
|
46
51
|
|
|
47
|
-
def perform_concurrently(*tasks)
|
|
48
|
-
tasks.map { |task| Thread.new(&task) }.each(&:join)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
52
|
def flush_trace(trace)
|
|
52
53
|
processed_traces = Pipeline.process!([trace])
|
|
53
54
|
return if processed_traces.empty?
|
|
55
|
+
|
|
54
56
|
inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
|
|
55
57
|
transport.send_traces(processed_traces)
|
|
56
58
|
end
|
|
@@ -58,9 +60,7 @@ module Datadog
|
|
|
58
60
|
def inject_hostname!(trace)
|
|
59
61
|
unless trace.first.nil?
|
|
60
62
|
hostname = Datadog::Runtime::Socket.hostname
|
|
61
|
-
unless hostname.nil? || hostname.empty?
|
|
62
|
-
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
63
|
-
end
|
|
63
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Tasks
|
|
3
|
+
# Wraps command with Datadog tracing
|
|
4
|
+
class Exec
|
|
5
|
+
attr_reader :args
|
|
6
|
+
|
|
7
|
+
def initialize(args)
|
|
8
|
+
@args = args
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run
|
|
12
|
+
set_rubyopt!
|
|
13
|
+
exec_with_error_handling(args)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def rubyopts
|
|
17
|
+
[
|
|
18
|
+
'-rddtrace/profiling/preload'
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def set_rubyopt!
|
|
25
|
+
if ENV.key?('RUBYOPT')
|
|
26
|
+
ENV['RUBYOPT'] += " #{rubyopts.join(' ')}"
|
|
27
|
+
else
|
|
28
|
+
ENV['RUBYOPT'] = rubyopts.join(' ')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
|
33
|
+
# follow the same status codes as the shell uses
|
|
34
|
+
# See also:
|
|
35
|
+
# * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
|
|
36
|
+
# * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
|
|
37
|
+
def exec_with_error_handling(args)
|
|
38
|
+
Kernel.exec(*args)
|
|
39
|
+
rescue Errno::ENOENT => e
|
|
40
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
41
|
+
Kernel.exit 127
|
|
42
|
+
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
43
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
44
|
+
Kernel.exit 126
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Tasks
|
|
3
|
+
# Prints help message for usage of `ddtrace`
|
|
4
|
+
class Help
|
|
5
|
+
def run
|
|
6
|
+
puts %(
|
|
7
|
+
Usage: ddtrace [command] [arguments]
|
|
8
|
+
exec [command]: Executes command with tracing & profiling preloaded.
|
|
9
|
+
help: Prints this help message.
|
|
10
|
+
)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'thread'
|
|
2
1
|
require 'logger'
|
|
3
2
|
require 'pathname'
|
|
4
3
|
|
|
@@ -11,6 +10,8 @@ require 'ddtrace/runtime/identity'
|
|
|
11
10
|
require 'ddtrace/sampler'
|
|
12
11
|
require 'ddtrace/sampling'
|
|
13
12
|
require 'ddtrace/correlation'
|
|
13
|
+
require 'ddtrace/event'
|
|
14
|
+
require 'ddtrace/utils/only_once'
|
|
14
15
|
|
|
15
16
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
16
17
|
module Datadog
|
|
@@ -20,6 +21,9 @@ module Datadog
|
|
|
20
21
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
|
21
22
|
# rubocop:disable Metrics/ClassLength
|
|
22
23
|
class Tracer
|
|
24
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
25
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
26
|
+
|
|
23
27
|
attr_reader :sampler, :tags, :provider, :context_flush
|
|
24
28
|
attr_accessor :enabled, :writer
|
|
25
29
|
attr_writer :default_service
|
|
@@ -28,8 +32,7 @@ module Datadog
|
|
|
28
32
|
DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
|
|
29
33
|
|
|
30
34
|
def services
|
|
31
|
-
|
|
32
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
35
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
33
36
|
Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
|
|
34
37
|
end
|
|
35
38
|
|
|
@@ -130,8 +133,7 @@ module Datadog
|
|
|
130
133
|
#
|
|
131
134
|
# set_service_info is deprecated, no service information needs to be tracked
|
|
132
135
|
def set_service_info(service, app, app_type)
|
|
133
|
-
|
|
134
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
136
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
135
137
|
Datadog.logger.warn(%(
|
|
136
138
|
set_service_info: Usage of set_service_info has been deprecated,
|
|
137
139
|
service information no longer needs to be reported to the trace agent.
|
|
@@ -144,6 +146,7 @@ module Datadog
|
|
|
144
146
|
# a service would be invalid and rejected.
|
|
145
147
|
def default_service
|
|
146
148
|
return @default_service if instance_variable_defined?(:@default_service) && @default_service
|
|
149
|
+
|
|
147
150
|
begin
|
|
148
151
|
@default_service = File.basename($PROGRAM_NAME, '.*')
|
|
149
152
|
rescue StandardError => e
|
|
@@ -313,6 +316,10 @@ module Datadog
|
|
|
313
316
|
end
|
|
314
317
|
end
|
|
315
318
|
|
|
319
|
+
def trace_completed
|
|
320
|
+
@trace_completed ||= TraceCompleted.new
|
|
321
|
+
end
|
|
322
|
+
|
|
316
323
|
# Record the given +context+. For compatibility with previous versions,
|
|
317
324
|
# +context+ can also be a span. It is similar to the +child_of+ argument,
|
|
318
325
|
# method will figure out what to do, submitting a +span+ for recording
|
|
@@ -364,6 +371,22 @@ module Datadog
|
|
|
364
371
|
end
|
|
365
372
|
|
|
366
373
|
@writer.write(trace)
|
|
374
|
+
trace_completed.publish(trace)
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
# Triggered whenever a trace is completed
|
|
378
|
+
class TraceCompleted < Datadog::Event
|
|
379
|
+
def initialize
|
|
380
|
+
super(:trace_completed)
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
# NOTE: Ignore Rubocop rule. This definition allows for
|
|
384
|
+
# description of and constraints on arguments.
|
|
385
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
|
386
|
+
def publish(trace)
|
|
387
|
+
super(trace)
|
|
388
|
+
end
|
|
389
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
|
367
390
|
end
|
|
368
391
|
|
|
369
392
|
# TODO: Move this kind of configuration building out of the tracer.
|
|
@@ -27,7 +27,7 @@ module Datadog
|
|
|
27
27
|
# Pass a block to override any settings.
|
|
28
28
|
def default(options = {})
|
|
29
29
|
new do |transport|
|
|
30
|
-
transport.adapter
|
|
30
|
+
transport.adapter default_adapter, default_hostname, default_port, timeout: 1
|
|
31
31
|
transport.headers default_headers
|
|
32
32
|
|
|
33
33
|
apis = API.defaults
|
|
@@ -39,10 +39,15 @@ module Datadog
|
|
|
39
39
|
# Apply any settings given by options
|
|
40
40
|
unless options.empty?
|
|
41
41
|
# Change hostname/port
|
|
42
|
-
if
|
|
43
|
-
hostname = options
|
|
44
|
-
port = options
|
|
45
|
-
|
|
42
|
+
if [:hostname, :port, :timeout, :ssl].any? { |key| options.key?(key) }
|
|
43
|
+
hostname = options[:hostname] || default_hostname
|
|
44
|
+
port = options[:port] || default_port
|
|
45
|
+
|
|
46
|
+
adapter_options = { timeout: 1 }
|
|
47
|
+
adapter_options[:timeout] = options[:timeout] if options.key?(:timeout)
|
|
48
|
+
adapter_options[:ssl] = options[:ssl] if options.key?(:ssl)
|
|
49
|
+
|
|
50
|
+
transport.adapter default_adapter, hostname, port, adapter_options
|
|
46
51
|
end
|
|
47
52
|
|
|
48
53
|
# Change default API
|
|
@@ -69,12 +74,14 @@ module Datadog
|
|
|
69
74
|
}.tap do |headers|
|
|
70
75
|
# Add container ID, if present.
|
|
71
76
|
container_id = Datadog::Runtime::Container.container_id
|
|
72
|
-
unless container_id.nil?
|
|
73
|
-
headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id
|
|
74
|
-
end
|
|
77
|
+
headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
75
78
|
end
|
|
76
79
|
end
|
|
77
80
|
|
|
81
|
+
def default_adapter
|
|
82
|
+
:net_http
|
|
83
|
+
end
|
|
84
|
+
|
|
78
85
|
def default_hostname
|
|
79
86
|
return default_url.hostname if default_url
|
|
80
87
|
|