ddtrace 0.42.0 → 0.54.2
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 +1645 -370
- data/CONTRIBUTING.md +2 -6
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +21 -39
- data/docs/DevelopmentGuide.md +46 -8
- data/docs/GettingStarted.md +439 -92
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +86 -0
- data/ext/ddtrace_profiling_native_extension/clock_id.h +4 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +52 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +14 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +197 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +35 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +22 -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 +99 -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 +75 -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 +485 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +36 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +81 -0
- data/lib/datadog/ci.rb +17 -0
- data/lib/datadog/contrib.rb +71 -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/datadog/core/environment/vm_cache.rb +46 -0
- 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 +38 -24
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +309 -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 +142 -12
- data/lib/ddtrace/configuration.rb +132 -24
- data/lib/ddtrace/context.rb +51 -22
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +13 -2
- 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 +47 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +8 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +2 -0
- data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/action_mailer/event.rb +50 -0
- data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +54 -0
- data/lib/ddtrace/contrib/action_mailer/events/process.rb +41 -0
- data/lib/ddtrace/contrib/action_mailer/events.rb +31 -0
- data/lib/ddtrace/contrib/action_mailer/ext.rb +32 -0
- data/lib/ddtrace/contrib/action_mailer/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_mailer/patcher.rb +27 -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/render_partial.rb +2 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +2 -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 +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_job/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/active_job/event.rb +54 -0
- data/lib/ddtrace/contrib/active_job/events/discard.rb +46 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +47 -0
- data/lib/ddtrace/contrib/active_job/events/perform.rb +45 -0
- data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +46 -0
- data/lib/ddtrace/contrib/active_job/events.rb +39 -0
- data/lib/ddtrace/contrib/active_job/ext.rb +32 -0
- data/lib/ddtrace/contrib/active_job/integration.rb +46 -0
- data/lib/ddtrace/contrib/active_job/log_injection.rb +21 -0
- data/lib/ddtrace/contrib/active_job/patcher.rb +33 -0
- 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 +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 +48 -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 +2 -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 +5 -3
- 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/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 +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/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/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 +6 -3
- data/lib/ddtrace/contrib/mongodb/integration.rb +6 -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/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 +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 +10 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +8 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +50 -2
- 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 +40 -21
- 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/instrumentation.rb +90 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +3 -67
- 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 +4 -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 +2 -5
- 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 +4 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +11 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +27 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +30 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +30 -0
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +29 -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 +4 -4
- 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 +28 -7
- 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 +32 -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 +7 -4
- data/lib/ddtrace/ext/profiling.rb +53 -0
- data/lib/ddtrace/ext/runtime.rb +5 -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 +14 -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 +297 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +46 -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/forking.rb +98 -0
- data/lib/ddtrace/profiling/flush.rb +44 -0
- data/lib/ddtrace/profiling/native_extension.rb +40 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +126 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +103 -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 +140 -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 +150 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +90 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +42 -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 +94 -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 +111 -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 +149 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
- 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 +35 -14
- data/lib/ddtrace/sampler.rb +20 -9
- 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 +19 -11
- data/lib/ddtrace/sampling.rb +1 -0
- data/lib/ddtrace/span.rb +27 -14
- 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 +61 -50
- data/lib/ddtrace/transport/http/adapters/net.rb +41 -11
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +5 -2
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +26 -16
- 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 +21 -7
- 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 +48 -41
- 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 +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 +40 -3
- data/lib/ddtrace/utils.rb +23 -12
- 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 +16 -3
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/{loop.rb → interval_loop.rb} +23 -12
- data/lib/ddtrace/workers/polling.rb +14 -6
- 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/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +33 -8
- data/lib/ddtrace.rb +22 -48
- metadata +182 -405
- 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 -1121
- data/Gemfile +0 -7
- data/Rakefile +0 -788
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -370
- 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/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
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,20 +40,34 @@ 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)
|
|
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
|
|
42
55
|
|
|
43
56
|
attr_accessor :name, :service, :resource, :span_type,
|
|
44
57
|
:span_id, :trace_id, :parent_id,
|
|
45
58
|
:status, :sampled,
|
|
46
|
-
:tracer, :context
|
|
59
|
+
:tracer, :context
|
|
60
|
+
|
|
61
|
+
attr_reader :parent, :start_time, :end_time, :resource_container
|
|
47
62
|
|
|
48
|
-
|
|
63
|
+
attr_writer :duration
|
|
49
64
|
|
|
50
65
|
# Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
|
|
51
66
|
# and then <tt>finish()</tt> once the tracer operation is over.
|
|
52
67
|
#
|
|
53
68
|
# * +service+: the service name for this span
|
|
54
|
-
# * +resource+: the resource this span refers, or +name+ if it's missing
|
|
69
|
+
# * +resource+: the resource this span refers, or +name+ if it's missing.
|
|
70
|
+
# +nil+ can be used as a placeholder, when the resource value is not yet known at +#initialize+ time.
|
|
55
71
|
# * +span_type+: the type of the span (such as +http+, +db+ and so on)
|
|
56
72
|
# * +parent_id+: the identifier of the parent span
|
|
57
73
|
# * +trace_id+: the identifier of the root span for this trace
|
|
@@ -101,11 +117,8 @@ module Datadog
|
|
|
101
117
|
# Keys must be unique between tags and metrics
|
|
102
118
|
@metrics.delete(key)
|
|
103
119
|
|
|
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
|
|
120
|
+
# DEV: This is necessary because the agent looks at `meta[key]`, not `metrics[key]`.
|
|
121
|
+
value = value.to_s if ENSURE_AGENT_TAGS[key]
|
|
109
122
|
|
|
110
123
|
# NOTE: Adding numeric tags as metrics is stop-gap support
|
|
111
124
|
# for numeric typed tags. Eventually they will become
|
|
@@ -180,7 +193,7 @@ module Datadog
|
|
|
180
193
|
# behavior and so we maintain it for backward compatibility for those
|
|
181
194
|
# who are using async manual instrumentation that may rely on this
|
|
182
195
|
|
|
183
|
-
@start_time = start_time || Time.now.utc
|
|
196
|
+
@start_time = start_time || Utils::Time.now.utc
|
|
184
197
|
@duration_start = start_time.nil? ? duration_marker : nil
|
|
185
198
|
|
|
186
199
|
self
|
|
@@ -206,7 +219,7 @@ module Datadog
|
|
|
206
219
|
|
|
207
220
|
@allocation_count_finish = now_allocations
|
|
208
221
|
|
|
209
|
-
now = Time.now.utc
|
|
222
|
+
now = Utils::Time.now.utc
|
|
210
223
|
|
|
211
224
|
# Provide a default start_time if unset.
|
|
212
225
|
# Using `now` here causes duration to be 0; this is expected
|
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
|
data/lib/ddtrace/tracer.rb
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: true
|
|
2
2
|
require 'logger'
|
|
3
3
|
require 'pathname'
|
|
4
4
|
|
|
5
|
-
require 'ddtrace/environment'
|
|
5
|
+
require 'ddtrace/ext/environment'
|
|
6
6
|
require 'ddtrace/span'
|
|
7
7
|
require 'ddtrace/context'
|
|
8
8
|
require 'ddtrace/logger'
|
|
9
9
|
require 'ddtrace/writer'
|
|
10
|
+
require 'datadog/core/environment/identity'
|
|
10
11
|
require 'ddtrace/sampler'
|
|
11
12
|
require 'ddtrace/sampling'
|
|
12
13
|
require 'ddtrace/correlation'
|
|
14
|
+
require 'ddtrace/event'
|
|
15
|
+
require 'ddtrace/utils/only_once'
|
|
13
16
|
|
|
14
17
|
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
15
18
|
module Datadog
|
|
@@ -19,6 +22,9 @@ module Datadog
|
|
|
19
22
|
# of these function calls and sub-requests would be encapsulated within a single trace.
|
|
20
23
|
# rubocop:disable Metrics/ClassLength
|
|
21
24
|
class Tracer
|
|
25
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
26
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
27
|
+
|
|
22
28
|
attr_reader :sampler, :tags, :provider, :context_flush
|
|
23
29
|
attr_accessor :enabled, :writer
|
|
24
30
|
attr_writer :default_service
|
|
@@ -27,8 +33,7 @@ module Datadog
|
|
|
27
33
|
DEFAULT_ON_ERROR = proc { |span, error| span.set_error(error) unless span.nil? }
|
|
28
34
|
|
|
29
35
|
def services
|
|
30
|
-
|
|
31
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
36
|
+
SERVICES_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
32
37
|
Datadog.logger.warn('services: Usage of Tracer.services has been deprecated')
|
|
33
38
|
end
|
|
34
39
|
|
|
@@ -70,7 +75,9 @@ module Datadog
|
|
|
70
75
|
# by default.
|
|
71
76
|
def initialize(options = {})
|
|
72
77
|
# Configurable options
|
|
73
|
-
@context_flush = if options[:
|
|
78
|
+
@context_flush = if options[:context_flush]
|
|
79
|
+
options[:context_flush]
|
|
80
|
+
elsif options[:partial_flush]
|
|
74
81
|
Datadog::ContextFlush::Partial.new(options)
|
|
75
82
|
else
|
|
76
83
|
Datadog::ContextFlush::Finished.new
|
|
@@ -78,14 +85,13 @@ module Datadog
|
|
|
78
85
|
|
|
79
86
|
@default_service = options[:default_service]
|
|
80
87
|
@enabled = options.fetch(:enabled, true)
|
|
81
|
-
@provider = options
|
|
88
|
+
@provider = options[:context_provider] || Datadog::DefaultContextProvider.new
|
|
82
89
|
@sampler = options.fetch(:sampler, Datadog::AllSampler.new)
|
|
83
90
|
@tags = options.fetch(:tags, {})
|
|
84
|
-
@writer = options.fetch(:writer
|
|
91
|
+
@writer = options.fetch(:writer) { Datadog::Writer.new }
|
|
85
92
|
|
|
86
93
|
# Instance variables
|
|
87
94
|
@mutex = Mutex.new
|
|
88
|
-
@provider ||= Datadog::DefaultContextProvider.new # @provider should never be nil
|
|
89
95
|
|
|
90
96
|
# Enable priority sampling by default
|
|
91
97
|
activate_priority_sampling!(@sampler)
|
|
@@ -114,8 +120,10 @@ module Datadog
|
|
|
114
120
|
|
|
115
121
|
configure_writer(options)
|
|
116
122
|
|
|
117
|
-
if options.key?(:partial_flush)
|
|
118
|
-
@context_flush = if options[:
|
|
123
|
+
if options.key?(:context_flush) || options.key?(:partial_flush)
|
|
124
|
+
@context_flush = if options[:context_flush]
|
|
125
|
+
options[:context_flush]
|
|
126
|
+
elsif options[:partial_flush]
|
|
119
127
|
Datadog::ContextFlush::Partial.new(options)
|
|
120
128
|
else
|
|
121
129
|
Datadog::ContextFlush::Finished.new
|
|
@@ -129,8 +137,7 @@ module Datadog
|
|
|
129
137
|
#
|
|
130
138
|
# set_service_info is deprecated, no service information needs to be tracked
|
|
131
139
|
def set_service_info(service, app, app_type)
|
|
132
|
-
|
|
133
|
-
Datadog::Patcher.do_once('Tracer#set_service_info') do
|
|
140
|
+
SET_SERVICE_INFO_DEPRECATION_WARN_ONLY_ONCE.run do
|
|
134
141
|
Datadog.logger.warn(%(
|
|
135
142
|
set_service_info: Usage of set_service_info has been deprecated,
|
|
136
143
|
service information no longer needs to be reported to the trace agent.
|
|
@@ -142,14 +149,7 @@ module Datadog
|
|
|
142
149
|
# for non-root spans which have a parent. However, root spans without
|
|
143
150
|
# a service would be invalid and rejected.
|
|
144
151
|
def default_service
|
|
145
|
-
|
|
146
|
-
begin
|
|
147
|
-
@default_service = File.basename($PROGRAM_NAME, '.*')
|
|
148
|
-
rescue StandardError => e
|
|
149
|
-
Datadog.logger.error("unable to guess default service: #{e}")
|
|
150
|
-
@default_service = 'ruby'.freeze
|
|
151
|
-
end
|
|
152
|
-
@default_service
|
|
152
|
+
@default_service ||= Datadog::Ext::Environment::FALLBACK_SERVICE_NAME
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
# Set the given key / value tag pair at the tracer level. These tags will be
|
|
@@ -158,7 +158,7 @@ module Datadog
|
|
|
158
158
|
#
|
|
159
159
|
# tracer.set_tags('env' => 'prod', 'component' => 'core')
|
|
160
160
|
def set_tags(tags)
|
|
161
|
-
string_tags =
|
|
161
|
+
string_tags = tags.collect { |k, v| [k.to_s, v] }.to_h
|
|
162
162
|
@tags = @tags.merge(string_tags)
|
|
163
163
|
end
|
|
164
164
|
|
|
@@ -200,7 +200,8 @@ module Datadog
|
|
|
200
200
|
if parent.nil?
|
|
201
201
|
# root span
|
|
202
202
|
@sampler.sample!(span)
|
|
203
|
-
span.set_tag(
|
|
203
|
+
span.set_tag(Datadog::Ext::Runtime::TAG_PID, Process.pid)
|
|
204
|
+
span.set_tag(Datadog::Ext::Runtime::TAG_ID, Datadog::Core::Environment::Identity.id)
|
|
204
205
|
|
|
205
206
|
if ctx && ctx.trace_id
|
|
206
207
|
span.trace_id = ctx.trace_id
|
|
@@ -287,8 +288,19 @@ module Datadog
|
|
|
287
288
|
# and it is user code which should be executed no matter what.
|
|
288
289
|
# It's not a problem since we re-raise it afterwards so for example a
|
|
289
290
|
# SignalException::Interrupt would still bubble up.
|
|
291
|
+
# rubocop:disable Metrics/BlockNesting
|
|
290
292
|
rescue Exception => e
|
|
291
|
-
(options[:on_error]
|
|
293
|
+
if (on_error_handler = options[:on_error]) && on_error_handler.respond_to?(:call)
|
|
294
|
+
begin
|
|
295
|
+
on_error_handler.call(span, e)
|
|
296
|
+
rescue
|
|
297
|
+
Datadog.logger.debug('Custom on_error handler failed, falling back to default')
|
|
298
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
299
|
+
end
|
|
300
|
+
else
|
|
301
|
+
Datadog.logger.debug('Custom on_error handler must be a callable, falling back to default') if on_error_handler
|
|
302
|
+
DEFAULT_ON_ERROR.call(span, e)
|
|
303
|
+
end
|
|
292
304
|
raise e
|
|
293
305
|
ensure
|
|
294
306
|
span.finish unless span.nil?
|
|
@@ -300,6 +312,10 @@ module Datadog
|
|
|
300
312
|
end
|
|
301
313
|
end
|
|
302
314
|
|
|
315
|
+
def trace_completed
|
|
316
|
+
@trace_completed ||= TraceCompleted.new
|
|
317
|
+
end
|
|
318
|
+
|
|
303
319
|
# Record the given +context+. For compatibility with previous versions,
|
|
304
320
|
# +context+ can also be a span. It is similar to the +child_of+ argument,
|
|
305
321
|
# method will figure out what to do, submitting a +span+ for recording
|
|
@@ -351,24 +367,34 @@ module Datadog
|
|
|
351
367
|
end
|
|
352
368
|
|
|
353
369
|
@writer.write(trace)
|
|
370
|
+
trace_completed.publish(trace)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Triggered whenever a trace is completed
|
|
374
|
+
class TraceCompleted < Datadog::Event
|
|
375
|
+
def initialize
|
|
376
|
+
super(:trace_completed)
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
# NOTE: Ignore Rubocop rule. This definition allows for
|
|
380
|
+
# description of and constraints on arguments.
|
|
381
|
+
# rubocop:disable Lint/UselessMethodDefinition
|
|
382
|
+
def publish(trace)
|
|
383
|
+
super(trace)
|
|
384
|
+
end
|
|
385
|
+
# rubocop:enable Lint/UselessMethodDefinition
|
|
354
386
|
end
|
|
355
387
|
|
|
356
388
|
# TODO: Move this kind of configuration building out of the tracer.
|
|
357
389
|
# Tracer should not have this kind of knowledge of writer.
|
|
358
|
-
# rubocop:disable Metrics/PerceivedComplexity
|
|
359
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
360
|
-
# rubocop:disable Metrics/MethodLength
|
|
361
390
|
def configure_writer(options = {})
|
|
362
|
-
hostname = options.fetch(:hostname, nil)
|
|
363
|
-
port = options.fetch(:port, nil)
|
|
364
391
|
sampler = options.fetch(:sampler, nil)
|
|
365
392
|
priority_sampling = options.fetch(:priority_sampling, nil)
|
|
366
393
|
writer = options.fetch(:writer, nil)
|
|
367
|
-
|
|
394
|
+
agent_settings = options.fetch(:agent_settings, nil)
|
|
368
395
|
|
|
369
396
|
# Compile writer options
|
|
370
397
|
writer_options = options.fetch(:writer_options, {}).dup
|
|
371
|
-
rebuild_writer = !writer_options.empty?
|
|
372
398
|
|
|
373
399
|
# Re-build the sampler and writer if priority sampling is enabled,
|
|
374
400
|
# but neither are configured. Verify the sampler isn't already a
|
|
@@ -381,35 +407,20 @@ module Datadog
|
|
|
381
407
|
end
|
|
382
408
|
elsif priority_sampling != false && !@sampler.is_a?(PrioritySampler)
|
|
383
409
|
writer_options[:priority_sampler] = activate_priority_sampling!(@sampler)
|
|
384
|
-
rebuild_writer = true
|
|
385
410
|
elsif priority_sampling == false
|
|
386
411
|
deactivate_priority_sampling!(sampler)
|
|
387
|
-
rebuild_writer = true
|
|
388
412
|
elsif @sampler.is_a?(PrioritySampler)
|
|
389
413
|
# Make sure to add sampler to options if transport is rebuilt.
|
|
390
414
|
writer_options[:priority_sampler] = @sampler
|
|
391
415
|
end
|
|
392
416
|
|
|
393
|
-
|
|
394
|
-
if transport_options.is_a?(Proc)
|
|
395
|
-
transport_options = { on_build: transport_options }
|
|
396
|
-
rebuild_writer = true
|
|
397
|
-
end
|
|
417
|
+
writer_options[:agent_settings] = agent_settings if agent_settings
|
|
398
418
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
rebuild_writer = true
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
writer_options[:transport_options] = transport_options
|
|
419
|
+
# Make sure old writer is shut down before throwing away.
|
|
420
|
+
# Don't want additional threads running...
|
|
421
|
+
@writer.stop unless writer.nil?
|
|
406
422
|
|
|
407
|
-
|
|
408
|
-
# Make sure old writer is shut down before throwing away.
|
|
409
|
-
# Don't want additional threads running...
|
|
410
|
-
@writer.stop unless writer.nil?
|
|
411
|
-
@writer = writer || Writer.new(writer_options)
|
|
412
|
-
end
|
|
423
|
+
@writer = writer || Writer.new(writer_options)
|
|
413
424
|
end
|
|
414
425
|
|
|
415
426
|
def activate_priority_sampling!(base_sampler = nil)
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/transport/response'
|
|
3
|
+
require 'ddtrace/vendor/multipart-post/net/http/post/multipart'
|
|
2
4
|
|
|
3
5
|
module Datadog
|
|
4
6
|
module Transport
|
|
@@ -9,27 +11,38 @@ module Datadog
|
|
|
9
11
|
attr_reader \
|
|
10
12
|
:hostname,
|
|
11
13
|
:port,
|
|
12
|
-
:timeout
|
|
14
|
+
:timeout,
|
|
15
|
+
:ssl
|
|
13
16
|
|
|
14
|
-
DEFAULT_TIMEOUT =
|
|
17
|
+
DEFAULT_TIMEOUT = 30
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@
|
|
19
|
+
# @deprecated Positional parameters are deprecated. Use named parameters instead.
|
|
20
|
+
def initialize(hostname = nil, port = nil, **options)
|
|
21
|
+
@hostname = hostname || options.fetch(:hostname)
|
|
22
|
+
@port = port || options.fetch(:port)
|
|
19
23
|
@timeout = options[:timeout] || DEFAULT_TIMEOUT
|
|
24
|
+
@ssl = options.key?(:ssl) ? options[:ssl] == true : false
|
|
20
25
|
end
|
|
21
26
|
|
|
22
|
-
def
|
|
27
|
+
def self.build(agent_settings)
|
|
28
|
+
new(
|
|
29
|
+
hostname: agent_settings.hostname,
|
|
30
|
+
port: agent_settings.port,
|
|
31
|
+
timeout: agent_settings.timeout_seconds,
|
|
32
|
+
ssl: agent_settings.ssl
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def open(&block)
|
|
23
37
|
# DEV Initializing +Net::HTTP+ directly help us avoid expensive
|
|
24
38
|
# options processing done in +Net::HTTP.start+:
|
|
25
39
|
# https://github.com/ruby/ruby/blob/b2d96abb42abbe2e01f010ffc9ac51f0f9a50002/lib/net/http.rb#L614-L618
|
|
26
40
|
req = ::Net::HTTP.new(hostname, port, nil)
|
|
27
41
|
|
|
42
|
+
req.use_ssl = ssl
|
|
28
43
|
req.open_timeout = req.read_timeout = timeout
|
|
29
44
|
|
|
30
|
-
req.start
|
|
31
|
-
yield(http)
|
|
32
|
-
end
|
|
45
|
+
req.start(&block)
|
|
33
46
|
end
|
|
34
47
|
|
|
35
48
|
def call(env)
|
|
@@ -41,8 +54,18 @@ module Datadog
|
|
|
41
54
|
end
|
|
42
55
|
|
|
43
56
|
def post(env)
|
|
44
|
-
post =
|
|
45
|
-
|
|
57
|
+
post = nil
|
|
58
|
+
|
|
59
|
+
if env.form.nil? || env.form.empty?
|
|
60
|
+
post = ::Net::HTTP::Post.new(env.path, env.headers)
|
|
61
|
+
post.body = env.body
|
|
62
|
+
else
|
|
63
|
+
post = ::Datadog::Vendor::Net::HTTP::Post::Multipart.new(
|
|
64
|
+
env.path,
|
|
65
|
+
env.form,
|
|
66
|
+
env.headers
|
|
67
|
+
)
|
|
68
|
+
end
|
|
46
69
|
|
|
47
70
|
# Connect and send the request
|
|
48
71
|
http_response = open do |http|
|
|
@@ -82,36 +105,43 @@ module Datadog
|
|
|
82
105
|
|
|
83
106
|
def payload
|
|
84
107
|
return super if http_response.nil?
|
|
108
|
+
|
|
85
109
|
http_response.body
|
|
86
110
|
end
|
|
87
111
|
|
|
88
112
|
def code
|
|
89
113
|
return super if http_response.nil?
|
|
114
|
+
|
|
90
115
|
http_response.code.to_i
|
|
91
116
|
end
|
|
92
117
|
|
|
93
118
|
def ok?
|
|
94
119
|
return super if http_response.nil?
|
|
120
|
+
|
|
95
121
|
code.between?(200, 299)
|
|
96
122
|
end
|
|
97
123
|
|
|
98
124
|
def unsupported?
|
|
99
125
|
return super if http_response.nil?
|
|
126
|
+
|
|
100
127
|
code == 415
|
|
101
128
|
end
|
|
102
129
|
|
|
103
130
|
def not_found?
|
|
104
131
|
return super if http_response.nil?
|
|
132
|
+
|
|
105
133
|
code == 404
|
|
106
134
|
end
|
|
107
135
|
|
|
108
136
|
def client_error?
|
|
109
137
|
return super if http_response.nil?
|
|
138
|
+
|
|
110
139
|
code.between?(400, 499)
|
|
111
140
|
end
|
|
112
141
|
|
|
113
142
|
def server_error?
|
|
114
143
|
return super if http_response.nil?
|
|
144
|
+
|
|
115
145
|
code.between?(500, 599)
|
|
116
146
|
end
|
|
117
147
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/transport/response'
|
|
2
3
|
|
|
3
4
|
module Datadog
|
|
@@ -10,8 +11,10 @@ module Datadog
|
|
|
10
11
|
:buffer,
|
|
11
12
|
:status
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
# @param buffer [Array] an optional array that will capture all spans sent to this adapter, defaults to +nil+
|
|
15
|
+
# @deprecated Positional parameters are deprecated. Use named parameters instead.
|
|
16
|
+
def initialize(buffer = nil, **options)
|
|
17
|
+
@buffer = buffer || options[:buffer]
|
|
15
18
|
@mutex = Mutex.new
|
|
16
19
|
@status = 200
|
|
17
20
|
end
|