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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
require 'ddtrace/utils/only_once'
|
|
3
|
+
require 'ddtrace/profiling'
|
|
4
|
+
require 'ddtrace/profiling/ext/forking'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module Tasks
|
|
9
|
+
# Takes care of loading our extensions/monkey patches to handle fork() and validating if CPU-time profiling is usable
|
|
10
|
+
class Setup
|
|
11
|
+
ACTIVATE_EXTENSIONS_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
ACTIVATE_EXTENSIONS_ONLY_ONCE.run do
|
|
15
|
+
begin
|
|
16
|
+
check_if_cpu_time_profiling_is_supported
|
|
17
|
+
activate_forking_extensions
|
|
18
|
+
setup_at_fork_hooks
|
|
19
|
+
rescue StandardError, ScriptError => e
|
|
20
|
+
Datadog.logger.warn do
|
|
21
|
+
"Profiler extensions unavailable. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def activate_forking_extensions
|
|
30
|
+
if Ext::Forking.supported?
|
|
31
|
+
Ext::Forking.apply!
|
|
32
|
+
elsif Datadog.configuration.profiling.enabled
|
|
33
|
+
Datadog.logger.debug('Profiler forking extensions skipped; forking not supported.')
|
|
34
|
+
end
|
|
35
|
+
rescue StandardError, ScriptError => e
|
|
36
|
+
Datadog.logger.warn do
|
|
37
|
+
"Profiler forking extensions unavailable. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def check_if_cpu_time_profiling_is_supported
|
|
42
|
+
unsupported = cpu_time_profiling_unsupported_reason
|
|
43
|
+
|
|
44
|
+
if unsupported
|
|
45
|
+
Datadog.logger.info do
|
|
46
|
+
'CPU time profiling skipped because native CPU time is not supported: ' \
|
|
47
|
+
"#{unsupported}. Profiles containing 'Wall time' data will still be reported."
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def setup_at_fork_hooks
|
|
53
|
+
if Process.respond_to?(:at_fork)
|
|
54
|
+
Process.at_fork(:child) do
|
|
55
|
+
begin
|
|
56
|
+
# When Ruby forks, clock IDs for each of the threads
|
|
57
|
+
# will change. We can only update these IDs from the
|
|
58
|
+
# execution context of the thread that owns it.
|
|
59
|
+
# This hook will update the IDs for the main thread
|
|
60
|
+
# after a fork occurs.
|
|
61
|
+
Thread.current.send(:update_native_ids) if Thread.current.respond_to?(:update_native_ids, true)
|
|
62
|
+
|
|
63
|
+
# Restart profiler, if enabled
|
|
64
|
+
Datadog.profiler.start if Datadog.profiler
|
|
65
|
+
rescue StandardError => e
|
|
66
|
+
Datadog.logger.warn do
|
|
67
|
+
"Error during post-fork hooks. Cause: #{e.message} Location: #{Array(e.backtrace).first}"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def cpu_time_profiling_unsupported_reason
|
|
75
|
+
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons
|
|
76
|
+
|
|
77
|
+
if RUBY_ENGINE == 'jruby'
|
|
78
|
+
'JRuby is not supported'
|
|
79
|
+
elsif RUBY_PLATFORM.include?('darwin')
|
|
80
|
+
'Feature requires Linux; macOS is not supported'
|
|
81
|
+
elsif RUBY_PLATFORM =~ /(mswin|mingw)/
|
|
82
|
+
'Feature requires Linux; Windows is not supported'
|
|
83
|
+
elsif !RUBY_PLATFORM.include?('linux')
|
|
84
|
+
"Feature requires Linux; #{RUBY_PLATFORM} is not supported"
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/ext/http'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module TraceIdentifiers
|
|
9
|
+
# Used by Datadog::Profiling::TraceIdentifiers::Helper to get the trace identifiers (root span id and span id)
|
|
10
|
+
# for a given thread, if there is an active trace for that thread in the supplied tracer object.
|
|
11
|
+
class Ddtrace
|
|
12
|
+
def initialize(tracer:)
|
|
13
|
+
@tracer = (tracer if tracer.respond_to?(:call_context))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def trace_identifiers_for(thread)
|
|
17
|
+
return unless @tracer
|
|
18
|
+
|
|
19
|
+
context = @tracer.call_context(thread)
|
|
20
|
+
return unless context
|
|
21
|
+
|
|
22
|
+
span, root_span = context.current_span_and_root_span
|
|
23
|
+
return unless span && root_span
|
|
24
|
+
|
|
25
|
+
root_span_id = root_span.span_id || 0
|
|
26
|
+
span_id = span.span_id || 0
|
|
27
|
+
|
|
28
|
+
[root_span_id, span_id, maybe_extract_resource(root_span)] if root_span_id != 0 && span_id != 0
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# NOTE: Currently we're only interested in HTTP service endpoints. Over time, this list may be expanded.
|
|
34
|
+
# Resources MUST NOT include personal identifiable information (PII); this should not be the case with
|
|
35
|
+
# ddtrace integrations, but worth mentioning just in case :)
|
|
36
|
+
def maybe_extract_resource(root_span)
|
|
37
|
+
root_span.resource if root_span.span_type == Datadog::Ext::HTTP::TYPE_INBOUND
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/profiling/trace_identifiers/ddtrace'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Profiling
|
|
8
|
+
module TraceIdentifiers
|
|
9
|
+
# Helper used to retrieve the trace identifiers (root span id and span id) for a given thread,
|
|
10
|
+
# if there is an active trace for that thread for the supported tracing APIs.
|
|
11
|
+
#
|
|
12
|
+
# This data is used to connect profiles to the traces -- samples in a profile will be tagged with this data and
|
|
13
|
+
# the profile can be filtered down to look at only the samples for a given trace.
|
|
14
|
+
class Helper
|
|
15
|
+
DEFAULT_SUPPORTED_APIS = [
|
|
16
|
+
::Datadog::Profiling::TraceIdentifiers::Ddtrace
|
|
17
|
+
].freeze
|
|
18
|
+
private_constant :DEFAULT_SUPPORTED_APIS
|
|
19
|
+
|
|
20
|
+
def initialize(
|
|
21
|
+
tracer:,
|
|
22
|
+
# If this is disabled, the helper will strip the optional trace_resource_container even if provided by the api
|
|
23
|
+
endpoint_collection_enabled:,
|
|
24
|
+
supported_apis: DEFAULT_SUPPORTED_APIS.map { |api| api.new(tracer: tracer) }
|
|
25
|
+
)
|
|
26
|
+
@endpoint_collection_enabled = endpoint_collection_enabled
|
|
27
|
+
@supported_apis = supported_apis
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Expected output of the #trace_identifiers_for
|
|
31
|
+
# duck type is [root_span_id, span_id, (optional trace_resource_container)]
|
|
32
|
+
def trace_identifiers_for(thread)
|
|
33
|
+
@supported_apis.each do |api|
|
|
34
|
+
trace_identifiers = api.trace_identifiers_for(thread)
|
|
35
|
+
|
|
36
|
+
if trace_identifiers
|
|
37
|
+
return @endpoint_collection_enabled ? trace_identifiers : trace_identifiers[0..1]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Profiling
|
|
4
|
+
module Transport
|
|
5
|
+
# Generic interface for profiling transports
|
|
6
|
+
module Client
|
|
7
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
8
|
+
|
|
9
|
+
def send_profiling_flush(flush)
|
|
10
|
+
raise NotImplementedError
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/ext/profiling'
|
|
3
|
+
require 'ddtrace/utils/compression'
|
|
4
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
|
|
5
|
+
|
|
6
|
+
require 'ddtrace/transport/http/api/endpoint'
|
|
7
|
+
require 'ddtrace/profiling/transport/http/response'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Profiling
|
|
11
|
+
module Transport
|
|
12
|
+
module HTTP
|
|
13
|
+
module API
|
|
14
|
+
# Datadog API endpoint for profiling
|
|
15
|
+
class Endpoint < Datadog::Transport::HTTP::API::Endpoint
|
|
16
|
+
include Datadog::Ext::Profiling::Transport::HTTP
|
|
17
|
+
|
|
18
|
+
# These tags are read from the flush object (see below) directly and so we ignore any extra copies that
|
|
19
|
+
# may come in the tags hash to avoid duplicates.
|
|
20
|
+
TAGS_TO_IGNORE_IN_TAGS_HASH = %w[service env version].freeze
|
|
21
|
+
private_constant :TAGS_TO_IGNORE_IN_TAGS_HASH
|
|
22
|
+
|
|
23
|
+
attr_reader \
|
|
24
|
+
:encoder
|
|
25
|
+
|
|
26
|
+
def initialize(path, encoder)
|
|
27
|
+
super(:post, path)
|
|
28
|
+
@encoder = encoder
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def call(env, &block)
|
|
32
|
+
# Build request
|
|
33
|
+
env.form = build_form(env)
|
|
34
|
+
|
|
35
|
+
# Send request
|
|
36
|
+
http_response = super(env, &block)
|
|
37
|
+
|
|
38
|
+
# Build response
|
|
39
|
+
Profiling::Transport::HTTP::Response.new(http_response)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def build_form(env)
|
|
43
|
+
flush = env.request.parcel.data
|
|
44
|
+
pprof_file = build_pprof(flush)
|
|
45
|
+
|
|
46
|
+
form = {
|
|
47
|
+
FORM_FIELD_INTAKE_VERSION => '3', # Aka 1.3 intake format
|
|
48
|
+
FORM_FIELD_RECORDING_START => flush.start.utc.iso8601,
|
|
49
|
+
FORM_FIELD_RECORDING_END => flush.finish.utc.iso8601,
|
|
50
|
+
FORM_FIELD_TAGS => [
|
|
51
|
+
"#{FORM_FIELD_TAG_RUNTIME}:#{flush.language}",
|
|
52
|
+
"#{FORM_FIELD_TAG_RUNTIME_ID}:#{flush.runtime_id}",
|
|
53
|
+
"#{FORM_FIELD_TAG_RUNTIME_ENGINE}:#{flush.runtime_engine}",
|
|
54
|
+
"#{FORM_FIELD_TAG_RUNTIME_PLATFORM}:#{flush.runtime_platform}",
|
|
55
|
+
"#{FORM_FIELD_TAG_RUNTIME_VERSION}:#{flush.runtime_version}",
|
|
56
|
+
"#{FORM_FIELD_TAG_PID}:#{Process.pid}",
|
|
57
|
+
"#{FORM_FIELD_TAG_PROFILER_VERSION}:#{flush.profiler_version}",
|
|
58
|
+
# NOTE: Redundant w/ 'runtime'; may want to remove this later.
|
|
59
|
+
"#{FORM_FIELD_TAG_LANGUAGE}:#{flush.language}",
|
|
60
|
+
"#{FORM_FIELD_TAG_HOST}:#{flush.host}",
|
|
61
|
+
*flush
|
|
62
|
+
.tags
|
|
63
|
+
.reject { |tag_key| TAGS_TO_IGNORE_IN_TAGS_HASH.include?(tag_key) }
|
|
64
|
+
.map { |tag_key, tag_value| "#{tag_key}:#{tag_value}" }
|
|
65
|
+
],
|
|
66
|
+
FORM_FIELD_PPROF_DATA => pprof_file,
|
|
67
|
+
FORM_FIELD_FAMILY => flush.language,
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# Optional fields
|
|
71
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_SERVICE}:#{flush.service}" unless flush.service.nil?
|
|
72
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_ENV}:#{flush.env}" unless flush.env.nil?
|
|
73
|
+
form[FORM_FIELD_TAGS] << "#{FORM_FIELD_TAG_VERSION}:#{flush.version}" unless flush.version.nil?
|
|
74
|
+
|
|
75
|
+
form
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def build_pprof(flush)
|
|
79
|
+
pprof = encoder.encode(flush)
|
|
80
|
+
|
|
81
|
+
gzipped_pprof_data = Datadog::Utils::Compression.gzip(pprof.data)
|
|
82
|
+
|
|
83
|
+
Datadog::Vendor::Multipart::Post::UploadIO.new(
|
|
84
|
+
StringIO.new(gzipped_pprof_data),
|
|
85
|
+
HEADER_CONTENT_TYPE_OCTET_STREAM,
|
|
86
|
+
PPROF_DEFAULT_FILENAME
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/api/instance'
|
|
3
|
+
require 'ddtrace/profiling/transport/http/api/spec'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Profiling
|
|
7
|
+
module Transport
|
|
8
|
+
module HTTP
|
|
9
|
+
module API
|
|
10
|
+
# API instance for profiling
|
|
11
|
+
class Instance < Datadog::Transport::HTTP::API::Instance
|
|
12
|
+
def send_profiling_flush(env)
|
|
13
|
+
raise ProfilesNotSupportedError, spec unless spec.is_a?(Spec)
|
|
14
|
+
|
|
15
|
+
spec.send_profiling_flush(env) do |request_env|
|
|
16
|
+
call(request_env)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Raised when profiles sent to API that does not support profiles
|
|
21
|
+
class ProfilesNotSupportedError < StandardError
|
|
22
|
+
attr_reader :spec
|
|
23
|
+
|
|
24
|
+
def initialize(spec)
|
|
25
|
+
@spec = spec
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def message
|
|
29
|
+
'Profiles not supported for this API!'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/api/spec'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Profiling
|
|
6
|
+
module Transport
|
|
7
|
+
module HTTP
|
|
8
|
+
module API
|
|
9
|
+
# API specification for profiling
|
|
10
|
+
class Spec < Datadog::Transport::HTTP::API::Spec
|
|
11
|
+
attr_accessor \
|
|
12
|
+
:profiles
|
|
13
|
+
|
|
14
|
+
def send_profiling_flush(env, &block)
|
|
15
|
+
raise NoProfilesEndpointDefinedError, self if profiles.nil?
|
|
16
|
+
|
|
17
|
+
profiles.call(env, &block)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def encoder
|
|
21
|
+
profiles.encoder
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Raised when profiles sent but no profiles endpoint is defined
|
|
25
|
+
class NoProfilesEndpointDefinedError < StandardError
|
|
26
|
+
attr_reader :spec
|
|
27
|
+
|
|
28
|
+
def initialize(spec)
|
|
29
|
+
@spec = spec
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def message
|
|
33
|
+
'No profiles endpoint is defined for API specification!'
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/api/map'
|
|
3
|
+
require 'ddtrace/profiling/encoding/profile'
|
|
4
|
+
require 'ddtrace/profiling/transport/http/api/spec'
|
|
5
|
+
require 'ddtrace/profiling/transport/http/api/instance'
|
|
6
|
+
require 'ddtrace/profiling/transport/http/api/endpoint'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Profiling
|
|
10
|
+
module Transport
|
|
11
|
+
module HTTP
|
|
12
|
+
# Extensions for HTTP API Spec
|
|
13
|
+
module API
|
|
14
|
+
# Default API versions
|
|
15
|
+
V1 = 'v1'.freeze
|
|
16
|
+
|
|
17
|
+
module_function
|
|
18
|
+
|
|
19
|
+
def agent_defaults
|
|
20
|
+
@agent_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
21
|
+
V1 => Spec.new do |s|
|
|
22
|
+
s.profiles = Endpoint.new(
|
|
23
|
+
'/profiling/v1/input'.freeze,
|
|
24
|
+
Profiling::Encoding::Profile::Protobuf
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def api_defaults
|
|
31
|
+
@api_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
32
|
+
V1 => Spec.new do |s|
|
|
33
|
+
s.profiles = Endpoint.new(
|
|
34
|
+
'/v1/input'.freeze,
|
|
35
|
+
Profiling::Encoding::Profile::Protobuf
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/builder'
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/profiling/transport/http/api'
|
|
5
|
+
require 'ddtrace/profiling/transport/http/client'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Profiling
|
|
9
|
+
module Transport
|
|
10
|
+
module HTTP
|
|
11
|
+
# Builds new instances of Transport::HTTP::Client
|
|
12
|
+
class Builder < Datadog::Transport::HTTP::Builder
|
|
13
|
+
def api_instance_class
|
|
14
|
+
API::Instance
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def to_transport
|
|
18
|
+
raise Datadog::Transport::HTTP::Builder::NoDefaultApiError if @default_api.nil?
|
|
19
|
+
|
|
20
|
+
# TODO: Profiling doesn't have multiple APIs yet.
|
|
21
|
+
# When it does, we should build it out with these APIs.
|
|
22
|
+
# Just use :default_api for now.
|
|
23
|
+
Client.new(to_api_instances[@default_api])
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/client'
|
|
3
|
+
require 'ddtrace/profiling/transport/client'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Profiling
|
|
7
|
+
module Transport
|
|
8
|
+
module HTTP
|
|
9
|
+
# Routes, encodes, and sends tracer data to the trace agent via HTTP.
|
|
10
|
+
class Client < Datadog::Transport::HTTP::Client
|
|
11
|
+
include Transport::Client
|
|
12
|
+
|
|
13
|
+
def send_profiling_flush(flush)
|
|
14
|
+
# Build a request
|
|
15
|
+
request = Profiling::Transport::Request.new(flush)
|
|
16
|
+
send_payload(request).tap do |response|
|
|
17
|
+
if response.ok?
|
|
18
|
+
Datadog.logger.debug('Successfully reported profiling data')
|
|
19
|
+
else
|
|
20
|
+
Datadog.logger.debug { "Failed to report profiling data -- #{response.inspect}" }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def send_payload(request)
|
|
26
|
+
send_request(request) do |api, env|
|
|
27
|
+
api.send_profiling_flush(env)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/http/response'
|
|
3
|
+
require 'ddtrace/profiling/transport/response'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Profiling
|
|
7
|
+
module Transport
|
|
8
|
+
# HTTP transport behavior for profiling
|
|
9
|
+
module HTTP
|
|
10
|
+
# Response from HTTP transport for profiling
|
|
11
|
+
class Response
|
|
12
|
+
include Datadog::Transport::HTTP::Response
|
|
13
|
+
include Profiling::Transport::Response
|
|
14
|
+
|
|
15
|
+
def initialize(http_response, options = {})
|
|
16
|
+
super(http_response)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'datadog/core/environment/ext'
|
|
3
|
+
require 'ddtrace/ext/transport'
|
|
4
|
+
|
|
5
|
+
require 'datadog/core/environment/container'
|
|
6
|
+
require 'datadog/core/environment/variable_helpers'
|
|
7
|
+
|
|
8
|
+
require 'ddtrace/profiling/transport/http/builder'
|
|
9
|
+
require 'ddtrace/profiling/transport/http/api'
|
|
10
|
+
|
|
11
|
+
require 'ddtrace/transport/http/adapters/net'
|
|
12
|
+
require 'ddtrace/transport/http/adapters/test'
|
|
13
|
+
require 'ddtrace/transport/http/adapters/unix_socket'
|
|
14
|
+
|
|
15
|
+
module Datadog
|
|
16
|
+
module Profiling
|
|
17
|
+
module Transport
|
|
18
|
+
# Namespace for HTTP transport components
|
|
19
|
+
module HTTP
|
|
20
|
+
# Builds a new Transport::HTTP::Client
|
|
21
|
+
def self.new(&block)
|
|
22
|
+
Builder.new(&block).to_transport
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Builds a new Transport::HTTP::Client with default settings
|
|
26
|
+
def self.default(
|
|
27
|
+
profiling_upload_timeout_seconds:,
|
|
28
|
+
agent_settings:,
|
|
29
|
+
site: nil,
|
|
30
|
+
api_key: nil,
|
|
31
|
+
agentless_allowed: agentless_allowed?
|
|
32
|
+
)
|
|
33
|
+
new do |transport|
|
|
34
|
+
transport.headers default_headers
|
|
35
|
+
|
|
36
|
+
# Configure adapter & API
|
|
37
|
+
if site && api_key && agentless_allowed
|
|
38
|
+
configure_for_agentless(
|
|
39
|
+
transport,
|
|
40
|
+
profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
|
|
41
|
+
site: site,
|
|
42
|
+
api_key: api_key
|
|
43
|
+
)
|
|
44
|
+
else
|
|
45
|
+
configure_for_agent(
|
|
46
|
+
transport,
|
|
47
|
+
profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
|
|
48
|
+
agent_settings: agent_settings
|
|
49
|
+
)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def self.default_headers
|
|
55
|
+
{
|
|
56
|
+
Datadog::Ext::Transport::HTTP::HEADER_META_LANG => Core::Environment::Ext::LANG,
|
|
57
|
+
Datadog::Ext::Transport::HTTP::HEADER_META_LANG_VERSION => Core::Environment::Ext::LANG_VERSION,
|
|
58
|
+
Datadog::Ext::Transport::HTTP::HEADER_META_LANG_INTERPRETER => Core::Environment::Ext::LANG_INTERPRETER,
|
|
59
|
+
Datadog::Ext::Transport::HTTP::HEADER_META_TRACER_VERSION => Core::Environment::Ext::TRACER_VERSION
|
|
60
|
+
}.tap do |headers|
|
|
61
|
+
# Add container ID, if present.
|
|
62
|
+
container_id = Datadog::Core::Environment::Container.container_id
|
|
63
|
+
headers[Datadog::Ext::Transport::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private_class_method def self.configure_for_agent(transport, profiling_upload_timeout_seconds:, agent_settings:)
|
|
68
|
+
apis = API.agent_defaults
|
|
69
|
+
|
|
70
|
+
transport.adapter(agent_settings.merge(timeout_seconds: profiling_upload_timeout_seconds))
|
|
71
|
+
transport.api(API::V1, apis[API::V1], default: true)
|
|
72
|
+
|
|
73
|
+
# NOTE: This proc, when it exists, usually overrides the transport specified above
|
|
74
|
+
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
75
|
+
agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private_class_method def self.configure_for_agentless(transport, profiling_upload_timeout_seconds:, site:, api_key:)
|
|
80
|
+
apis = API.api_defaults
|
|
81
|
+
|
|
82
|
+
site_uri = URI(format(Datadog::Ext::Profiling::Transport::HTTP::URI_TEMPLATE_DD_API, site))
|
|
83
|
+
hostname = site_uri.host
|
|
84
|
+
port = site_uri.port
|
|
85
|
+
|
|
86
|
+
transport.adapter(
|
|
87
|
+
Datadog::Ext::Transport::HTTP::ADAPTER,
|
|
88
|
+
hostname,
|
|
89
|
+
port,
|
|
90
|
+
timeout: profiling_upload_timeout_seconds,
|
|
91
|
+
ssl: site_uri.scheme == 'https'
|
|
92
|
+
)
|
|
93
|
+
transport.api(API::V1, apis[API::V1], default: true)
|
|
94
|
+
transport.headers(Datadog::Ext::Transport::HTTP::HEADER_DD_API_KEY => api_key)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private_class_method def self.agentless_allowed?
|
|
98
|
+
Datadog::Core::Environment::VariableHelpers.env_to_bool(Datadog::Ext::Profiling::ENV_AGENTLESS, false)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Add adapters to registry
|
|
102
|
+
Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Net,
|
|
103
|
+
Datadog::Ext::Transport::HTTP::ADAPTER)
|
|
104
|
+
Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::Test,
|
|
105
|
+
Datadog::Ext::Transport::Test::ADAPTER)
|
|
106
|
+
Datadog::Transport::HTTP::Builder::REGISTRY.set(Datadog::Transport::HTTP::Adapters::UnixSocket,
|
|
107
|
+
Datadog::Ext::Transport::UnixSocket::ADAPTER)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
require 'ddtrace/transport/io/client'
|
|
3
|
+
require 'ddtrace/profiling/transport/client'
|
|
4
|
+
require 'ddtrace/profiling/transport/request'
|
|
5
|
+
require 'ddtrace/profiling/transport/io/response'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Profiling
|
|
9
|
+
module Transport
|
|
10
|
+
module IO
|
|
11
|
+
# IO transport for profiling
|
|
12
|
+
class Client < Datadog::Transport::IO::Client
|
|
13
|
+
include Transport::Client
|
|
14
|
+
|
|
15
|
+
def send_profiling_flush(flush)
|
|
16
|
+
# Build a request
|
|
17
|
+
request = Profiling::Transport::Request.new(flush)
|
|
18
|
+
send_request(request)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def build_response(_request, _data, result)
|
|
22
|
+
Profiling::Transport::IO::Response.new(result)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
require 'ddtrace/transport/io/response'
|
|
3
|
+
require 'ddtrace/profiling/transport/response'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Profiling
|
|
7
|
+
module Transport
|
|
8
|
+
# IO transport behavior for profiling
|
|
9
|
+
module IO
|
|
10
|
+
# Response from IO transport for profiling
|
|
11
|
+
class Response < Datadog::Transport::IO::Response
|
|
12
|
+
include Profiling::Transport::Response
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|