ddtrace 0.40.0 → 0.54.1
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 +1667 -350
- data/CONTRIBUTING.md +3 -7
- data/LICENSE-3rdparty.csv +2 -0
- data/README.md +1 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +21 -37
- data/docs/DevelopmentGuide.md +56 -8
- data/docs/GettingStarted.md +438 -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 +166 -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 +278 -57
- 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 +10 -10
- data/lib/ddtrace/configuration/pin_setup.rb +1 -0
- data/lib/ddtrace/configuration/settings.rb +147 -13
- data/lib/ddtrace/configuration.rb +133 -22
- data/lib/ddtrace/context.rb +51 -22
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +17 -5
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events/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 +5 -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 +12 -7
- 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 +36 -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 +6 -1
- data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +3 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +40 -16
- 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 +6 -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 +15 -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 +6 -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 +14 -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 +6 -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 +73 -35
- 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 +6 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -1
- 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 +13 -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 +20 -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 +7 -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 +6 -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 +5 -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 +8 -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 +47 -17
- 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 +10 -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 +7 -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 +5 -2
- data/lib/ddtrace/contrib/sequel/dataset.rb +5 -3
- data/lib/ddtrace/contrib/sequel/ext.rb +2 -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 +16 -5
- 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 +9 -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 +57 -0
- data/lib/ddtrace/ext/runtime.rb +5 -6
- 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 +5 -1
- 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 +301 -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 +134 -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 +101 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/http.rb +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 +20 -6
- 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 +40 -15
- data/lib/ddtrace/sampler.rb +22 -11
- 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 +174 -36
- 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 +72 -62
- data/lib/ddtrace/transport/http/adapters/net.rb +48 -12
- 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 +17 -3
- 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 +28 -5
- 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 +29 -14
- 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 +32 -5
- data/lib/ddtrace/workers/polling.rb +13 -5
- data/lib/ddtrace/workers/queue.rb +3 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +22 -4
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +33 -8
- data/lib/ddtrace.rb +22 -48
- metadata +180 -374
- data/.circleci/config.yml +0 -548
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
- data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
- data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
- data/.dockerignore +0 -1
- data/.env +0 -26
- data/.github/CODEOWNERS +0 -1
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -38
- data/Appraisals +0 -1071
- data/Gemfile +0 -7
- data/Rakefile +0 -791
- 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
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# typed: ignore
|
|
1
2
|
require 'excon'
|
|
2
3
|
require 'ddtrace/ext/http'
|
|
4
|
+
require 'ddtrace/ext/integration'
|
|
3
5
|
require 'ddtrace/ext/net'
|
|
4
6
|
require 'ddtrace/ext/distributed'
|
|
5
7
|
require 'ddtrace/propagation/http_propagator'
|
|
@@ -62,6 +64,12 @@ module Datadog
|
|
|
62
64
|
@options
|
|
63
65
|
end
|
|
64
66
|
|
|
67
|
+
# default_options in this case contains our specific middleware options
|
|
68
|
+
# so we want it to take precedence in build_request_options
|
|
69
|
+
def build_request_options!(datum)
|
|
70
|
+
datadog_configuration(datum[:host]).options_hash.merge(@default_options)
|
|
71
|
+
end
|
|
72
|
+
|
|
65
73
|
def initialize(stack)
|
|
66
74
|
super(stack, self.class.options)
|
|
67
75
|
end
|
|
@@ -108,10 +116,11 @@ module Datadog
|
|
|
108
116
|
span.service = service_name(datum[:host], @options)
|
|
109
117
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
110
118
|
|
|
119
|
+
# Tag as an external peer service
|
|
120
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
121
|
+
|
|
111
122
|
# Set analytics sample rate
|
|
112
|
-
if analytics_enabled?
|
|
113
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
114
|
-
end
|
|
123
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
115
124
|
|
|
116
125
|
span.set_tag(Datadog::Ext::HTTP::URL, datum[:path])
|
|
117
126
|
span.set_tag(Datadog::Ext::HTTP::METHOD, datum[:method].to_s.upcase)
|
|
@@ -126,9 +135,7 @@ module Datadog
|
|
|
126
135
|
|
|
127
136
|
if datum.key?(:response)
|
|
128
137
|
response = datum[:response]
|
|
129
|
-
if error_handler.call(response)
|
|
130
|
-
span.set_error(["Error #{response[:status]}", response[:body]])
|
|
131
|
-
end
|
|
138
|
+
span.set_error(["Error #{response[:status]}", response[:body]]) if error_handler.call(response)
|
|
132
139
|
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response[:status])
|
|
133
140
|
end
|
|
134
141
|
span.set_error(datum[:error]) if datum.key?(:error)
|
|
@@ -145,7 +152,7 @@ module Datadog
|
|
|
145
152
|
end
|
|
146
153
|
|
|
147
154
|
def build_request_options!(datum)
|
|
148
|
-
datadog_configuration(datum[:host]).options_hash
|
|
155
|
+
@default_options.merge(datadog_configuration(datum[:host]).options_hash)
|
|
149
156
|
end
|
|
150
157
|
|
|
151
158
|
def datadog_configuration(host = :default)
|
|
@@ -1,21 +1,35 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'set'
|
|
2
|
-
require '
|
|
3
|
+
require 'datadog/contrib'
|
|
4
|
+
require 'ddtrace/configuration/settings'
|
|
3
5
|
|
|
4
6
|
module Datadog
|
|
5
7
|
module Contrib
|
|
6
8
|
# Extensions that can be added to the base library
|
|
7
9
|
# Adds registry, configuration access for integrations.
|
|
10
|
+
#
|
|
11
|
+
# DEV: The Registry should probably be part of the core tracer
|
|
12
|
+
# as it represents a global tracer repository that is strongly intertwined
|
|
13
|
+
# with the tracer lifecycle and deeply modifies the tracer initialization
|
|
14
|
+
# process.
|
|
15
|
+
# Most of this file should probably live inside the tracer core.
|
|
8
16
|
module Extensions
|
|
9
17
|
def self.extended(base)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Datadog::Configuration::Settings.send(:include, Configuration::Settings)
|
|
18
|
+
base.extend(Helpers)
|
|
19
|
+
base.extend(Configuration)
|
|
13
20
|
end
|
|
14
21
|
|
|
15
22
|
# Helper methods for Datadog module.
|
|
16
23
|
module Helpers
|
|
24
|
+
# Returns the global integration registry.
|
|
25
|
+
#
|
|
26
|
+
# This method is not safe to use while the tracer is initializing,
|
|
27
|
+
# thus access to the registry should go through
|
|
28
|
+
# ::Datadog::Contrib::REGISTRY for internal tracer work.
|
|
29
|
+
#
|
|
30
|
+
# External use of this method is always safe.
|
|
17
31
|
def registry
|
|
18
|
-
|
|
32
|
+
Contrib::REGISTRY
|
|
19
33
|
end
|
|
20
34
|
end
|
|
21
35
|
|
|
@@ -27,8 +41,27 @@ module Datadog
|
|
|
27
41
|
|
|
28
42
|
# Activate integrations
|
|
29
43
|
if target.respond_to?(:integrations_pending_activation)
|
|
44
|
+
reduce_verbosity = target.respond_to?(:reduce_verbosity?) ? target.reduce_verbosity? : false
|
|
30
45
|
target.integrations_pending_activation.each do |integration|
|
|
31
|
-
|
|
46
|
+
next unless integration.respond_to?(:patch)
|
|
47
|
+
|
|
48
|
+
# integration.patch returns either true or a hash of details on why patching failed
|
|
49
|
+
patch_results = integration.patch
|
|
50
|
+
|
|
51
|
+
next if patch_results == true
|
|
52
|
+
|
|
53
|
+
# if patching failed, only log output if verbosity is unset
|
|
54
|
+
# or if patching failure is due to compatibility or integration specific reasons
|
|
55
|
+
next unless !reduce_verbosity ||
|
|
56
|
+
((patch_results[:available] && patch_results[:loaded]) &&
|
|
57
|
+
(!patch_results[:compatible] || !patch_results[:patchable]))
|
|
58
|
+
|
|
59
|
+
desc = "Available?: #{patch_results[:available]}"
|
|
60
|
+
desc += ", Loaded? #{patch_results[:loaded]}"
|
|
61
|
+
desc += ", Compatible? #{patch_results[:compatible]}"
|
|
62
|
+
desc += ", Patchable? #{patch_results[:patchable]}"
|
|
63
|
+
|
|
64
|
+
Datadog.logger.warn("Unable to patch #{patch_results[:name]} (#{desc})")
|
|
32
65
|
end
|
|
33
66
|
|
|
34
67
|
target.integrations_pending_activation.clear
|
|
@@ -41,16 +74,51 @@ module Datadog
|
|
|
41
74
|
module Settings
|
|
42
75
|
InvalidIntegrationError = Class.new(StandardError)
|
|
43
76
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
77
|
+
# The registry only holds declarative constant values and cannot be modified.
|
|
78
|
+
# This option is a no-op and will be removed in the future.
|
|
79
|
+
#
|
|
80
|
+
# @deprecated Use `Datadog.registry` instead
|
|
81
|
+
def registry
|
|
82
|
+
Datadog.logger.warn('Deprecated access to `Datadog.configuration.registry`, use `Datadog.registry` instead.' \
|
|
83
|
+
'`Datadog.configuration.registry` will be removed in a future version.')
|
|
84
|
+
Contrib::REGISTRY
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# The registry only holds declarative constant values and cannot be modified.
|
|
88
|
+
# This option is a no-op and will be removed in the future.
|
|
89
|
+
#
|
|
90
|
+
# @deprecated The registry is now a global constant, and can't be overwritten.
|
|
91
|
+
def registry=(_arg)
|
|
92
|
+
Datadog.logger.warn('Setting a custom registry is no longer supported and was ignored. ' \
|
|
93
|
+
'Remove this assignment from your configuration to stop seeing this warning.')
|
|
49
94
|
end
|
|
50
95
|
|
|
51
|
-
|
|
96
|
+
# For the provided `integration_name`, resolves a matching configuration
|
|
97
|
+
# for the provided integration from an integration-specific `key`.
|
|
98
|
+
#
|
|
99
|
+
# How the matching is performed is integration-specific.
|
|
100
|
+
#
|
|
101
|
+
# @param [Symbol] integration_name the integration name
|
|
102
|
+
# @param [Object] key the integration-specific lookup key
|
|
103
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
|
104
|
+
def [](integration_name, key = :default)
|
|
52
105
|
integration = fetch_integration(integration_name)
|
|
53
|
-
integration.
|
|
106
|
+
integration.resolve(key) unless integration.nil?
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# For the provided `integration_name`, retrieves a configuration previously
|
|
110
|
+
# stored by `#instrument`. Specifically, `describes` should be
|
|
111
|
+
# the same value provided in the `describes:` option for `#instrument`.
|
|
112
|
+
#
|
|
113
|
+
# If no `describes` value is provided, the default configuration is returned.
|
|
114
|
+
#
|
|
115
|
+
# @param [Symbol] integration_name the integration name
|
|
116
|
+
# @param [Object] describes the previously configured `describes:` object. If `nil`,
|
|
117
|
+
# fetches the default configuration
|
|
118
|
+
# @return [Datadog::Contrib::Configuration::Settings]
|
|
119
|
+
def configuration(integration_name, describes = nil)
|
|
120
|
+
integration = fetch_integration(integration_name)
|
|
121
|
+
integration.configuration(describes) unless integration.nil?
|
|
54
122
|
end
|
|
55
123
|
|
|
56
124
|
def instrument(integration_name, options = {}, &block)
|
|
@@ -83,9 +151,17 @@ module Datadog
|
|
|
83
151
|
end
|
|
84
152
|
|
|
85
153
|
def fetch_integration(name)
|
|
86
|
-
|
|
154
|
+
Contrib::REGISTRY[name] ||
|
|
87
155
|
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
|
88
156
|
end
|
|
157
|
+
|
|
158
|
+
def reduce_verbosity?
|
|
159
|
+
defined?(@reduce_verbosity) ? @reduce_verbosity : false
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def reduce_log_verbosity
|
|
163
|
+
@reduce_verbosity ||= true
|
|
164
|
+
end
|
|
89
165
|
end
|
|
90
166
|
end
|
|
91
167
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
# typed: ignore
|
|
1
2
|
require 'faraday'
|
|
2
3
|
require 'ddtrace/ext/http'
|
|
4
|
+
require 'ddtrace/ext/integration'
|
|
3
5
|
require 'ddtrace/ext/net'
|
|
4
6
|
require 'ddtrace/propagation/http_propagator'
|
|
5
7
|
require 'ddtrace/contrib/analytics'
|
|
@@ -41,6 +43,9 @@ module Datadog
|
|
|
41
43
|
span.service = options[:split_by_domain] ? env[:url].host : options[:service_name]
|
|
42
44
|
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
43
45
|
|
|
46
|
+
# Tag as an external peer service
|
|
47
|
+
span.set_tag(Datadog::Ext::Integration::TAG_PEER_SERVICE, span.service)
|
|
48
|
+
|
|
44
49
|
# Set analytics sample rate
|
|
45
50
|
if Contrib::Analytics.enabled?(options[:analytics_enabled])
|
|
46
51
|
Contrib::Analytics.set_sample_rate(span, options[:analytics_sample_rate])
|
|
@@ -53,9 +58,7 @@ module Datadog
|
|
|
53
58
|
end
|
|
54
59
|
|
|
55
60
|
def handle_response(span, env, options)
|
|
56
|
-
if options.fetch(:error_handler).call(env)
|
|
57
|
-
span.set_error(["Error #{env[:status]}", env[:body]])
|
|
58
|
-
end
|
|
61
|
+
span.set_error(["Error #{env[:status]}", env[:body]]) if options.fetch(:error_handler).call(env)
|
|
59
62
|
|
|
60
63
|
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status])
|
|
61
64
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/contrib/patcher'
|
|
2
3
|
require 'ddtrace/ext/app_types'
|
|
3
4
|
require 'ddtrace/contrib/faraday/ext'
|
|
@@ -20,21 +21,10 @@ module Datadog
|
|
|
20
21
|
def patch
|
|
21
22
|
require 'ddtrace/contrib/faraday/middleware'
|
|
22
23
|
|
|
23
|
-
add_pin!
|
|
24
24
|
register_middleware!
|
|
25
25
|
add_default_middleware!
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
def add_pin!
|
|
29
|
-
DeprecatedPin
|
|
30
|
-
.new(
|
|
31
|
-
get_option(:service_name),
|
|
32
|
-
app: Ext::APP,
|
|
33
|
-
app_type: Datadog::Ext::AppTypes::WEB,
|
|
34
|
-
tracer: -> { get_option(:tracer) }
|
|
35
|
-
).onto(::Faraday)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
28
|
def register_middleware!
|
|
39
29
|
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
|
40
30
|
end
|
|
@@ -45,7 +35,7 @@ module Datadog
|
|
|
45
35
|
::Faraday.default_connection.use(:ddtrace)
|
|
46
36
|
|
|
47
37
|
# Patch new connection instances (e.g. +Faraday.new+)
|
|
48
|
-
::Faraday::Connection.
|
|
38
|
+
::Faraday::Connection.prepend(Connection)
|
|
49
39
|
else
|
|
50
40
|
# Patch the default connection (e.g. +Faraday.get+)
|
|
51
41
|
#
|
|
@@ -55,32 +45,7 @@ module Datadog
|
|
|
55
45
|
::Faraday.default_connection.builder.insert(idx, Middleware)
|
|
56
46
|
|
|
57
47
|
# Patch new connection instances (e.g. +Faraday.new+)
|
|
58
|
-
::Faraday::RackBuilder.
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def get_option(option)
|
|
63
|
-
Datadog.configuration[:faraday].get_option(option)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
67
|
-
# To be removed when support for Datadog::Pin with Faraday is removed.
|
|
68
|
-
class DeprecatedPin < Datadog::Pin
|
|
69
|
-
include Datadog::DeprecatedPin
|
|
70
|
-
|
|
71
|
-
DEPRECATION_WARNING = %(
|
|
72
|
-
Use of Datadog::Pin with Faraday is DEPRECATED.
|
|
73
|
-
Upgrade to the configuration API using the migration guide here:
|
|
74
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
75
|
-
|
|
76
|
-
def service_name=(service_name)
|
|
77
|
-
Datadog.configuration[:faraday][:service_name] = service_name
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def log_deprecation_warning(method_name)
|
|
81
|
-
do_once(method_name) do
|
|
82
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
83
|
-
end
|
|
48
|
+
::Faraday::RackBuilder.prepend(RackBuilder)
|
|
84
49
|
end
|
|
85
50
|
end
|
|
86
51
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/contrib/configuration/settings'
|
|
2
3
|
require 'ddtrace/ext/http'
|
|
3
4
|
require 'ddtrace/contrib/grape/ext'
|
|
5
|
+
require 'ddtrace/contrib/status_code_matcher'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
6
8
|
module Contrib
|
|
@@ -24,6 +26,12 @@ module Datadog
|
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
option :service_name, default: Ext::SERVICE_NAME
|
|
29
|
+
|
|
30
|
+
option :error_statuses, default: nil do |o|
|
|
31
|
+
o.setter do |new_value, _old_value|
|
|
32
|
+
Datadog::Contrib::StatusCodeMatcher.new(new_value) unless new_value.nil?
|
|
33
|
+
end
|
|
34
|
+
end
|
|
27
35
|
end
|
|
28
36
|
end
|
|
29
37
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/ext/http'
|
|
2
3
|
require 'ddtrace/ext/errors'
|
|
3
4
|
require 'ddtrace/contrib/analytics'
|
|
@@ -33,17 +34,27 @@ module Datadog
|
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
def endpoint_start_process(
|
|
37
|
+
def endpoint_start_process(_name, _start, _finish, _id, payload)
|
|
37
38
|
return if Thread.current[KEY_RUN]
|
|
38
39
|
return unless enabled?
|
|
39
40
|
|
|
41
|
+
# collect endpoint details
|
|
42
|
+
endpoint = payload.fetch(:endpoint)
|
|
43
|
+
api_view = api_view(endpoint.options[:for])
|
|
44
|
+
request_method = endpoint.options.fetch(:method).first
|
|
45
|
+
path = endpoint_expand_path(endpoint)
|
|
46
|
+
resource = "#{api_view} #{request_method} #{path}"
|
|
47
|
+
|
|
40
48
|
# Store the beginning of a trace
|
|
41
|
-
tracer.trace(
|
|
49
|
+
span = tracer.trace(
|
|
42
50
|
Ext::SPAN_ENDPOINT_RUN,
|
|
43
51
|
service: service_name,
|
|
44
|
-
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
52
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
|
|
53
|
+
resource: resource,
|
|
45
54
|
)
|
|
46
55
|
|
|
56
|
+
try_setting_rack_request_resource(payload, span.resource)
|
|
57
|
+
|
|
47
58
|
Thread.current[KEY_RUN] = true
|
|
48
59
|
rescue StandardError => e
|
|
49
60
|
Datadog.logger.error(e.message)
|
|
@@ -51,6 +62,7 @@ module Datadog
|
|
|
51
62
|
|
|
52
63
|
def endpoint_run(name, start, finish, id, payload)
|
|
53
64
|
return unless Thread.current[KEY_RUN]
|
|
65
|
+
|
|
54
66
|
Thread.current[KEY_RUN] = false
|
|
55
67
|
|
|
56
68
|
return unless enabled?
|
|
@@ -60,42 +72,32 @@ module Datadog
|
|
|
60
72
|
|
|
61
73
|
begin
|
|
62
74
|
# collect endpoint details
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
else
|
|
70
|
-
api.to_s
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
path = payload[:endpoint].options[:path].join('/')
|
|
74
|
-
resource = "#{api_view}##{path}"
|
|
75
|
-
span.resource = resource
|
|
76
|
-
|
|
77
|
-
# set the request span resource if it's a `rack.request` span
|
|
78
|
-
request_span = payload[:env][Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
|
79
|
-
if !request_span.nil? && request_span.name == Datadog::Contrib::Rack::Ext::SPAN_REQUEST
|
|
80
|
-
request_span.resource = resource
|
|
81
|
-
end
|
|
75
|
+
endpoint = payload.fetch(:endpoint)
|
|
76
|
+
api_view = api_view(endpoint.options[:for])
|
|
77
|
+
request_method = endpoint.options.fetch(:method).first
|
|
78
|
+
path = endpoint_expand_path(endpoint)
|
|
79
|
+
|
|
80
|
+
try_setting_rack_request_resource(payload, span.resource)
|
|
82
81
|
|
|
83
82
|
# Set analytics sample rate
|
|
84
|
-
if analytics_enabled?
|
|
85
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
86
|
-
end
|
|
83
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
87
84
|
|
|
88
85
|
# Measure service stats
|
|
89
86
|
Contrib::Analytics.set_measured(span)
|
|
90
87
|
|
|
91
88
|
# catch thrown exceptions
|
|
92
|
-
|
|
89
|
+
|
|
90
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
93
91
|
|
|
94
92
|
# override the current span with this notification values
|
|
95
93
|
span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
|
|
96
94
|
span.set_tag(Ext::TAG_ROUTE_PATH, path)
|
|
95
|
+
span.set_tag(Ext::TAG_ROUTE_METHOD, request_method)
|
|
96
|
+
|
|
97
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, request_method)
|
|
98
|
+
span.set_tag(Datadog::Ext::HTTP::URL, path)
|
|
97
99
|
ensure
|
|
98
|
-
span.
|
|
100
|
+
span.start(start)
|
|
99
101
|
span.finish(finish)
|
|
100
102
|
end
|
|
101
103
|
rescue StandardError => e
|
|
@@ -120,6 +122,7 @@ module Datadog
|
|
|
120
122
|
|
|
121
123
|
def endpoint_render(name, start, finish, id, payload)
|
|
122
124
|
return unless Thread.current[KEY_RENDER]
|
|
125
|
+
|
|
123
126
|
Thread.current[KEY_RENDER] = false
|
|
124
127
|
|
|
125
128
|
return unless enabled?
|
|
@@ -132,9 +135,9 @@ module Datadog
|
|
|
132
135
|
# Measure service stats
|
|
133
136
|
Contrib::Analytics.set_measured(span)
|
|
134
137
|
|
|
135
|
-
span.set_error(payload[:exception_object])
|
|
138
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
136
139
|
ensure
|
|
137
|
-
span.
|
|
140
|
+
span.start(start)
|
|
138
141
|
span.finish(finish)
|
|
139
142
|
end
|
|
140
143
|
rescue StandardError => e
|
|
@@ -153,23 +156,23 @@ module Datadog
|
|
|
153
156
|
span = tracer.trace(
|
|
154
157
|
Ext::SPAN_ENDPOINT_RUN_FILTERS,
|
|
155
158
|
service: service_name,
|
|
156
|
-
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
159
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
|
|
160
|
+
start_time: start
|
|
157
161
|
)
|
|
158
162
|
|
|
159
163
|
begin
|
|
160
164
|
# Set analytics sample rate
|
|
161
|
-
if analytics_enabled?
|
|
162
|
-
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
163
|
-
end
|
|
165
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
164
166
|
|
|
165
167
|
# Measure service stats
|
|
166
168
|
Contrib::Analytics.set_measured(span)
|
|
167
169
|
|
|
168
170
|
# catch thrown exceptions
|
|
169
|
-
span.set_error(payload[:exception_object])
|
|
171
|
+
span.set_error(payload[:exception_object]) if exception_is_error?(payload[:exception_object])
|
|
172
|
+
|
|
170
173
|
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
171
174
|
ensure
|
|
172
|
-
span.
|
|
175
|
+
span.start(start)
|
|
173
176
|
span.finish(finish)
|
|
174
177
|
end
|
|
175
178
|
rescue StandardError => e
|
|
@@ -178,6 +181,25 @@ module Datadog
|
|
|
178
181
|
|
|
179
182
|
private
|
|
180
183
|
|
|
184
|
+
def api_view(api)
|
|
185
|
+
# If the API inherits from Grape::API in version >= 1.2.0
|
|
186
|
+
# then the API will be an instance and the name must be derived from the base.
|
|
187
|
+
# See https://github.com/ruby-grape/grape/issues/1825
|
|
188
|
+
if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
|
|
189
|
+
api.base.to_s
|
|
190
|
+
else
|
|
191
|
+
api.to_s
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def endpoint_expand_path(endpoint)
|
|
196
|
+
route_path = endpoint.options[:path]
|
|
197
|
+
namespace = endpoint.routes.first && endpoint.routes.first.namespace || ''
|
|
198
|
+
|
|
199
|
+
parts = (namespace.split('/') + route_path).reject { |p| p.blank? || p.eql?('/') }
|
|
200
|
+
parts.join('/').prepend('/')
|
|
201
|
+
end
|
|
202
|
+
|
|
181
203
|
def tracer
|
|
182
204
|
datadog_configuration[:tracer]
|
|
183
205
|
end
|
|
@@ -194,6 +216,15 @@ module Datadog
|
|
|
194
216
|
datadog_configuration[:analytics_sample_rate]
|
|
195
217
|
end
|
|
196
218
|
|
|
219
|
+
def exception_is_error?(exception)
|
|
220
|
+
matcher = datadog_configuration[:error_statuses]
|
|
221
|
+
return false unless exception
|
|
222
|
+
return true unless matcher
|
|
223
|
+
return true unless exception.respond_to?('status')
|
|
224
|
+
|
|
225
|
+
matcher.include?(exception.status)
|
|
226
|
+
end
|
|
227
|
+
|
|
197
228
|
def enabled?
|
|
198
229
|
datadog_configuration[:enabled] == true
|
|
199
230
|
end
|
|
@@ -201,6 +232,13 @@ module Datadog
|
|
|
201
232
|
def datadog_configuration
|
|
202
233
|
Datadog.configuration[:grape]
|
|
203
234
|
end
|
|
235
|
+
|
|
236
|
+
def try_setting_rack_request_resource(payload, resource)
|
|
237
|
+
request_span = payload[:env][Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
|
238
|
+
if !request_span.nil? && request_span.name == Datadog::Contrib::Rack::Ext::SPAN_REQUEST
|
|
239
|
+
request_span.resource = resource
|
|
240
|
+
end
|
|
241
|
+
end
|
|
204
242
|
end
|
|
205
243
|
end
|
|
206
244
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module Contrib
|
|
3
4
|
module Grape
|
|
@@ -16,6 +17,7 @@ module Datadog
|
|
|
16
17
|
TAG_FILTER_TYPE = 'grape.filter.type'.freeze
|
|
17
18
|
TAG_ROUTE_ENDPOINT = 'grape.route.endpoint'.freeze
|
|
18
19
|
TAG_ROUTE_PATH = 'grape.route.path'.freeze
|
|
20
|
+
TAG_ROUTE_METHOD = 'grape.route.method'.freeze
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
end
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
module Datadog
|
|
2
3
|
module Contrib
|
|
3
4
|
module Grape
|
|
4
5
|
# Instrumentation for Grape::Endpoint
|
|
5
6
|
module Instrumentation
|
|
6
7
|
def self.included(base)
|
|
7
|
-
base.singleton_class.
|
|
8
|
-
base.
|
|
8
|
+
base.singleton_class.prepend(ClassMethods)
|
|
9
|
+
base.prepend(InstanceMethods)
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
# ClassMethods - implementing instrumentation
|
|
@@ -23,7 +24,7 @@ module Datadog
|
|
|
23
24
|
# InstanceMethods - implementing instrumentation
|
|
24
25
|
module InstanceMethods
|
|
25
26
|
def run(*args)
|
|
26
|
-
::ActiveSupport::Notifications.instrument('endpoint_run.grape.start_process')
|
|
27
|
+
::ActiveSupport::Notifications.instrument('endpoint_run.grape.start_process', endpoint: self, env: env)
|
|
27
28
|
super
|
|
28
29
|
end
|
|
29
30
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/contrib/patcher'
|
|
2
3
|
require 'ddtrace/ext/app_types'
|
|
3
4
|
|
|
@@ -20,53 +21,11 @@ module Datadog
|
|
|
20
21
|
|
|
21
22
|
def patch
|
|
22
23
|
# Patch endpoints
|
|
23
|
-
::Grape::Endpoint.
|
|
24
|
-
|
|
25
|
-
add_pin!
|
|
24
|
+
::Grape::Endpoint.include(Instrumentation)
|
|
26
25
|
|
|
27
26
|
# Subscribe to ActiveSupport events
|
|
28
27
|
Datadog::Contrib::Grape::Endpoint.subscribe
|
|
29
28
|
end
|
|
30
|
-
|
|
31
|
-
def add_pin!
|
|
32
|
-
# Attach a Pin object globally and set the service once
|
|
33
|
-
pin = DeprecatedPin.new(
|
|
34
|
-
get_option(:service_name),
|
|
35
|
-
app: Ext::APP,
|
|
36
|
-
app_type: Datadog::Ext::AppTypes::WEB,
|
|
37
|
-
tracer: -> { get_option(:tracer) }
|
|
38
|
-
)
|
|
39
|
-
pin.onto(::Grape)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def get_option(option)
|
|
43
|
-
Datadog.configuration[:grape].get_option(option)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
47
|
-
# To be removed when support for Datadog::Pin with Grape is removed.
|
|
48
|
-
class DeprecatedPin < Datadog::Pin
|
|
49
|
-
include Datadog::DeprecatedPin
|
|
50
|
-
|
|
51
|
-
DEPRECATION_WARNING = %(
|
|
52
|
-
Use of Datadog::Pin with Grape is DEPRECATED.
|
|
53
|
-
Upgrade to the configuration API using the migration guide here:
|
|
54
|
-
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
55
|
-
|
|
56
|
-
def tracer=(tracer)
|
|
57
|
-
Datadog.configuration[:grape][:tracer] = tracer
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def service_name=(service_name)
|
|
61
|
-
Datadog.configuration[:grape][:service_name] = service_name
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def log_deprecation_warning(method_name)
|
|
65
|
-
do_once(method_name) do
|
|
66
|
-
Datadog.logger.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
29
|
end
|
|
71
30
|
end
|
|
72
31
|
end
|