ddtrace 0.41.0 → 0.52.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/.editorconfig +22 -0
- data/.gitignore +7 -1
- data/CHANGELOG.md +1496 -354
- data/CONTRIBUTING.md +3 -7
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +18 -38
- data/docs/DevelopmentGuide.md +55 -2
- data/docs/GettingStarted.md +338 -79
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
- data/lib/datadog/ci.rb +17 -0
- data/lib/datadog/ci/configuration/components.rb +31 -0
- data/lib/datadog/ci/configuration/settings.rb +37 -0
- data/lib/datadog/ci/context_flush.rb +29 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +98 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +74 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
- data/lib/datadog/ci/ext/app_types.rb +10 -0
- data/lib/datadog/ci/ext/environment.rb +443 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +35 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +77 -0
- data/lib/datadog/contrib.rb +69 -0
- data/lib/datadog/core/environment/cgroup.rb +52 -0
- data/lib/datadog/core/environment/class_count.rb +20 -0
- data/lib/datadog/core/environment/container.rb +91 -0
- data/lib/datadog/core/environment/ext.rb +27 -0
- data/lib/datadog/core/environment/gc.rb +19 -0
- data/lib/datadog/core/environment/identity.rb +51 -0
- data/lib/datadog/core/environment/socket.rb +17 -0
- data/lib/datadog/core/environment/thread_count.rb +19 -0
- data/lib/datadog/core/environment/variable_helpers.rb +42 -0
- data/lib/ddtrace.rb +22 -48
- data/lib/ddtrace/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +5 -0
- data/lib/ddtrace/auto_instrument_base.rb +7 -0
- data/lib/ddtrace/buffer.rb +233 -135
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration.rb +132 -24
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +231 -0
- data/lib/ddtrace/configuration/base.rb +9 -11
- data/lib/ddtrace/configuration/components.rb +167 -26
- data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
- data/lib/ddtrace/configuration/option.rb +1 -0
- data/lib/ddtrace/configuration/option_definition.rb +2 -3
- data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
- data/lib/ddtrace/configuration/option_set.rb +1 -0
- data/lib/ddtrace/configuration/options.rb +7 -9
- data/lib/ddtrace/configuration/pin_setup.rb +1 -0
- data/lib/ddtrace/configuration/settings.rb +132 -12
- data/lib/ddtrace/context.rb +41 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +17 -5
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_view/event.rb +4 -7
- data/lib/ddtrace/contrib/action_view/events.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +2 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
- data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_record/event.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +8 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +69 -21
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +105 -3
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +26 -4
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +4 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +8 -1
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +15 -3
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
- data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
- data/lib/ddtrace/contrib/analytics.rb +1 -0
- data/lib/ddtrace/contrib/auto_instrument.rb +49 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/aws/ext.rb +1 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +32 -1
- data/lib/ddtrace/contrib/aws/integration.rb +1 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +6 -1
- data/lib/ddtrace/contrib/aws/services.rb +4 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
- data/lib/ddtrace/contrib/configurable.rb +65 -38
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +21 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +39 -15
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +13 -11
- data/lib/ddtrace/contrib/ethon/ext.rb +2 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
- data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/excon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/integration.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +10 -7
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +90 -14
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +68 -32
- data/lib/ddtrace/contrib/grape/ext.rb +2 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
- data/lib/ddtrace/contrib/grape/integration.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/ext.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +9 -8
- data/lib/ddtrace/contrib/http/integration.rb +1 -0
- data/lib/ddtrace/contrib/http/patcher.rb +2 -1
- data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +18 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +148 -0
- data/lib/ddtrace/contrib/httpclient/integration.rb +44 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +39 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +17 -22
- data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
- data/lib/ddtrace/contrib/integration.rb +4 -3
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/event.rb +4 -3
- data/lib/ddtrace/contrib/kafka/events.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
- data/lib/ddtrace/contrib/lograge/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
- data/lib/ddtrace/contrib/patchable.rb +21 -9
- data/lib/ddtrace/contrib/patcher.rb +12 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/presto/ext.rb +1 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/presto/integration.rb +1 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +36 -0
- data/lib/ddtrace/contrib/qless/ext.rb +21 -0
- data/lib/ddtrace/contrib/qless/integration.rb +39 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +35 -0
- data/lib/ddtrace/contrib/qless/qless_job.rb +74 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +34 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/que/ext.rb +20 -19
- data/lib/ddtrace/contrib/que/integration.rb +1 -0
- data/lib/ddtrace/contrib/que/patcher.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +4 -2
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/racecar/event.rb +4 -2
- data/lib/ddtrace/contrib/racecar/events.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
- data/lib/ddtrace/contrib/rack/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/integration.rb +8 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +8 -12
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +7 -1
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +11 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +26 -1
- data/lib/ddtrace/contrib/rails/integration.rb +1 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +29 -8
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +5 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rake/ext.rb +1 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/rake/integration.rb +2 -1
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +15 -5
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +6 -0
- data/lib/ddtrace/contrib/redis/ext.rb +2 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +21 -3
- data/lib/ddtrace/contrib/redis/quantize.rb +29 -0
- data/lib/ddtrace/contrib/redis/tags.rb +6 -1
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
- data/lib/ddtrace/contrib/registerable.rb +5 -4
- data/lib/ddtrace/contrib/registry.rb +3 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +19 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +3 -2
- data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +26 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sequel/database.rb +2 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +9 -2
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +6 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
- data/lib/ddtrace/contrib/sinatra/tracer.rb +14 -6
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +13 -6
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
- data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +17 -21
- data/lib/ddtrace/contrib/status_code_matcher.rb +70 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
- data/lib/ddtrace/correlation.rb +3 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
- data/lib/ddtrace/diagnostics/health.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
- data/lib/ddtrace/encoding.rb +3 -0
- data/lib/ddtrace/error.rb +78 -8
- data/lib/ddtrace/event.rb +1 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/app_types.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +9 -2
- data/lib/ddtrace/ext/environment.rb +8 -0
- data/lib/ddtrace/ext/errors.rb +1 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -0
- data/lib/ddtrace/ext/git.rb +20 -0
- data/lib/ddtrace/ext/http.rb +2 -1
- data/lib/ddtrace/ext/integration.rb +1 -0
- data/lib/ddtrace/ext/manual_tracing.rb +1 -0
- data/lib/ddtrace/ext/metrics.rb +1 -0
- data/lib/ddtrace/ext/net.rb +1 -0
- data/lib/ddtrace/ext/priority.rb +1 -0
- data/lib/ddtrace/ext/profiling.rb +56 -0
- data/lib/ddtrace/ext/runtime.rb +2 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +9 -0
- data/lib/ddtrace/ext/transport.rb +3 -0
- data/lib/ddtrace/forced_tracing.rb +3 -0
- data/lib/ddtrace/logger.rb +2 -1
- data/lib/ddtrace/metrics.rb +84 -24
- data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
- data/lib/ddtrace/opentelemetry/span.rb +1 -0
- data/lib/ddtrace/opentracer.rb +21 -39
- data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/carrier.rb +1 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
- data/lib/ddtrace/opentracer/propagator.rb +1 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/scope.rb +1 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/span.rb +3 -6
- data/lib/ddtrace/opentracer/span_context.rb +1 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/tracer.rb +1 -0
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/profiling.rb +151 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
- data/lib/ddtrace/profiling/buffer.rb +42 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +257 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +38 -0
- data/lib/ddtrace/profiling/event.rb +14 -0
- data/lib/ddtrace/profiling/events/stack.rb +81 -0
- data/lib/ddtrace/profiling/exporter.rb +24 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +67 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +156 -0
- data/lib/ddtrace/profiling/ext/forking.rb +98 -0
- data/lib/ddtrace/profiling/flush.rb +44 -0
- data/lib/ddtrace/profiling/native_extension.rb +18 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +120 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +90 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +117 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
- data/lib/ddtrace/profiling/pprof/template.rb +119 -0
- data/lib/ddtrace/profiling/preload.rb +4 -0
- data/lib/ddtrace/profiling/profiler.rb +31 -0
- data/lib/ddtrace/profiling/recorder.rb +96 -0
- data/lib/ddtrace/profiling/scheduler.rb +134 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +82 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -0
- data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
- data/lib/ddtrace/profiling/transport/client.rb +15 -0
- data/lib/ddtrace/profiling/transport/http.rb +120 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +101 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/io.rb +31 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
- data/lib/ddtrace/profiling/transport/request.rb +16 -0
- data/lib/ddtrace/profiling/transport/response.rb +9 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +18 -4
- data/lib/ddtrace/propagation/http_propagator.rb +18 -2
- data/lib/ddtrace/quantization/hash.rb +1 -0
- data/lib/ddtrace/quantization/http.rb +4 -0
- data/lib/ddtrace/runtime/metrics.rb +21 -14
- data/lib/ddtrace/sampler.rb +2 -1
- data/lib/ddtrace/sampling.rb +1 -0
- data/lib/ddtrace/sampling/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +66 -16
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
- data/lib/ddtrace/span.rb +44 -19
- data/lib/ddtrace/sync_writer.rb +17 -15
- data/lib/ddtrace/tasks/exec.rb +47 -0
- data/lib/ddtrace/tasks/help.rb +15 -0
- data/lib/ddtrace/tracer.rb +68 -57
- data/lib/ddtrace/transport/http.rb +51 -38
- data/lib/ddtrace/transport/http/adapters/net.rb +28 -8
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -4
- data/lib/ddtrace/transport/http/api.rb +1 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +1 -0
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/builder.rb +8 -1
- data/lib/ddtrace/transport/http/client.rb +3 -1
- data/lib/ddtrace/transport/http/env.rb +9 -0
- data/lib/ddtrace/transport/http/response.rb +1 -0
- data/lib/ddtrace/transport/http/statistics.rb +3 -2
- data/lib/ddtrace/transport/http/traces.rb +6 -6
- data/lib/ddtrace/transport/io.rb +2 -1
- data/lib/ddtrace/transport/io/client.rb +17 -9
- data/lib/ddtrace/transport/io/response.rb +2 -3
- data/lib/ddtrace/transport/io/traces.rb +10 -1
- data/lib/ddtrace/transport/parcel.rb +7 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/statistics.rb +1 -0
- data/lib/ddtrace/transport/traces.rb +21 -3
- data/lib/ddtrace/utils.rb +23 -12
- data/lib/ddtrace/utils/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +53 -0
- data/lib/ddtrace/utils/object_set.rb +40 -0
- data/lib/ddtrace/utils/only_once.rb +41 -0
- data/lib/ddtrace/utils/sequence.rb +18 -0
- data/lib/ddtrace/utils/string_table.rb +46 -0
- data/lib/ddtrace/utils/time.rb +34 -2
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +15 -2
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/loop.rb +32 -5
- data/lib/ddtrace/workers/polling.rb +13 -5
- data/lib/ddtrace/workers/queue.rb +3 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/writer.rb +33 -8
- metadata +149 -388
- data/.circleci/config.yml +0 -548
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
- data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
- data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
- data/.dockerignore +0 -1
- data/.env +0 -26
- data/.github/CODEOWNERS +0 -1
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -38
- data/Appraisals +0 -1071
- data/Gemfile +0 -7
- data/Rakefile +0 -768
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -370
- 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/environment.rb +0 -41
- data/lib/ddtrace/monkey.rb +0 -58
- data/lib/ddtrace/runtime/cgroup.rb +0 -44
- data/lib/ddtrace/runtime/class_count.rb +0 -17
- data/lib/ddtrace/runtime/container.rb +0 -73
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -41
- data/lib/ddtrace/runtime/object_space.rb +0 -19
- data/lib/ddtrace/runtime/socket.rb +0 -14
- data/lib/ddtrace/runtime/thread_count.rb +0 -16
- data/tasks/release_gem.rake +0 -28
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/span'
|
|
2
3
|
require 'ddtrace/opentelemetry/span'
|
|
3
4
|
|
|
@@ -6,7 +7,7 @@ module Datadog
|
|
|
6
7
|
# Defines extensions to ddtrace for OpenTelemetry support
|
|
7
8
|
module Extensions
|
|
8
9
|
def self.extended(base)
|
|
9
|
-
Datadog::Span.
|
|
10
|
+
Datadog::Span.prepend(OpenTelemetry::Span)
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
13
|
end
|
data/lib/ddtrace/opentracer.rb
CHANGED
|
@@ -1,40 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
# typed: strict
|
|
2
|
+
require 'opentracing'
|
|
3
|
+
require 'opentracing/carrier'
|
|
4
|
+
require 'ddtrace'
|
|
5
|
+
require 'ddtrace/opentracer/carrier'
|
|
6
|
+
require 'ddtrace/opentracer/tracer'
|
|
7
|
+
require 'ddtrace/opentracer/span'
|
|
8
|
+
require 'ddtrace/opentracer/span_context'
|
|
9
|
+
require 'ddtrace/opentracer/span_context_factory'
|
|
10
|
+
require 'ddtrace/opentracer/scope'
|
|
11
|
+
require 'ddtrace/opentracer/scope_manager'
|
|
12
|
+
require 'ddtrace/opentracer/thread_local_scope'
|
|
13
|
+
require 'ddtrace/opentracer/thread_local_scope_manager'
|
|
14
|
+
require 'ddtrace/opentracer/distributed_headers'
|
|
15
|
+
require 'ddtrace/opentracer/propagator'
|
|
16
|
+
require 'ddtrace/opentracer/text_map_propagator'
|
|
17
|
+
require 'ddtrace/opentracer/binary_propagator'
|
|
18
|
+
require 'ddtrace/opentracer/rack_propagator'
|
|
19
|
+
require 'ddtrace/opentracer/global_tracer'
|
|
5
20
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def load_opentracer
|
|
11
|
-
require 'opentracing'
|
|
12
|
-
require 'opentracing/carrier'
|
|
13
|
-
require 'ddtrace'
|
|
14
|
-
require 'ddtrace/opentracer/carrier'
|
|
15
|
-
require 'ddtrace/opentracer/tracer'
|
|
16
|
-
require 'ddtrace/opentracer/span'
|
|
17
|
-
require 'ddtrace/opentracer/span_context'
|
|
18
|
-
require 'ddtrace/opentracer/span_context_factory'
|
|
19
|
-
require 'ddtrace/opentracer/scope'
|
|
20
|
-
require 'ddtrace/opentracer/scope_manager'
|
|
21
|
-
require 'ddtrace/opentracer/thread_local_scope'
|
|
22
|
-
require 'ddtrace/opentracer/thread_local_scope_manager'
|
|
23
|
-
require 'ddtrace/opentracer/distributed_headers'
|
|
24
|
-
require 'ddtrace/opentracer/propagator'
|
|
25
|
-
require 'ddtrace/opentracer/text_map_propagator'
|
|
26
|
-
require 'ddtrace/opentracer/binary_propagator'
|
|
27
|
-
require 'ddtrace/opentracer/rack_propagator'
|
|
28
|
-
require 'ddtrace/opentracer/global_tracer'
|
|
29
|
-
|
|
30
|
-
# Modify the OpenTracing module functions
|
|
31
|
-
OpenTracing.module_eval do
|
|
32
|
-
class << self
|
|
33
|
-
prepend Datadog::OpenTracer::GlobalTracer
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
load_opentracer if supported?
|
|
39
|
-
end
|
|
40
|
-
end
|
|
21
|
+
# Modify the OpenTracing module functions
|
|
22
|
+
::OpenTracing.singleton_class.prepend(Datadog::OpenTracer::GlobalTracer)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/span'
|
|
2
3
|
require 'ddtrace/ext/distributed'
|
|
3
4
|
|
|
@@ -29,8 +30,10 @@ module Datadog
|
|
|
29
30
|
# It's important to make a difference between no header,
|
|
30
31
|
# and a header defined to zero.
|
|
31
32
|
return unless hdr
|
|
33
|
+
|
|
32
34
|
value = hdr.to_i
|
|
33
35
|
return if value < 0
|
|
36
|
+
|
|
34
37
|
value
|
|
35
38
|
end
|
|
36
39
|
|
|
@@ -45,6 +48,7 @@ module Datadog
|
|
|
45
48
|
def id(header)
|
|
46
49
|
value = @carrier[header].to_i
|
|
47
50
|
return if value.zero? || value >= Datadog::Span::EXTERNAL_MAX_ID
|
|
51
|
+
|
|
48
52
|
value < 0 ? value + 0x1_0000_0000_0000_0000 : value
|
|
49
53
|
end
|
|
50
54
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module OpenTracer
|
|
3
4
|
# OpenTracing adapter for Datadog::Span
|
|
@@ -73,9 +74,7 @@ module Datadog
|
|
|
73
74
|
super # Log deprecation warning
|
|
74
75
|
|
|
75
76
|
# If the fields specify an error
|
|
76
|
-
if fields.key?(:'error.object')
|
|
77
|
-
datadog_span.set_error(fields[:'error.object'])
|
|
78
|
-
end
|
|
77
|
+
datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
|
|
79
78
|
end
|
|
80
79
|
|
|
81
80
|
# Add a log entry to this span
|
|
@@ -83,9 +82,7 @@ module Datadog
|
|
|
83
82
|
# @param fields [Hash] Additional information to log
|
|
84
83
|
def log_kv(timestamp: Time.now, **fields)
|
|
85
84
|
# If the fields specify an error
|
|
86
|
-
if fields.key?(:'error.object')
|
|
87
|
-
datadog_span.set_error(fields[:'error.object'])
|
|
88
|
-
end
|
|
85
|
+
datadog_span.set_error(fields[:'error.object']) if fields.key?(:'error.object')
|
|
89
86
|
end
|
|
90
87
|
|
|
91
88
|
# Finish the {Span}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module OpenTracer
|
|
3
4
|
# OpenTracing adapter for thread local scopes
|
|
@@ -22,6 +23,7 @@ module Datadog
|
|
|
22
23
|
# undefined behavior.
|
|
23
24
|
def close
|
|
24
25
|
return unless equal?(manager.active)
|
|
26
|
+
|
|
25
27
|
span.finish if finish_on_close
|
|
26
28
|
manager.send(:set_scope, @previous_scope)
|
|
27
29
|
end
|
data/lib/ddtrace/patcher.rb
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
require 'ddtrace/utils/only_once'
|
|
3
|
+
|
|
1
4
|
module Datadog
|
|
2
|
-
#
|
|
5
|
+
# Deprecated: This module should no longer be included. It's only being kept around for backwards compatibility
|
|
6
|
+
# concerns regarding customer usage.
|
|
3
7
|
module Patcher
|
|
8
|
+
INCLUDED_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
9
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
10
|
+
|
|
4
11
|
def self.included(base)
|
|
5
|
-
|
|
6
|
-
|
|
12
|
+
INCLUDED_WARN_ONLY_ONCE.run do
|
|
13
|
+
Datadog.logger.warn(
|
|
14
|
+
'Including Datadog::Patcher is deprecated. ' \
|
|
15
|
+
'For the #do_once behavior, use Datadog::Utils::OnlyOnce instead. ' \
|
|
16
|
+
'For the #without_warnings behavior, use Datadog::Patcher.without_warnings { ... } as a module function.'
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
base.extend(CommonMethods)
|
|
21
|
+
base.include(CommonMethods)
|
|
7
22
|
end
|
|
8
23
|
|
|
9
24
|
# Defines some common methods for patching, that can be used
|
|
@@ -22,11 +37,13 @@ module Datadog
|
|
|
22
37
|
end
|
|
23
38
|
|
|
24
39
|
def do_once(key = nil, options = {})
|
|
40
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
41
|
+
Datadog.logger.warn('Datadog::Patcher#do_once is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
42
|
+
end
|
|
43
|
+
|
|
25
44
|
# If already done, don't do again
|
|
26
45
|
@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
|
|
46
|
+
return @done_once[key][options[:for]] if @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
30
47
|
|
|
31
48
|
# Otherwise 'do'
|
|
32
49
|
yield.tap do
|
|
@@ -36,7 +53,12 @@ module Datadog
|
|
|
36
53
|
end
|
|
37
54
|
|
|
38
55
|
def done?(key, options = {})
|
|
56
|
+
DO_ONCE_USAGE_WARN_ONLY_ONCE.run do
|
|
57
|
+
Datadog.logger.warn('Datadog::Patcher#done? is deprecated. Use Datadog::Utils::OnlyOnce instead.')
|
|
58
|
+
end
|
|
59
|
+
|
|
39
60
|
return false unless instance_variable_defined?(:@done_once)
|
|
61
|
+
|
|
40
62
|
!@done_once.nil? && @done_once.key?(key) && @done_once[key].key?(options[:for])
|
|
41
63
|
end
|
|
42
64
|
end
|
data/lib/ddtrace/pin.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/patcher'
|
|
3
|
+
require 'ddtrace/utils/only_once'
|
|
2
4
|
|
|
3
5
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
4
6
|
module Datadog
|
|
@@ -7,19 +9,15 @@ module Datadog
|
|
|
7
9
|
# This is useful if you wanted to, say, trace two different
|
|
8
10
|
# database clusters.
|
|
9
11
|
class Pin
|
|
12
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
13
|
+
|
|
10
14
|
def self.get_from(obj)
|
|
11
15
|
return nil unless obj.respond_to? :datadog_pin
|
|
16
|
+
|
|
12
17
|
obj.datadog_pin
|
|
13
18
|
end
|
|
14
19
|
|
|
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
|
|
20
|
+
attr_accessor :app, :app_type, :config, :name, :service_name, :tags, :writer
|
|
23
21
|
|
|
24
22
|
alias service= service_name=
|
|
25
23
|
alias service service_name
|
|
@@ -42,6 +40,7 @@ module Datadog
|
|
|
42
40
|
|
|
43
41
|
def enabled?
|
|
44
42
|
return tracer.enabled if tracer
|
|
43
|
+
|
|
45
44
|
false
|
|
46
45
|
end
|
|
47
46
|
|
|
@@ -79,59 +78,8 @@ module Datadog
|
|
|
79
78
|
).freeze
|
|
80
79
|
|
|
81
80
|
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}")
|
|
81
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
82
|
+
Datadog.logger.warn("Datadog::Pin.new:#{DEPRECATION_WARNING}")
|
|
135
83
|
end
|
|
136
84
|
end
|
|
137
85
|
end
|
data/lib/ddtrace/pipeline.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module Pipeline
|
|
3
4
|
# SpanFilter implements a processor that filters entire span subtrees
|
|
@@ -10,7 +11,7 @@ module Datadog
|
|
|
10
11
|
@criteria = filter || block
|
|
11
12
|
end
|
|
12
13
|
|
|
13
|
-
#
|
|
14
|
+
# NOTE: this SpanFilter implementation only handles traces in which child spans appear
|
|
14
15
|
# after parent spans in the trace array. If in the future child spans can be before
|
|
15
16
|
# parent spans, then the code below will need to be updated.
|
|
16
17
|
def call(trace)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'datadog/core/environment/variable_helpers'
|
|
3
|
+
require 'ddtrace/utils/only_once'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
# Contains profiler for generating stack profiles, etc.
|
|
7
|
+
module Profiling # rubocop:disable Metrics/ModuleLength
|
|
8
|
+
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
9
|
+
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
10
|
+
|
|
11
|
+
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
12
|
+
private_constant :SKIPPED_NATIVE_EXTENSION_ONLY_ONCE
|
|
13
|
+
|
|
14
|
+
def self.supported?
|
|
15
|
+
unsupported_reason.nil?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.unsupported_reason
|
|
19
|
+
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
|
|
20
|
+
# first that they can't use this on JRuby before telling them that they are missing protobuf
|
|
21
|
+
|
|
22
|
+
ruby_engine_unsupported? ||
|
|
23
|
+
native_library_failed_to_load? ||
|
|
24
|
+
protobuf_gem_unavailable? ||
|
|
25
|
+
protobuf_version_unsupported? ||
|
|
26
|
+
protobuf_failed_to_load?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private_class_method def self.ruby_engine_unsupported?
|
|
30
|
+
'JRuby is not supported' if RUBY_ENGINE == 'jruby'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private_class_method def self.protobuf_gem_unavailable?
|
|
34
|
+
# NOTE: On environments where protobuf is already loaded, we skip the check. This allows us to support environments
|
|
35
|
+
# where no Gem.loaded_version is NOT available but customers are able to load protobuf; see for instance
|
|
36
|
+
# https://github.com/teamcapybara/capybara/commit/caf3bcd7664f4f2691d0ca9ef3be9a2a954fecfb
|
|
37
|
+
if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].nil?
|
|
38
|
+
"Missing google-protobuf dependency; please add `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private_class_method def self.protobuf_version_unsupported?
|
|
43
|
+
# See above for why we skip the check when protobuf is already loaded; note that when protobuf was already loaded
|
|
44
|
+
# we skip the version check to avoid the call to Gem.loaded_specs. Unfortunately, protobuf does not seem to
|
|
45
|
+
# expose the gem version constant elsewhere, so in that setup we are not able to check the version.
|
|
46
|
+
if !defined?(::Google::Protobuf) && Gem.loaded_specs['google-protobuf'].version < GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
47
|
+
'Your google-protobuf is too old; ensure that you have google-protobuf >= 3.0 by ' \
|
|
48
|
+
"adding `gem 'google-protobuf', '~> 3.0'` to your Gemfile or gems.rb file"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private_class_method def self.protobuf_failed_to_load?
|
|
53
|
+
unless protobuf_loaded_successfully?
|
|
54
|
+
'There was an error loading the google-protobuf library; see previous warning message for details'
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# The `google-protobuf` gem depends on a native component, and its creators helpfully tried to provide precompiled
|
|
59
|
+
# versions of this extension on rubygems.org.
|
|
60
|
+
#
|
|
61
|
+
# Unfortunately, for a long time, the supported Ruby versions metadata on these precompiled versions of the extension
|
|
62
|
+
# was not correctly set. (This is fixed in newer versions -- but not all Ruby versions we want to support can use
|
|
63
|
+
# these.)
|
|
64
|
+
#
|
|
65
|
+
# Thus, the gem can still be installed, but can be in a broken state. To avoid breaking customer applications, we
|
|
66
|
+
# use this helper to load it and gracefully handle failures.
|
|
67
|
+
private_class_method def self.protobuf_loaded_successfully?
|
|
68
|
+
return @protobuf_loaded if defined?(@protobuf_loaded)
|
|
69
|
+
|
|
70
|
+
begin
|
|
71
|
+
require 'google/protobuf'
|
|
72
|
+
@protobuf_loaded = true
|
|
73
|
+
rescue LoadError => e
|
|
74
|
+
# NOTE: We use Kernel#warn here because this code gets run BEFORE Datadog.logger is actually set up.
|
|
75
|
+
# In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
|
|
76
|
+
Kernel.warn(
|
|
77
|
+
'[DDTRACE] Error while loading google-protobuf gem. ' \
|
|
78
|
+
"Cause: '#{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
79
|
+
'This can happen when google-protobuf is missing its native components. ' \
|
|
80
|
+
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
81
|
+
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
82
|
+
'If the error persists, please contact support via <https://docs.datadoghq.com/help/> or ' \
|
|
83
|
+
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
84
|
+
)
|
|
85
|
+
@protobuf_loaded = false
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private_class_method def self.native_library_failed_to_load?
|
|
90
|
+
success, exception = try_loading_native_library
|
|
91
|
+
|
|
92
|
+
unless success
|
|
93
|
+
if exception
|
|
94
|
+
'There was an error loading the profiling native extension due to ' \
|
|
95
|
+
"'#{exception.message}' at '#{exception.backtrace.first}'"
|
|
96
|
+
else
|
|
97
|
+
'The profiling native extension did not load correctly. ' \
|
|
98
|
+
'If the error persists, please contact support via <https://docs.datadoghq.com/help/> or ' \
|
|
99
|
+
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private_class_method def self.try_loading_native_library
|
|
105
|
+
if Datadog::Core::Environment::VariableHelpers.env_to_bool('DD_PROFILING_NO_EXTENSION', false)
|
|
106
|
+
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE.run do
|
|
107
|
+
Kernel.warn(
|
|
108
|
+
'[DDTRACE] Skipped loading of profiling native extension due to DD_PROFILING_NO_EXTENSION environment ' \
|
|
109
|
+
'variable being set. ' \
|
|
110
|
+
'This option is experimental and will lead to the profiler not working in future releases. ' \
|
|
111
|
+
'If you needed to use this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>.'
|
|
112
|
+
)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
return [true, nil]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
begin
|
|
119
|
+
require "ddtrace_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}"
|
|
120
|
+
success =
|
|
121
|
+
defined?(Datadog::Profiling::NativeExtension) && Datadog::Profiling::NativeExtension.send(:native_working?)
|
|
122
|
+
[success, nil]
|
|
123
|
+
rescue StandardError, LoadError => e
|
|
124
|
+
[false, e]
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
private_class_method def self.load_profiling
|
|
129
|
+
return false unless supported?
|
|
130
|
+
|
|
131
|
+
require 'ddtrace/profiling/ext/cpu'
|
|
132
|
+
require 'ddtrace/profiling/ext/forking'
|
|
133
|
+
|
|
134
|
+
require 'ddtrace/profiling/collectors/stack'
|
|
135
|
+
require 'ddtrace/profiling/exporter'
|
|
136
|
+
require 'ddtrace/profiling/recorder'
|
|
137
|
+
require 'ddtrace/profiling/scheduler'
|
|
138
|
+
require 'ddtrace/profiling/tasks/setup'
|
|
139
|
+
require 'ddtrace/profiling/transport/io'
|
|
140
|
+
require 'ddtrace/profiling/transport/http'
|
|
141
|
+
require 'ddtrace/profiling/profiler'
|
|
142
|
+
require 'ddtrace/profiling/native_extension'
|
|
143
|
+
require 'ddtrace/profiling/trace_identifiers/helper'
|
|
144
|
+
require 'ddtrace/profiling/pprof/pprof_pb'
|
|
145
|
+
|
|
146
|
+
true
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
load_profiling if supported?
|
|
150
|
+
end
|
|
151
|
+
end
|