ddtrace 0.42.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.circleci/config.yml +274 -137
- data/.circleci/images/primary/Dockerfile-3.0.0 +73 -0
- data/.circleci/images/primary/{Dockerfile-jruby-9.2 → Dockerfile-jruby-9.2-latest} +2 -1
- data/.circleci/images/primary/Dockerfile-jruby-9.2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-truffleruby-21.0.0 +73 -0
- data/.github/workflows/add-milestone-to-pull-requests.yml +42 -0
- data/.github/workflows/create-next-milestone.yml +20 -0
- data/.rubocop.yml +250 -7
- data/.rubocop_todo.yml +397 -0
- data/.simplecov +9 -0
- data/Appraisals +386 -142
- data/CHANGELOG.md +1218 -362
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +55 -3
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/Rakefile +216 -29
- data/ddtrace.gemspec +4 -36
- data/docker-compose.yml +105 -7
- data/docs/DevelopmentGuide.md +30 -2
- data/docs/GettingStarted.md +242 -22
- data/integration/README.md +68 -0
- data/integration/apps/rack/.dockerignore +1 -0
- data/integration/apps/rack/.envrc.sample +1 -0
- data/integration/apps/rack/.gitignore +4 -0
- data/integration/apps/rack/.rspec +1 -0
- data/integration/apps/rack/Dockerfile +25 -0
- data/integration/apps/rack/Dockerfile-ci +11 -0
- data/integration/apps/rack/Gemfile +24 -0
- data/integration/apps/rack/README.md +93 -0
- data/integration/apps/rack/app/acme.rb +80 -0
- data/integration/apps/rack/app/datadog.rb +17 -0
- data/integration/apps/rack/bin/run +22 -0
- data/integration/apps/rack/bin/setup +17 -0
- data/integration/apps/rack/bin/test +24 -0
- data/integration/apps/rack/config.ru +6 -0
- data/integration/apps/rack/config/puma.rb +14 -0
- data/integration/apps/rack/config/unicorn.rb +23 -0
- data/integration/apps/rack/docker-compose.ci.yml +62 -0
- data/integration/apps/rack/docker-compose.yml +78 -0
- data/integration/apps/rack/script/build-images +38 -0
- data/integration/apps/rack/script/ci +50 -0
- data/integration/apps/rack/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rack/spec/spec_helper.rb +16 -0
- data/integration/apps/rack/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/.dockerignore +1 -0
- data/integration/apps/rails-five/.env +3 -0
- data/integration/apps/rails-five/.envrc.sample +1 -0
- data/integration/apps/rails-five/.gitignore +30 -0
- data/integration/apps/rails-five/Dockerfile +25 -0
- data/integration/apps/rails-five/Dockerfile-ci +11 -0
- data/integration/apps/rails-five/Gemfile +104 -0
- data/integration/apps/rails-five/README.md +94 -0
- data/integration/apps/rails-five/Rakefile +6 -0
- data/integration/apps/rails-five/app/channels/application_cable/channel.rb +4 -0
- data/integration/apps/rails-five/app/channels/application_cable/connection.rb +4 -0
- data/integration/apps/rails-five/app/controllers/application_controller.rb +2 -0
- data/integration/apps/rails-five/app/controllers/basic_controller.rb +36 -0
- data/integration/apps/rails-five/app/controllers/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/controllers/health_controller.rb +9 -0
- data/integration/apps/rails-five/app/controllers/jobs_controller.rb +12 -0
- data/integration/apps/rails-five/app/jobs/application_job.rb +2 -0
- data/integration/apps/rails-five/app/jobs/test_job.rb +12 -0
- data/integration/apps/rails-five/app/mailers/application_mailer.rb +4 -0
- data/integration/apps/rails-five/app/models/application_record.rb +3 -0
- data/integration/apps/rails-five/app/models/concerns/.keep +0 -0
- data/integration/apps/rails-five/app/models/test.rb +2 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.html.erb +13 -0
- data/integration/apps/rails-five/app/views/layouts/mailer.text.erb +1 -0
- data/integration/apps/rails-five/bin/bundle +3 -0
- data/integration/apps/rails-five/bin/rails +9 -0
- data/integration/apps/rails-five/bin/rake +9 -0
- data/integration/apps/rails-five/bin/run +24 -0
- data/integration/apps/rails-five/bin/setup +27 -0
- data/integration/apps/rails-five/bin/spring +17 -0
- data/integration/apps/rails-five/bin/test +21 -0
- data/integration/apps/rails-five/bin/update +28 -0
- data/integration/apps/rails-five/config.ru +5 -0
- data/integration/apps/rails-five/config/application.rb +97 -0
- data/integration/apps/rails-five/config/boot.rb +4 -0
- data/integration/apps/rails-five/config/cable.yml +10 -0
- data/integration/apps/rails-five/config/credentials.yml.enc +1 -0
- data/integration/apps/rails-five/config/database.yml +28 -0
- data/integration/apps/rails-five/config/environment.rb +5 -0
- data/integration/apps/rails-five/config/environments/development.rb +51 -0
- data/integration/apps/rails-five/config/environments/production.rb +82 -0
- data/integration/apps/rails-five/config/environments/test.rb +43 -0
- data/integration/apps/rails-five/config/initializers/datadog.rb +18 -0
- data/integration/apps/rails-five/config/initializers/filter_parameter_logging.rb +4 -0
- data/integration/apps/rails-five/config/initializers/resque.rb +4 -0
- data/integration/apps/rails-five/config/initializers/rollbar.rb +5 -0
- data/integration/apps/rails-five/config/initializers/wrap_parameters.rb +14 -0
- data/integration/apps/rails-five/config/locales/en.yml +33 -0
- data/integration/apps/rails-five/config/puma.rb +24 -0
- data/integration/apps/rails-five/config/routes.rb +11 -0
- data/integration/apps/rails-five/config/spring.rb +6 -0
- data/integration/apps/rails-five/config/unicorn.rb +29 -0
- data/integration/apps/rails-five/db/migrate/20190927215052_create_tests.rb +11 -0
- data/integration/apps/rails-five/db/schema.rb +23 -0
- data/integration/apps/rails-five/db/seeds.rb +7 -0
- data/integration/apps/rails-five/docker-compose.ci.yml +98 -0
- data/integration/apps/rails-five/docker-compose.yml +100 -0
- data/integration/apps/rails-five/lib/tasks/.keep +0 -0
- data/integration/apps/rails-five/log/.keep +0 -0
- data/integration/apps/rails-five/public/robots.txt +1 -0
- data/integration/apps/rails-five/script/build-images +35 -0
- data/integration/apps/rails-five/script/ci +50 -0
- data/integration/apps/rails-five/spec/integration/basic_spec.rb +10 -0
- data/integration/apps/rails-five/spec/spec_helper.rb +16 -0
- data/integration/apps/rails-five/spec/support/integration_helper.rb +22 -0
- data/integration/apps/rails-five/storage/.keep +0 -0
- data/integration/apps/rails-five/tmp/.keep +0 -0
- data/integration/apps/rails-five/vendor/.keep +0 -0
- data/integration/apps/ruby/.dockerignore +1 -0
- data/integration/apps/ruby/.envrc.sample +1 -0
- data/integration/apps/ruby/.gitignore +2 -0
- data/integration/apps/ruby/Dockerfile +25 -0
- data/integration/apps/ruby/Dockerfile-ci +11 -0
- data/integration/apps/ruby/Gemfile +11 -0
- data/integration/apps/ruby/README.md +70 -0
- data/integration/apps/ruby/agent.yaml +3 -0
- data/integration/apps/ruby/app/datadog.rb +13 -0
- data/integration/apps/ruby/app/fibonacci.rb +58 -0
- data/integration/apps/ruby/bin/run +20 -0
- data/integration/apps/ruby/bin/setup +17 -0
- data/integration/apps/ruby/bin/test +21 -0
- data/integration/apps/ruby/docker-compose.ci.yml +51 -0
- data/integration/apps/ruby/docker-compose.yml +63 -0
- data/integration/apps/ruby/script/build-images +38 -0
- data/integration/apps/ruby/script/ci +50 -0
- data/integration/images/agent/Dockerfile +2 -0
- data/integration/images/agent/agent.yaml +3 -0
- data/integration/images/include/datadog/analyzer.rb +71 -0
- data/integration/images/include/datadog/demo_env.rb +101 -0
- data/integration/images/include/http-health-check +33 -0
- data/integration/images/ruby/2.0/Dockerfile +54 -0
- data/integration/images/ruby/2.1/Dockerfile +54 -0
- data/integration/images/ruby/2.2/Dockerfile +54 -0
- data/integration/images/ruby/2.3/Dockerfile +70 -0
- data/integration/images/ruby/2.4/Dockerfile +54 -0
- data/integration/images/ruby/2.5/Dockerfile +54 -0
- data/integration/images/ruby/2.6/Dockerfile +54 -0
- data/integration/images/ruby/2.7/Dockerfile +54 -0
- data/integration/images/ruby/3.0/Dockerfile +54 -0
- data/integration/images/wrk/Dockerfile +33 -0
- data/integration/images/wrk/scripts/entrypoint.sh +17 -0
- data/integration/images/wrk/scripts/scenarios/basic/default.lua +1 -0
- data/integration/images/wrk/scripts/scenarios/basic/fibonacci.lua +1 -0
- data/integration/script/build-images +43 -0
- data/lib/ddtrace.rb +10 -5
- data/lib/ddtrace/analytics.rb +2 -0
- data/lib/ddtrace/auto_instrument.rb +3 -0
- data/lib/ddtrace/auto_instrument_base.rb +6 -0
- data/lib/ddtrace/buffer.rb +4 -4
- data/lib/ddtrace/configuration.rb +108 -23
- data/lib/ddtrace/configuration/base.rb +1 -1
- data/lib/ddtrace/configuration/components.rb +2 -2
- data/lib/ddtrace/configuration/option_definition.rb +1 -3
- data/lib/ddtrace/configuration/options.rb +4 -7
- data/lib/ddtrace/configuration/settings.rb +21 -5
- data/lib/ddtrace/context.rb +23 -6
- data/lib/ddtrace/context_provider.rb +12 -2
- data/lib/ddtrace/contrib/action_cable/event.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +1 -3
- data/lib/ddtrace/contrib/action_pack/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/event.rb +1 -5
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +7 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +1 -1
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +101 -18
- data/lib/ddtrace/contrib/active_record/integration.rb +7 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +68 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +104 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +21 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +3 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +7 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +12 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +9 -5
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/aws/patcher.rb +1 -1
- data/lib/ddtrace/contrib/aws/services.rb +3 -0
- data/lib/ddtrace/contrib/configurable.rb +63 -37
- data/lib/ddtrace/contrib/configuration/resolver.rb +70 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +7 -6
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/cucumber/ext.rb +17 -0
- data/lib/ddtrace/contrib/cucumber/formatter.rb +98 -0
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +24 -0
- data/lib/ddtrace/contrib/cucumber/integration.rb +45 -0
- data/lib/ddtrace/contrib/cucumber/patcher.rb +23 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -38
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +2 -1
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +3 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +11 -10
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +9 -7
- data/lib/ddtrace/contrib/extensions.rb +53 -3
- data/lib/ddtrace/contrib/faraday/middleware.rb +1 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -36
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +47 -21
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -42
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +8 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -36
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +1 -3
- data/lib/ddtrace/contrib/http/instrumentation.rb +7 -7
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +17 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +147 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +43 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +38 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +15 -21
- data/lib/ddtrace/contrib/httprb/patcher.rb +5 -2
- data/lib/ddtrace/contrib/kafka/event.rb +1 -1
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +2 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -3
- data/lib/ddtrace/contrib/patchable.rb +18 -7
- data/lib/ddtrace/contrib/patcher.rb +9 -6
- data/lib/ddtrace/contrib/presto/patcher.rb +5 -2
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +35 -0
- data/lib/ddtrace/contrib/qless/ext.rb +20 -0
- data/lib/ddtrace/contrib/qless/integration.rb +38 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +73 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +33 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +19 -19
- data/lib/ddtrace/contrib/que/tracer.rb +3 -2
- data/lib/ddtrace/contrib/racecar/event.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +3 -3
- data/lib/ddtrace/contrib/rack/integration.rb +7 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +6 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +1 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +6 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +10 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +11 -4
- data/lib/ddtrace/contrib/rails/utils.rb +4 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +4 -2
- data/lib/ddtrace/contrib/rake/integration.rb +1 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +14 -5
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +28 -0
- data/lib/ddtrace/contrib/redis/tags.rb +5 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +6 -7
- data/lib/ddtrace/contrib/registry.rb +2 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +1 -1
- data/lib/ddtrace/contrib/resque/resque_job.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +1 -3
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/rspec/example.rb +75 -0
- data/lib/ddtrace/contrib/rspec/ext.rb +16 -0
- data/lib/ddtrace/contrib/rspec/integration.rb +46 -0
- data/lib/ddtrace/contrib/rspec/patcher.rb +23 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +5 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +3 -1
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +5 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -1
- data/lib/ddtrace/contrib/sinatra/env.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/headers.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer.rb +1 -3
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +5 -5
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +11 -11
- data/lib/ddtrace/contrib/sneakers/tracer.rb +16 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +69 -0
- data/lib/ddtrace/correlation.rb +1 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +2 -1
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +1 -3
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/ci.rb +297 -0
- data/lib/ddtrace/ext/distributed.rb +8 -2
- data/lib/ddtrace/ext/git.rb +11 -0
- data/lib/ddtrace/ext/http.rb +1 -1
- data/lib/ddtrace/ext/runtime.rb +4 -1
- data/lib/ddtrace/ext/test.rb +24 -0
- data/lib/ddtrace/forced_tracing.rb +2 -0
- data/lib/ddtrace/logger.rb +1 -1
- data/lib/ddtrace/metrics.rb +10 -6
- data/lib/ddtrace/opentracer/distributed_headers.rb +3 -0
- data/lib/ddtrace/opentracer/span.rb +2 -6
- data/lib/ddtrace/opentracer/thread_local_scope.rb +1 -0
- data/lib/ddtrace/patcher.rb +25 -4
- data/lib/ddtrace/pin.rb +8 -61
- data/lib/ddtrace/pipeline/span_filter.rb +1 -1
- data/lib/ddtrace/propagation/grpc_propagator.rb +1 -0
- data/lib/ddtrace/propagation/http_propagator.rb +17 -2
- data/lib/ddtrace/quantization/http.rb +1 -0
- data/lib/ddtrace/runtime/cgroup.rb +2 -2
- data/lib/ddtrace/runtime/container.rb +27 -29
- data/lib/ddtrace/runtime/identity.rb +12 -5
- data/lib/ddtrace/sampler.rb +1 -1
- data/lib/ddtrace/sampling/rate_limiter.rb +65 -16
- data/lib/ddtrace/sampling/rule_sampler.rb +1 -0
- data/lib/ddtrace/span.rb +7 -7
- data/lib/ddtrace/sync_writer.rb +12 -12
- data/lib/ddtrace/tracer.rb +21 -6
- data/lib/ddtrace/transport/http.rb +15 -8
- data/lib/ddtrace/transport/http/adapters/net.rb +27 -8
- data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/builder.rb +7 -1
- data/lib/ddtrace/transport/http/env.rb +8 -0
- data/lib/ddtrace/transport/http/traces.rb +2 -3
- data/lib/ddtrace/transport/io.rb +1 -1
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +6 -0
- data/lib/ddtrace/transport/traces.rb +18 -1
- data/lib/ddtrace/utils.rb +10 -11
- data/lib/ddtrace/utils/compression.rb +27 -0
- data/lib/ddtrace/utils/forking.rb +52 -0
- data/lib/ddtrace/utils/object_set.rb +41 -0
- data/lib/ddtrace/utils/only_once.rb +40 -0
- data/lib/ddtrace/utils/sequence.rb +17 -0
- data/lib/ddtrace/utils/string_table.rb +45 -0
- data/lib/ddtrace/utils/time.rb +32 -1
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +12 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +8 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +116 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +57 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +135 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +32 -0
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace/workers.rb +5 -0
- data/lib/ddtrace/workers/async.rb +11 -3
- data/lib/ddtrace/workers/loop.rb +17 -3
- data/lib/ddtrace/workers/polling.rb +1 -0
- data/lib/ddtrace/workers/queue.rb +1 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +7 -3
- data/lib/ddtrace/workers/trace_writer.rb +10 -10
- data/lib/ddtrace/writer.rb +26 -5
- metadata +186 -373
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/monkey.rb +0 -58
data/lib/ddtrace/logger.rb
CHANGED
data/lib/ddtrace/metrics.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Datadog
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def default_statsd_client
|
|
44
|
-
require 'datadog/statsd'
|
|
44
|
+
require 'datadog/statsd'
|
|
45
45
|
|
|
46
46
|
# Create a StatsD client that points to the agent.
|
|
47
47
|
Datadog::Statsd.new(default_hostname, default_port)
|
|
@@ -58,7 +58,8 @@ module Datadog
|
|
|
58
58
|
|
|
59
59
|
def count(stat, value = nil, options = nil, &block)
|
|
60
60
|
return unless send_stats? && statsd.respond_to?(:count)
|
|
61
|
-
|
|
61
|
+
|
|
62
|
+
value, options = yield if block
|
|
62
63
|
raise ArgumentError if value.nil?
|
|
63
64
|
|
|
64
65
|
statsd.count(stat, value, metric_options(options))
|
|
@@ -68,7 +69,8 @@ module Datadog
|
|
|
68
69
|
|
|
69
70
|
def distribution(stat, value = nil, options = nil, &block)
|
|
70
71
|
return unless send_stats? && statsd.respond_to?(:distribution)
|
|
71
|
-
|
|
72
|
+
|
|
73
|
+
value, options = yield if block
|
|
72
74
|
raise ArgumentError if value.nil?
|
|
73
75
|
|
|
74
76
|
statsd.distribution(stat, value, metric_options(options))
|
|
@@ -78,6 +80,7 @@ module Datadog
|
|
|
78
80
|
|
|
79
81
|
def increment(stat, options = nil)
|
|
80
82
|
return unless send_stats? && statsd.respond_to?(:increment)
|
|
83
|
+
|
|
81
84
|
options = yield if block_given?
|
|
82
85
|
|
|
83
86
|
statsd.increment(stat, metric_options(options))
|
|
@@ -87,7 +90,8 @@ module Datadog
|
|
|
87
90
|
|
|
88
91
|
def gauge(stat, value = nil, options = nil, &block)
|
|
89
92
|
return unless send_stats? && statsd.respond_to?(:gauge)
|
|
90
|
-
|
|
93
|
+
|
|
94
|
+
value, options = yield if block
|
|
91
95
|
raise ArgumentError if value.nil?
|
|
92
96
|
|
|
93
97
|
statsd.gauge(stat, value, metric_options(options))
|
|
@@ -100,7 +104,7 @@ module Datadog
|
|
|
100
104
|
|
|
101
105
|
# Calculate time, send it as a distribution.
|
|
102
106
|
start = Utils::Time.get_time
|
|
103
|
-
|
|
107
|
+
yield
|
|
104
108
|
ensure
|
|
105
109
|
begin
|
|
106
110
|
if send_stats? && !start.nil?
|
|
@@ -186,7 +190,7 @@ module Datadog
|
|
|
186
190
|
attr_accessor :logger
|
|
187
191
|
|
|
188
192
|
def initialize(logger = nil)
|
|
189
|
-
@logger = logger || Logger.new(
|
|
193
|
+
@logger = logger || Logger.new($stdout).tap do |l|
|
|
190
194
|
l.level = Logger::INFO
|
|
191
195
|
l.progname = nil
|
|
192
196
|
l.formatter = proc do |_severity, datetime, _progname, msg|
|
|
@@ -29,8 +29,10 @@ module Datadog
|
|
|
29
29
|
# It's important to make a difference between no header,
|
|
30
30
|
# and a header defined to zero.
|
|
31
31
|
return unless hdr
|
|
32
|
+
|
|
32
33
|
value = hdr.to_i
|
|
33
34
|
return if value < 0
|
|
35
|
+
|
|
34
36
|
value
|
|
35
37
|
end
|
|
36
38
|
|
|
@@ -45,6 +47,7 @@ module Datadog
|
|
|
45
47
|
def id(header)
|
|
46
48
|
value = @carrier[header].to_i
|
|
47
49
|
return if value.zero? || value >= Datadog::Span::EXTERNAL_MAX_ID
|
|
50
|
+
|
|
48
51
|
value < 0 ? value + 0x1_0000_0000_0000_0000 : value
|
|
49
52
|
end
|
|
50
53
|
end
|
|
@@ -73,9 +73,7 @@ module Datadog
|
|
|
73
73
|
super # Log deprecation warning
|
|
74
74
|
|
|
75
75
|
# If the fields specify an error
|
|
76
|
-
if fields.key?(:'error.object')
|
|
77
|
-
datadog_span.set_error(fields[:'error.object'])
|
|
78
|
-
end
|
|
76
|
+
datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
|
|
79
77
|
end
|
|
80
78
|
|
|
81
79
|
# Add a log entry to this span
|
|
@@ -83,9 +81,7 @@ module Datadog
|
|
|
83
81
|
# @param fields [Hash] Additional information to log
|
|
84
82
|
def log_kv(timestamp: Time.now, **fields)
|
|
85
83
|
# If the fields specify an error
|
|
86
|
-
if fields.key?(:'error.object')
|
|
87
|
-
datadog_span.set_error(fields[:'error.object'])
|
|
88
|
-
end
|
|
84
|
+
datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
|
|
89
85
|
end
|
|
90
86
|
|
|
91
87
|
# Finish the {Span}
|
data/lib/ddtrace/patcher.rb
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
require 'ddtrace/utils/only_once'
|
|
2
|
+
|
|
1
3
|
module Datadog
|
|
2
|
-
#
|
|
4
|
+
# Deprecated: This module should no longer be included. It's only being kept around for backwards compatibility
|
|
5
|
+
# concerns regarding customer usage.
|
|
3
6
|
module Patcher
|
|
7
|
+
INCLUDED_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
8
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
9
|
+
|
|
4
10
|
def self.included(base)
|
|
11
|
+
INCLUDED_WARN_ONLY_ONCE.run do
|
|
12
|
+
Datadog.logger.warn(
|
|
13
|
+
'Including Datadog::Patcher is deprecated. ' \
|
|
14
|
+
'For the #do_once behavior, use Datadog::Utils::OnlyOnce instead. ' \
|
|
15
|
+
'For the #without_warnings behavior, use Datadog::Patcher.without_warnings { ... } as a module function.'
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
base.send(:extend, CommonMethods)
|
|
6
20
|
base.send(:include, CommonMethods)
|
|
7
21
|
end
|
|
@@ -22,11 +36,13 @@ module Datadog
|
|
|
22
36
|
end
|
|
23
37
|
|
|
24
38
|
def do_once(key = nil, options = {})
|
|
39
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
40
|
+
Datadog.logger.warn('Datadog::Patcher#do_once is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
41
|
+
end
|
|
42
|
+
|
|
25
43
|
# If already done, don't do again
|
|
26
44
|
@done_once ||= Hash.new { |h, k| h[k] = {} }
|
|
27
|
-
if @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
28
|
-
return @done_once[key][options[:for]]
|
|
29
|
-
end
|
|
45
|
+
return @done_once[key][options[:for]] if @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
30
46
|
|
|
31
47
|
# Otherwise 'do'
|
|
32
48
|
yield.tap do
|
|
@@ -36,7 +52,12 @@ module Datadog
|
|
|
36
52
|
end
|
|
37
53
|
|
|
38
54
|
def done?(key, options = {})
|
|
55
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
56
|
+
Datadog.logger.warn('Datadog::Patcher#done? is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
57
|
+
end
|
|
58
|
+
|
|
39
59
|
return false unless instance_variable_defined?(:@done_once)
|
|
60
|
+
|
|
40
61
|
!@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
41
62
|
end
|
|
42
63
|
end
|
data/lib/ddtrace/pin.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'ddtrace/patcher'
|
|
2
|
+
require 'ddtrace/utils/only_once'
|
|
2
3
|
|
|
3
4
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
4
5
|
module Datadog
|
|
@@ -7,19 +8,15 @@ module Datadog
|
|
|
7
8
|
# This is useful if you wanted to, say, trace two different
|
|
8
9
|
# database clusters.
|
|
9
10
|
class Pin
|
|
11
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
12
|
+
|
|
10
13
|
def self.get_from(obj)
|
|
11
14
|
return nil unless obj.respond_to? :datadog_pin
|
|
15
|
+
|
|
12
16
|
obj.datadog_pin
|
|
13
17
|
end
|
|
14
18
|
|
|
15
|
-
attr_accessor :app
|
|
16
|
-
attr_accessor :app_type
|
|
17
|
-
attr_accessor :config
|
|
18
|
-
attr_accessor :name
|
|
19
|
-
attr_accessor :service_name
|
|
20
|
-
attr_accessor :tags
|
|
21
|
-
attr_reader :tracer
|
|
22
|
-
attr_accessor :writer
|
|
19
|
+
attr_accessor :app, :app_type, :config, :name, :service_name, :tags, :writer
|
|
23
20
|
|
|
24
21
|
alias service= service_name=
|
|
25
22
|
alias service service_name
|
|
@@ -42,6 +39,7 @@ module Datadog
|
|
|
42
39
|
|
|
43
40
|
def enabled?
|
|
44
41
|
return tracer.enabled if tracer
|
|
42
|
+
|
|
45
43
|
false
|
|
46
44
|
end
|
|
47
45
|
|
|
@@ -79,59 +77,8 @@ module Datadog
|
|
|
79
77
|
).freeze
|
|
80
78
|
|
|
81
79
|
def deprecation_warning
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
include Datadog::Patcher
|
|
86
|
-
|
|
87
|
-
def log_deprecation_warning(method_name)
|
|
88
|
-
# Only log each deprecation warning once (safeguard against log spam)
|
|
89
|
-
do_once(method_name) do
|
|
90
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Modification to Pin which logs deprecation warnings if accessed.
|
|
96
|
-
# Will be used by integrations which are phasing out the direct use of #datadog_pin.
|
|
97
|
-
module DeprecatedPin
|
|
98
|
-
include Datadog::Patcher
|
|
99
|
-
|
|
100
|
-
DEPRECATION_WARNING = %(
|
|
101
|
-
Use of Datadog::Pin is DEPRECATED.
|
|
102
|
-
Upgrade to the configuration API using the migration guide here:
|
|
103
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
104
|
-
|
|
105
|
-
# Raise a deprecation warning when #datadog_pin or #datadog_pin= is accessed.
|
|
106
|
-
def onto(obj)
|
|
107
|
-
obj.instance_exec(self) do |pin|
|
|
108
|
-
@datadog_deprecated_pin = pin
|
|
109
|
-
|
|
110
|
-
unless respond_to? :datadog_pin=
|
|
111
|
-
def datadog_pin=(pin)
|
|
112
|
-
@datadog_deprecated_pin.log_deprecation_warning('#datadog_pin=')
|
|
113
|
-
@datadog_pin = pin
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
unless respond_to? :datadog_pin
|
|
118
|
-
def datadog_pin
|
|
119
|
-
@datadog_deprecated_pin.log_deprecation_warning('#datadog_pin')
|
|
120
|
-
@datadog_pin
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Set instance variable to avoid deprecation warnings
|
|
125
|
-
@datadog_pin = @datadog_deprecated_pin
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
self
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def log_deprecation_warning(method_name)
|
|
132
|
-
# Only log each deprecation warning once (safeguard against log spam)
|
|
133
|
-
do_once(method_name) do
|
|
134
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
80
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
81
|
+
Datadog.logger.warn("Datadog::Pin.new:#{DEPRECATION_WARNING}")
|
|
135
82
|
end
|
|
136
83
|
end
|
|
137
84
|
end
|
|
@@ -10,7 +10,7 @@ module Datadog
|
|
|
10
10
|
@criteria = filter || block
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
#
|
|
13
|
+
# NOTE: this SpanFilter implementation only handles traces in which child spans appear
|
|
14
14
|
# after parent spans in the trace array. If in the future child spans can be before
|
|
15
15
|
# parent spans, then the code below will need to be updated.
|
|
16
16
|
def call(trace)
|
|
@@ -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
|
|
|
@@ -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,8 @@ 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
13
|
|
|
14
14
|
Descriptor = Struct.new(
|
|
15
15
|
:platform,
|
|
@@ -32,39 +32,37 @@ module Datadog
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def descriptor
|
|
35
|
-
@descriptor ||=
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
next if path.nil?
|
|
35
|
+
@descriptor ||= Descriptor.new.tap do |descriptor|
|
|
36
|
+
begin
|
|
37
|
+
Cgroup.descriptors.each do |cgroup_descriptor|
|
|
38
|
+
# Parse container data from cgroup descriptor
|
|
39
|
+
path = cgroup_descriptor.path
|
|
40
|
+
next if path.nil?
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
# Split path into parts
|
|
43
|
+
parts = path.split('/')
|
|
44
|
+
parts.shift # Remove leading empty part
|
|
45
|
+
next if parts.length < 2
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
# Read info from path
|
|
48
|
+
platform = parts[0]
|
|
49
|
+
container_id = parts[-1][CONTAINER_REGEX]
|
|
50
|
+
task_uid = parts[-2][POD_REGEX]
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
# If container ID wasn't found, ignore.
|
|
53
|
+
# Path might describe a non-container environment.
|
|
54
|
+
next if container_id.nil?
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
descriptor.platform = platform
|
|
57
|
+
descriptor.container_id = container_id
|
|
58
|
+
descriptor.task_uid = task_uid
|
|
60
59
|
|
|
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
|
-
)
|
|
60
|
+
break
|
|
67
61
|
end
|
|
62
|
+
rescue StandardError => e
|
|
63
|
+
Datadog.logger.error(
|
|
64
|
+
"Error while parsing container info. Cause: #{e.message} Location: #{e.backtrace.first}"
|
|
65
|
+
)
|
|
68
66
|
end
|
|
69
67
|
end
|
|
70
68
|
end
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
require 'securerandom'
|
|
2
2
|
require 'ddtrace/ext/runtime'
|
|
3
|
+
require 'ddtrace/utils/forking'
|
|
3
4
|
|
|
4
5
|
module Datadog
|
|
5
6
|
module Runtime
|
|
6
7
|
# For runtime identity
|
|
7
8
|
module Identity
|
|
9
|
+
extend Datadog::Utils::Forking
|
|
10
|
+
|
|
8
11
|
module_function
|
|
9
12
|
|
|
10
13
|
# Retrieves number of classes from runtime
|
|
11
14
|
def id
|
|
12
|
-
@pid ||= Process.pid
|
|
13
15
|
@id ||= SecureRandom.uuid
|
|
14
16
|
|
|
15
17
|
# Check if runtime has changed, e.g. forked.
|
|
16
|
-
|
|
17
|
-
@pid = Process.pid
|
|
18
|
-
@id = SecureRandom.uuid
|
|
19
|
-
end
|
|
18
|
+
after_fork! { @id = SecureRandom.uuid }
|
|
20
19
|
|
|
21
20
|
@id
|
|
22
21
|
end
|
|
@@ -25,10 +24,18 @@ module Datadog
|
|
|
25
24
|
Ext::Runtime::LANG
|
|
26
25
|
end
|
|
27
26
|
|
|
27
|
+
def lang_engine
|
|
28
|
+
Ext::Runtime::LANG_ENGINE
|
|
29
|
+
end
|
|
30
|
+
|
|
28
31
|
def lang_interpreter
|
|
29
32
|
Ext::Runtime::LANG_INTERPRETER
|
|
30
33
|
end
|
|
31
34
|
|
|
35
|
+
def lang_platform
|
|
36
|
+
Ext::Runtime::LANG_PLATFORM
|
|
37
|
+
end
|
|
38
|
+
|
|
32
39
|
def lang_version
|
|
33
40
|
Ext::Runtime::LANG_VERSION
|
|
34
41
|
end
|