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,52 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Ext
|
|
3
|
+
module Profiling
|
|
4
|
+
ENV_ENABLED = 'DD_PROFILING_ENABLED'.freeze
|
|
5
|
+
ENV_UPLOAD_TIMEOUT = 'DD_PROFILING_UPLOAD_TIMEOUT'.freeze
|
|
6
|
+
ENV_MAX_FRAMES = 'DD_PROFILING_MAX_FRAMES'.freeze
|
|
7
|
+
|
|
8
|
+
module Pprof
|
|
9
|
+
LABEL_KEY_SPAN_ID = 'span id'.freeze
|
|
10
|
+
LABEL_KEY_THREAD_ID = 'thread id'.freeze
|
|
11
|
+
LABEL_KEY_TRACE_ID = 'trace id'.freeze
|
|
12
|
+
SAMPLE_VALUE_NO_VALUE = 0
|
|
13
|
+
VALUE_TYPE_CPU = 'cpu-time'.freeze
|
|
14
|
+
VALUE_TYPE_WALL = 'wall-time'.freeze
|
|
15
|
+
VALUE_UNIT_NANOSECONDS = 'nanoseconds'.freeze
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module Transport
|
|
19
|
+
module HTTP
|
|
20
|
+
URI_TEMPLATE_DD_API = 'https://intake.profile.%s/'.freeze
|
|
21
|
+
|
|
22
|
+
FORM_FIELD_DATA = 'data[0]'.freeze
|
|
23
|
+
FORM_FIELD_FORMAT = 'format'.freeze
|
|
24
|
+
FORM_FIELD_FORMAT_PPROF = 'pprof'.freeze
|
|
25
|
+
FORM_FIELD_RECORDING_END = 'recording-end'.freeze
|
|
26
|
+
FORM_FIELD_RECORDING_START = 'recording-start'.freeze
|
|
27
|
+
FORM_FIELD_RUNTIME = 'runtime'.freeze
|
|
28
|
+
FORM_FIELD_RUNTIME_ID = 'runtime-id'.freeze
|
|
29
|
+
FORM_FIELD_TAG_ENV = 'env'.freeze
|
|
30
|
+
FORM_FIELD_TAG_HOST = 'host'.freeze
|
|
31
|
+
FORM_FIELD_TAG_LANGUAGE = 'language'.freeze
|
|
32
|
+
FORM_FIELD_TAG_PROFILER_VERSION = 'profiler_version'.freeze
|
|
33
|
+
FORM_FIELD_TAG_RUNTIME = 'runtime'.freeze
|
|
34
|
+
FORM_FIELD_TAG_RUNTIME_ENGINE = 'runtime_engine'.freeze
|
|
35
|
+
FORM_FIELD_TAG_RUNTIME_ID = 'runtime-id'.freeze
|
|
36
|
+
FORM_FIELD_TAG_RUNTIME_PLATFORM = 'runtime_platform'.freeze
|
|
37
|
+
FORM_FIELD_TAG_RUNTIME_VERSION = 'runtime_version'.freeze
|
|
38
|
+
FORM_FIELD_TAG_SERVICE = 'service'.freeze
|
|
39
|
+
FORM_FIELD_TAG_VERSION = 'version'.freeze
|
|
40
|
+
FORM_FIELD_TAGS = 'tags'.freeze
|
|
41
|
+
FORM_FIELD_TYPES = 'types[0]'.freeze
|
|
42
|
+
FORM_FIELD_TYPES_AUTO = 'auto'.freeze
|
|
43
|
+
|
|
44
|
+
HEADER_CONTENT_TYPE = 'Content-Type'.freeze
|
|
45
|
+
HEADER_CONTENT_TYPE_OCTET_STREAM = 'application/octet-stream'.freeze
|
|
46
|
+
|
|
47
|
+
PPROF_DEFAULT_FILENAME = 'profile.pb.gz'.freeze
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/ddtrace/ext/runtime.rb
CHANGED
|
@@ -5,7 +5,9 @@ module Datadog
|
|
|
5
5
|
module Runtime
|
|
6
6
|
# Identity
|
|
7
7
|
LANG = 'ruby'.freeze
|
|
8
|
-
|
|
8
|
+
LANG_ENGINE = RUBY_ENGINE
|
|
9
|
+
LANG_INTERPRETER = "#{RUBY_ENGINE}-#{RUBY_PLATFORM}".freeze
|
|
10
|
+
LANG_PLATFORM = RUBY_PLATFORM
|
|
9
11
|
LANG_VERSION = RUBY_VERSION
|
|
10
12
|
RUBY_ENGINE = ::RUBY_ENGINE # e.g. 'ruby', 'jruby', 'truffleruby'
|
|
11
13
|
TRACER_VERSION = Datadog::VERSION::STRING
|
|
@@ -8,6 +8,7 @@ module Datadog
|
|
|
8
8
|
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
|
|
9
9
|
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'.freeze
|
|
10
10
|
HEADER_CONTAINER_ID = 'Datadog-Container-ID'.freeze
|
|
11
|
+
HEADER_DD_API_KEY = 'DD-API-KEY'.freeze
|
|
11
12
|
HEADER_META_LANG = 'Datadog-Meta-Lang'.freeze
|
|
12
13
|
HEADER_META_LANG_VERSION = 'Datadog-Meta-Lang-Version'.freeze
|
|
13
14
|
HEADER_META_LANG_INTERPRETER = 'Datadog-Meta-Lang-Interpreter'.freeze
|
|
@@ -7,11 +7,13 @@ module Datadog
|
|
|
7
7
|
class << self
|
|
8
8
|
def keep(span)
|
|
9
9
|
return if span.nil? || span.context.nil?
|
|
10
|
+
|
|
10
11
|
span.context.sampling_priority = Datadog::Ext::Priority::USER_KEEP
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def drop(span)
|
|
14
15
|
return if span.nil? || span.context.nil?
|
|
16
|
+
|
|
15
17
|
span.context.sampling_priority = Datadog::Ext::Priority::USER_REJECT
|
|
16
18
|
end
|
|
17
19
|
end
|
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?
|
|
@@ -116,6 +120,10 @@ module Datadog
|
|
|
116
120
|
metrics.each { |m| send(m.type, *[m.name, m.value, m.options].compact) }
|
|
117
121
|
end
|
|
118
122
|
|
|
123
|
+
def close
|
|
124
|
+
@statsd.close if @statsd && @statsd.respond_to?(:close)
|
|
125
|
+
end
|
|
126
|
+
|
|
119
127
|
Metric = Struct.new(:type, :name, :value, :options) do
|
|
120
128
|
def initialize(*args)
|
|
121
129
|
super
|
|
@@ -186,7 +194,7 @@ module Datadog
|
|
|
186
194
|
attr_accessor :logger
|
|
187
195
|
|
|
188
196
|
def initialize(logger = nil)
|
|
189
|
-
@logger = logger || Logger.new(
|
|
197
|
+
@logger = logger || Logger.new($stdout).tap do |l|
|
|
190
198
|
l.level = Logger::INFO
|
|
191
199
|
l.progname = nil
|
|
192
200
|
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)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
# Contains profiler for generating stack profiles, etc.
|
|
3
|
+
module Profiling
|
|
4
|
+
module_function
|
|
5
|
+
|
|
6
|
+
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
7
|
+
|
|
8
|
+
def supported?
|
|
9
|
+
google_protobuf_supported?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def native_cpu_time_supported?
|
|
13
|
+
require 'ddtrace/profiling/ext/cpu'
|
|
14
|
+
Ext::CPU.supported?
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def google_protobuf_supported?
|
|
18
|
+
RUBY_PLATFORM != 'java' \
|
|
19
|
+
&& !Gem.loaded_specs['google-protobuf'].nil? \
|
|
20
|
+
&& Gem.loaded_specs['google-protobuf'].version >= GOOGLE_PROTOBUF_MINIMUM_VERSION \
|
|
21
|
+
&& !defined?(@failed_to_load_protobuf)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def load_profiling
|
|
25
|
+
require 'ddtrace/profiling/ext/cpu'
|
|
26
|
+
require 'ddtrace/profiling/ext/forking'
|
|
27
|
+
|
|
28
|
+
require 'ddtrace/profiling/collectors/stack'
|
|
29
|
+
require 'ddtrace/profiling/exporter'
|
|
30
|
+
require 'ddtrace/profiling/recorder'
|
|
31
|
+
require 'ddtrace/profiling/scheduler'
|
|
32
|
+
require 'ddtrace/profiling/tasks/setup'
|
|
33
|
+
require 'ddtrace/profiling/transport/io'
|
|
34
|
+
require 'ddtrace/profiling/transport/http'
|
|
35
|
+
require 'ddtrace/profiling/profiler'
|
|
36
|
+
|
|
37
|
+
begin
|
|
38
|
+
require 'ddtrace/profiling/pprof/pprof_pb' if google_protobuf_supported?
|
|
39
|
+
rescue LoadError => e
|
|
40
|
+
@failed_to_load_protobuf = true
|
|
41
|
+
Kernel.warn(
|
|
42
|
+
"[DDTRACE] Error while loading google-protobuf gem. Cause: '#{e.message}' Location: '#{e.backtrace.first}'. " \
|
|
43
|
+
'This can happen when google-protobuf is missing its native components. ' \
|
|
44
|
+
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
45
|
+
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
46
|
+
'If the error persists, please contact support via <https://docs.datadoghq.com/help/> or ' \
|
|
47
|
+
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
load_profiling if supported?
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Profiling
|
|
3
|
+
# Entity class used to represent an entry in a stack trace.
|
|
4
|
+
# Its fields are a simplified struct version of `Thread::Backtrace::Location`.
|
|
5
|
+
class BacktraceLocation
|
|
6
|
+
attr_reader \
|
|
7
|
+
:base_label,
|
|
8
|
+
:lineno,
|
|
9
|
+
:path,
|
|
10
|
+
:hash
|
|
11
|
+
|
|
12
|
+
def initialize(
|
|
13
|
+
base_label,
|
|
14
|
+
lineno,
|
|
15
|
+
path
|
|
16
|
+
)
|
|
17
|
+
@base_label = base_label
|
|
18
|
+
@lineno = lineno
|
|
19
|
+
@path = path
|
|
20
|
+
@hash = [base_label, lineno, path].hash
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def ==(other)
|
|
24
|
+
hash == other.hash
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def eql?(other)
|
|
28
|
+
hash == other.hash
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|