ddtrace 0.45.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 +406 -1
- data/CONTRIBUTING.md +1 -5
- data/LICENSE-3rdparty.csv +2 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +19 -38
- data/docs/DevelopmentGuide.md +43 -0
- data/docs/GettingStarted.md +164 -76
- 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/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/ci.rb +17 -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/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +2 -0
- data/lib/ddtrace/auto_instrument_base.rb +1 -0
- data/lib/ddtrace/buffer.rb +10 -8
- data/lib/ddtrace/chunker.rb +1 -0
- 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 +128 -10
- data/lib/ddtrace/configuration.rb +118 -26
- data/lib/ddtrace/context.rb +23 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +1 -1
- 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/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/events.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 +1 -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 +1 -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 -3
- 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/events.rb +1 -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 +1 -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/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.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/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +5 -3
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +8 -7
- 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 +1 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +5 -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 +4 -3
- 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 +30 -0
- 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 -0
- data/lib/ddtrace/contrib/aws/services.rb +3 -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 -40
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -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 +1 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -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 +1 -1
- 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 +7 -6
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -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 +3 -6
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +64 -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 +1 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +34 -31
- data/lib/ddtrace/contrib/grape/ext.rb +1 -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/client.rb +1 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- 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 +7 -6
- 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 +1 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +16 -20
- data/lib/ddtrace/contrib/httpclient/integration.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +8 -4
- 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 +16 -21
- 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 +3 -2
- 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/events.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/{cucumber → lograge}/patcher.rb +7 -4
- 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 +3 -2
- 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 +1 -0
- data/lib/ddtrace/contrib/qless/ext.rb +1 -0
- data/lib/ddtrace/contrib/qless/integration.rb +1 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +5 -5
- data/lib/ddtrace/contrib/qless/qless_job.rb +2 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +2 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -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 +2 -1
- 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/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/events.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 +1 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +7 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -0
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +1 -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 +18 -11
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +1 -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 +1 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +12 -4
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +1 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +2 -0
- data/lib/ddtrace/contrib/redis/tags.rb +1 -0
- 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 +18 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +2 -1
- data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +25 -1
- 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 +2 -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 +8 -4
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -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 +3 -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 +11 -4
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -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 +3 -4
- data/lib/ddtrace/contrib/status_code_matcher.rb +6 -3
- 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 -1
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +2 -1
- 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 +10 -1
- 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 +1 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +3 -18
- 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/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/opentracer.rb +21 -39
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/pipeline.rb +1 -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/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/api.rb +44 -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/http.rb +120 -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/io.rb +31 -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/profiling.rb +151 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
- data/lib/ddtrace/propagation/http_propagator.rb +3 -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/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +1 -0
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
- data/lib/ddtrace/sampling.rb +1 -0
- 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 +48 -50
- 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/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/api.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/http.rb +51 -38
- 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/io.rb +2 -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/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +2 -1
- 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/utils.rb +14 -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/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/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -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/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 +15 -1
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +14 -7
- data/lib/ddtrace.rb +20 -56
- metadata +130 -446
- data/.circleci/config.yml +0 -566
- 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-3.0.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/.github/workflows/add-milestone-to-pull-requests.yml +0 -42
- data/.github/workflows/create-next-milestone.yml +0 -20
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -41
- data/Appraisals +0 -1350
- data/Gemfile +0 -9
- data/Rakefile +0 -993
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -400
- 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/augmentation.rb +0 -13
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -19
- data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -104
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
- data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/rspec/example.rb +0 -61
- data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -19
- data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
- data/lib/ddtrace/contrib/rspec/patcher.rb +0 -25
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/ext/ci.rb +0 -297
- 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 -40
- 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
|
@@ -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
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/context'
|
|
2
3
|
require 'ddtrace/ext/distributed'
|
|
3
4
|
|
|
@@ -19,6 +20,7 @@ module Datadog
|
|
|
19
20
|
def self.extract(metadata)
|
|
20
21
|
metadata = Carrier.new(metadata)
|
|
21
22
|
return Datadog::Context.new unless metadata.valid?
|
|
23
|
+
|
|
22
24
|
Datadog::Context.new(trace_id: metadata.trace_id,
|
|
23
25
|
span_id: metadata.parent_id,
|
|
24
26
|
sampling_priority: metadata.sampling_priority,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/configuration'
|
|
2
3
|
require 'ddtrace/context'
|
|
3
4
|
require 'ddtrace/ext/distributed'
|
|
@@ -31,7 +32,7 @@ module Datadog
|
|
|
31
32
|
rescue => e
|
|
32
33
|
Datadog.logger.error(
|
|
33
34
|
'Error injecting propagated context into the environment. ' \
|
|
34
|
-
"Cause: #{e} Location: #{e.backtrace.first}"
|
|
35
|
+
"Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
35
36
|
)
|
|
36
37
|
end
|
|
37
38
|
end
|
|
@@ -54,7 +55,7 @@ module Datadog
|
|
|
54
55
|
rescue => e
|
|
55
56
|
Datadog.logger.error(
|
|
56
57
|
'Error extracting propagated context from the environment. ' \
|
|
57
|
-
"Cause: #{e} Location: #{e.backtrace.first}"
|
|
58
|
+
"Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
58
59
|
)
|
|
59
60
|
end
|
|
60
61
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'uri'
|
|
2
3
|
require 'set'
|
|
3
4
|
|
|
@@ -5,6 +6,8 @@ module Datadog
|
|
|
5
6
|
module Quantization
|
|
6
7
|
# Quantization for HTTP resources
|
|
7
8
|
module HTTP
|
|
9
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
10
|
+
|
|
8
11
|
PLACEHOLDER = '?'.freeze
|
|
9
12
|
|
|
10
13
|
module_function
|
|
@@ -61,6 +64,7 @@ module Datadog
|
|
|
61
64
|
# e.g. Reduces "foo&bar=bar&bar=bar&foo" to "foo&bar=bar&bar=bar"
|
|
62
65
|
def collect_query(query, options = {})
|
|
63
66
|
return query unless block_given?
|
|
67
|
+
|
|
64
68
|
uniq = options[:uniq].nil? ? false : options[:uniq]
|
|
65
69
|
keys = Set.new
|
|
66
70
|
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/ext/integration'
|
|
2
3
|
require 'ddtrace/ext/runtime'
|
|
3
4
|
|
|
4
5
|
require 'ddtrace/metrics'
|
|
5
|
-
require '
|
|
6
|
-
require '
|
|
7
|
-
require '
|
|
8
|
-
require '
|
|
6
|
+
require 'datadog/core/environment/class_count'
|
|
7
|
+
require 'datadog/core/environment/gc'
|
|
8
|
+
require 'datadog/core/environment/identity'
|
|
9
|
+
require 'datadog/core/environment/thread_count'
|
|
9
10
|
|
|
10
11
|
module Datadog
|
|
11
12
|
module Runtime
|
|
12
13
|
# For generating runtime metrics
|
|
13
14
|
class Metrics < Datadog::Metrics
|
|
14
|
-
def initialize(options
|
|
15
|
+
def initialize(**options)
|
|
15
16
|
super
|
|
16
17
|
|
|
17
18
|
# Initialize service list
|
|
@@ -29,7 +30,7 @@ module Datadog
|
|
|
29
30
|
# Tag span with language and runtime ID for association with metrics.
|
|
30
31
|
# We only tag spans that performed internal application work.
|
|
31
32
|
unless span.get_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE)
|
|
32
|
-
span.set_tag(Ext::Runtime::TAG_LANG,
|
|
33
|
+
span.set_tag(Ext::Runtime::TAG_LANG, Core::Environment::Identity.lang)
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -52,17 +53,23 @@ module Datadog
|
|
|
52
53
|
def flush
|
|
53
54
|
return unless enabled?
|
|
54
55
|
|
|
55
|
-
try_flush
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
try_flush do
|
|
57
|
+
if Core::Environment::ClassCount.available?
|
|
58
|
+
gauge(Ext::Runtime::Metrics::METRIC_CLASS_COUNT, Core::Environment::ClassCount.value)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
try_flush do
|
|
62
|
+
if Core::Environment::ThreadCount.available?
|
|
63
|
+
gauge(Ext::Runtime::Metrics::METRIC_THREAD_COUNT, Core::Environment::ThreadCount.value)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
try_flush { gc_metrics.each { |metric, value| gauge(metric, value) } if Core::Environment::GC.available? }
|
|
58
67
|
end
|
|
59
68
|
|
|
60
69
|
def gc_metrics
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
]
|
|
70
|
+
Core::Environment::GC.stat.flat_map do |k, v|
|
|
71
|
+
nested_gc_metric(Ext::Runtime::Metrics::METRIC_GC_PREFIX, k, v)
|
|
72
|
+
end.to_h
|
|
66
73
|
end
|
|
67
74
|
|
|
68
75
|
def try_flush
|
data/lib/ddtrace/sampler.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/ext/priority'
|
|
@@ -81,7 +82,7 @@ module Datadog
|
|
|
81
82
|
:default_key
|
|
82
83
|
|
|
83
84
|
def initialize(default_key, default_rate = 1.0, &block)
|
|
84
|
-
raise ArgumentError, 'No resolver given!' unless
|
|
85
|
+
raise ArgumentError, 'No resolver given!' unless block
|
|
85
86
|
|
|
86
87
|
@default_key = default_key
|
|
87
88
|
@resolver = block
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/sampling/matcher'
|
|
@@ -28,7 +29,7 @@ module Datadog
|
|
|
28
29
|
def match?(span)
|
|
29
30
|
@matcher.match?(span)
|
|
30
31
|
rescue => e
|
|
31
|
-
Datadog.logger.error("Matcher failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
32
|
+
Datadog.logger.error("Matcher failed. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
32
33
|
nil
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
3
|
|
|
3
4
|
require 'ddtrace/ext/priority'
|
|
@@ -5,6 +6,7 @@ require 'ddtrace/ext/priority'
|
|
|
5
6
|
require 'ddtrace/ext/sampling'
|
|
6
7
|
require 'ddtrace/sampler'
|
|
7
8
|
require 'ddtrace/sampling/rate_limiter'
|
|
9
|
+
require 'ddtrace/sampling/rule'
|
|
8
10
|
|
|
9
11
|
module Datadog
|
|
10
12
|
module Sampling
|
|
@@ -45,15 +47,8 @@ module Datadog
|
|
|
45
47
|
@default_sampler = if default_sampler
|
|
46
48
|
default_sampler
|
|
47
49
|
elsif default_sample_rate
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
# We address that here by not setting the rate in the constructor,
|
|
52
|
-
# but using the setter method.
|
|
53
|
-
#
|
|
54
|
-
# We don't want to make this change directly to \RateSampler
|
|
55
|
-
# because it breaks its current contract to existing users.
|
|
56
|
-
Datadog::RateSampler.new.tap { |s| s.sample_rate = default_sample_rate }
|
|
50
|
+
# Add to the end of the rule list a rule always matches any span
|
|
51
|
+
@rules << SimpleRule.new(sample_rate: default_sample_rate)
|
|
57
52
|
else
|
|
58
53
|
RateByServiceSampler.new(1.0, env: -> { Datadog.tracer.tags[:env] })
|
|
59
54
|
end
|
|
@@ -88,6 +83,7 @@ module Datadog
|
|
|
88
83
|
|
|
89
84
|
def update(*args)
|
|
90
85
|
return false unless @default_sampler.respond_to?(:update)
|
|
86
|
+
|
|
91
87
|
@default_sampler.update(*args)
|
|
92
88
|
end
|
|
93
89
|
|
|
@@ -109,7 +105,7 @@ module Datadog
|
|
|
109
105
|
set_limiter_metrics(span, rate_limiter.effective_rate)
|
|
110
106
|
end
|
|
111
107
|
rescue StandardError => e
|
|
112
|
-
Datadog.logger.error("Rule sampling failed. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
108
|
+
Datadog.logger.error("Rule sampling failed. Cause: #{e.message} Source: #{Array(e.backtrace).first}")
|
|
113
109
|
yield(span)
|
|
114
110
|
end
|
|
115
111
|
|
data/lib/ddtrace/sampling.rb
CHANGED
data/lib/ddtrace/span.rb
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
require 'time'
|
|
4
|
-
require 'thread'
|
|
5
|
-
|
|
6
5
|
require 'ddtrace/utils'
|
|
6
|
+
require 'ddtrace/ext/distributed'
|
|
7
|
+
require 'ddtrace/ext/environment'
|
|
7
8
|
require 'ddtrace/ext/errors'
|
|
9
|
+
require 'ddtrace/ext/http'
|
|
10
|
+
require 'ddtrace/ext/net'
|
|
8
11
|
require 'ddtrace/ext/priority'
|
|
9
|
-
require 'ddtrace/environment'
|
|
10
12
|
require 'ddtrace/analytics'
|
|
11
13
|
require 'ddtrace/forced_tracing'
|
|
12
14
|
require 'ddtrace/diagnostics/health'
|
|
@@ -38,14 +40,32 @@ module Datadog
|
|
|
38
40
|
EXTERNAL_MAX_ID = 1 << 64
|
|
39
41
|
|
|
40
42
|
# This limit is for numeric tags because uint64 could end up rounded.
|
|
41
|
-
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53)
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53).freeze
|
|
44
|
+
|
|
45
|
+
# Some associated values should always be sent as Tags, never as Metrics, regardless
|
|
46
|
+
# if their value is numeric or not.
|
|
47
|
+
# The Datadog agent will look for these values only as Tags, not Metrics.
|
|
48
|
+
# @see https://github.com/DataDog/datadog-agent/blob/2ae2cdd315bcda53166dd8fa0dedcfc448087b9d/pkg/trace/stats/aggregation.go#L13-L17
|
|
49
|
+
ENSURE_AGENT_TAGS = {
|
|
50
|
+
Ext::DistributedTracing::ORIGIN_KEY => true,
|
|
51
|
+
Ext::Environment::TAG_VERSION => true,
|
|
52
|
+
Ext::HTTP::STATUS_CODE => true,
|
|
53
|
+
Ext::NET::TAG_HOSTNAME => true
|
|
54
|
+
}.freeze
|
|
55
|
+
|
|
56
|
+
# Simple indirection used to contain the latest resource name for a span.
|
|
57
|
+
# The profiler keeps a reference to these objects while sampling so it can extract the latest resource after the
|
|
58
|
+
# fact, as some integrations only set the correct name at the end of the span.
|
|
59
|
+
ResourceContainer = Struct.new(:latest)
|
|
60
|
+
|
|
61
|
+
attr_accessor :name, :service, :span_type,
|
|
44
62
|
:span_id, :trace_id, :parent_id,
|
|
45
63
|
:status, :sampled,
|
|
46
|
-
:tracer, :context
|
|
64
|
+
:tracer, :context
|
|
47
65
|
|
|
48
|
-
attr_reader :parent
|
|
66
|
+
attr_reader :parent, :start_time, :end_time, :resource_container
|
|
67
|
+
|
|
68
|
+
attr_writer :duration
|
|
49
69
|
|
|
50
70
|
# Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
|
|
51
71
|
# and then <tt>finish()</tt> once the tracer operation is over.
|
|
@@ -61,7 +81,7 @@ module Datadog
|
|
|
61
81
|
|
|
62
82
|
@name = name
|
|
63
83
|
@service = options.fetch(:service, nil)
|
|
64
|
-
@
|
|
84
|
+
@resource_container = ResourceContainer.new(options.fetch(:resource, name))
|
|
65
85
|
@span_type = options.fetch(:span_type, nil)
|
|
66
86
|
|
|
67
87
|
@span_id = Datadog::Utils.next_id
|
|
@@ -101,11 +121,8 @@ module Datadog
|
|
|
101
121
|
# Keys must be unique between tags and metrics
|
|
102
122
|
@metrics.delete(key)
|
|
103
123
|
|
|
104
|
-
#
|
|
105
|
-
|
|
106
|
-
# DEV: This is necessary because the agent looks to `meta['http.status_code']` for
|
|
107
|
-
# tagging necessary metrics
|
|
108
|
-
value = value.to_s if key == Ext::HTTP::STATUS_CODE
|
|
124
|
+
# DEV: This is necessary because the agent looks at `meta[key]`, not `metrics[key]`.
|
|
125
|
+
value = value.to_s if ENSURE_AGENT_TAGS[key]
|
|
109
126
|
|
|
110
127
|
# NOTE: Adding numeric tags as metrics is stop-gap support
|
|
111
128
|
# for numeric typed tags. Eventually they will become
|
|
@@ -180,7 +197,7 @@ module Datadog
|
|
|
180
197
|
# behavior and so we maintain it for backward compatibility for those
|
|
181
198
|
# who are using async manual instrumentation that may rely on this
|
|
182
199
|
|
|
183
|
-
@start_time = start_time || Time.now.utc
|
|
200
|
+
@start_time = start_time || Utils::Time.now.utc
|
|
184
201
|
@duration_start = start_time.nil? ? duration_marker : nil
|
|
185
202
|
|
|
186
203
|
self
|
|
@@ -206,7 +223,7 @@ module Datadog
|
|
|
206
223
|
|
|
207
224
|
@allocation_count_finish = now_allocations
|
|
208
225
|
|
|
209
|
-
now = Time.now.utc
|
|
226
|
+
now = Utils::Time.now.utc
|
|
210
227
|
|
|
211
228
|
# Provide a default start_time if unset.
|
|
212
229
|
# Using `now` here causes duration to be 0; this is expected
|
|
@@ -272,7 +289,7 @@ module Datadog
|
|
|
272
289
|
trace_id: @trace_id,
|
|
273
290
|
name: @name,
|
|
274
291
|
service: @service,
|
|
275
|
-
resource:
|
|
292
|
+
resource: resource,
|
|
276
293
|
type: @span_type,
|
|
277
294
|
meta: @meta,
|
|
278
295
|
metrics: @metrics,
|
|
@@ -326,7 +343,7 @@ module Datadog
|
|
|
326
343
|
packer.write('service')
|
|
327
344
|
packer.write(@service)
|
|
328
345
|
packer.write('resource')
|
|
329
|
-
packer.write(
|
|
346
|
+
packer.write(resource)
|
|
330
347
|
packer.write('type')
|
|
331
348
|
packer.write(@span_type)
|
|
332
349
|
packer.write('meta')
|
|
@@ -358,7 +375,7 @@ module Datadog
|
|
|
358
375
|
q.text "Trace ID: #{@trace_id}\n"
|
|
359
376
|
q.text "Type: #{@span_type}\n"
|
|
360
377
|
q.text "Service: #{@service}\n"
|
|
361
|
-
q.text "Resource: #{
|
|
378
|
+
q.text "Resource: #{resource}\n"
|
|
362
379
|
q.text "Error: #{@status}\n"
|
|
363
380
|
q.text "Start: #{start_time}\n"
|
|
364
381
|
q.text "End: #{end_time}\n"
|
|
@@ -397,6 +414,14 @@ module Datadog
|
|
|
397
414
|
end
|
|
398
415
|
end
|
|
399
416
|
|
|
417
|
+
def resource
|
|
418
|
+
@resource_container.latest
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
def resource=(resource)
|
|
422
|
+
@resource_container.latest = resource
|
|
423
|
+
end
|
|
424
|
+
|
|
400
425
|
private
|
|
401
426
|
|
|
402
427
|
def duration_marker
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/ext/net'
|
|
2
|
-
require '
|
|
3
|
+
require 'datadog/core/environment/socket'
|
|
3
4
|
require 'ddtrace/runtime/metrics'
|
|
5
|
+
require 'ddtrace/utils/only_once'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
6
8
|
# SyncWriter flushes both services and traces synchronously
|
|
7
9
|
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
10
|
+
#
|
|
11
|
+
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
12
|
+
# the separate `datadog-lambda` uses it as of February 2021:
|
|
13
|
+
# <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
|
|
8
14
|
class SyncWriter
|
|
15
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
16
|
+
|
|
9
17
|
attr_reader \
|
|
10
18
|
:priority_sampler,
|
|
11
19
|
:transport
|
|
@@ -13,7 +21,8 @@ module Datadog
|
|
|
13
21
|
def initialize(options = {})
|
|
14
22
|
@transport = options.fetch(:transport) do
|
|
15
23
|
transport_options = options.fetch(:transport_options, {})
|
|
16
|
-
|
|
24
|
+
transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
|
|
25
|
+
Transport::HTTP.default(**transport_options)
|
|
17
26
|
end
|
|
18
27
|
|
|
19
28
|
@priority_sampler = options.fetch(:priority_sampler, nil)
|
|
@@ -21,17 +30,15 @@ module Datadog
|
|
|
21
30
|
|
|
22
31
|
def write(trace, services = nil)
|
|
23
32
|
unless services.nil?
|
|
24
|
-
|
|
33
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
25
34
|
Datadog.logger.warn(%(
|
|
26
35
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
27
|
-
write(traces, services) can be
|
|
36
|
+
write(traces, services) can be updated to write(traces)
|
|
28
37
|
))
|
|
29
38
|
end
|
|
30
39
|
end
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
proc { flush_trace(trace) }
|
|
34
|
-
)
|
|
41
|
+
flush_trace(trace)
|
|
35
42
|
rescue => e
|
|
36
43
|
Datadog.logger.debug(e)
|
|
37
44
|
end
|
|
@@ -44,23 +51,18 @@ module Datadog
|
|
|
44
51
|
|
|
45
52
|
private
|
|
46
53
|
|
|
47
|
-
def perform_concurrently(*tasks)
|
|
48
|
-
tasks.map { |task| Thread.new(&task) }.each(&:join)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
54
|
def flush_trace(trace)
|
|
52
55
|
processed_traces = Pipeline.process!([trace])
|
|
53
56
|
return if processed_traces.empty?
|
|
57
|
+
|
|
54
58
|
inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
|
|
55
59
|
transport.send_traces(processed_traces)
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def inject_hostname!(trace)
|
|
59
63
|
unless trace.first.nil?
|
|
60
|
-
hostname = Datadog::
|
|
61
|
-
unless hostname.nil? || hostname.empty?
|
|
62
|
-
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
63
|
-
end
|
|
64
|
+
hostname = Datadog::Core::Environment::Socket.hostname
|
|
65
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
64
66
|
end
|
|
65
67
|
end
|
|
66
68
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Wraps command with Datadog tracing
|
|
5
|
+
class Exec
|
|
6
|
+
attr_reader :args
|
|
7
|
+
|
|
8
|
+
def initialize(args)
|
|
9
|
+
@args = args
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
set_rubyopt!
|
|
14
|
+
exec_with_error_handling(args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def rubyopts
|
|
18
|
+
[
|
|
19
|
+
'-rddtrace/profiling/preload'
|
|
20
|
+
]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def set_rubyopt!
|
|
26
|
+
existing_rubyopt = ENV['RUBYOPT']
|
|
27
|
+
|
|
28
|
+
ENV['RUBYOPT'] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(' ')}" : rubyopts.join(' ')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
|
32
|
+
# follow the same status codes as the shell uses
|
|
33
|
+
# See also:
|
|
34
|
+
# * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
|
|
35
|
+
# * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
|
|
36
|
+
def exec_with_error_handling(args)
|
|
37
|
+
Kernel.exec(*args)
|
|
38
|
+
rescue Errno::ENOENT => e
|
|
39
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
40
|
+
Kernel.exit 127
|
|
41
|
+
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
42
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
43
|
+
Kernel.exit 126
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Prints help message for usage of `ddtrace`
|
|
5
|
+
class Help
|
|
6
|
+
def run
|
|
7
|
+
puts %(
|
|
8
|
+
Usage: ddtrace [command] [arguments]
|
|
9
|
+
exec [command]: Executes command with tracing & profiling preloaded.
|
|
10
|
+
help: Prints this help message.
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|