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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'ddtrace/configuration/option_set'
|
|
2
3
|
require 'ddtrace/configuration/option_definition'
|
|
3
4
|
require 'ddtrace/configuration/option_definition_set'
|
|
@@ -7,17 +8,15 @@ module Datadog
|
|
|
7
8
|
# Behavior for a configuration object that has options
|
|
8
9
|
module Options
|
|
9
10
|
def self.included(base)
|
|
10
|
-
base.
|
|
11
|
-
base.
|
|
11
|
+
base.extend(ClassMethods)
|
|
12
|
+
base.include(InstanceMethods)
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
# Class behavior for a configuration object with options
|
|
15
16
|
module ClassMethods
|
|
16
17
|
def options
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
20
|
-
end
|
|
18
|
+
# Allows for class inheritance of option definitions
|
|
19
|
+
@options ||= superclass <= Options ? superclass.options.dup : OptionDefinitionSet.new
|
|
21
20
|
end
|
|
22
21
|
|
|
23
22
|
protected
|
|
@@ -51,6 +50,7 @@ module Datadog
|
|
|
51
50
|
def define_helpers(helpers)
|
|
52
51
|
helpers.each do |name, block|
|
|
53
52
|
next unless block.is_a?(Proc)
|
|
53
|
+
|
|
54
54
|
define_method(name, &block)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
@@ -102,9 +102,7 @@ module Datadog
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
def assert_valid_option!(name)
|
|
105
|
-
unless option_defined?(name)
|
|
106
|
-
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}")
|
|
107
|
-
end
|
|
105
|
+
raise(InvalidOptionError, "#{self.class.name} doesn't define the option: #{name}") unless option_defined?(name)
|
|
108
106
|
end
|
|
109
107
|
end
|
|
110
108
|
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
# typed: false
|
|
1
2
|
require 'logger'
|
|
2
3
|
require 'ddtrace/configuration/base'
|
|
3
4
|
|
|
4
5
|
require 'ddtrace/ext/analytics'
|
|
5
6
|
require 'ddtrace/ext/distributed'
|
|
6
|
-
require 'ddtrace/ext/
|
|
7
|
+
require 'ddtrace/ext/environment'
|
|
8
|
+
require 'ddtrace/ext/profiling'
|
|
7
9
|
require 'ddtrace/ext/sampling'
|
|
10
|
+
require 'ddtrace/ext/test'
|
|
8
11
|
|
|
9
12
|
module Datadog
|
|
10
13
|
module Configuration
|
|
@@ -13,9 +16,32 @@ module Datadog
|
|
|
13
16
|
class Settings
|
|
14
17
|
include Base
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
def initialize(*_)
|
|
20
|
+
super
|
|
21
|
+
|
|
22
|
+
# WORKAROUND: The values for services, version, and env can get set either directly OR as a side effect of
|
|
23
|
+
# accessing tags (reading or writing). This is of course really confusing and error-prone, e.g. in an app
|
|
24
|
+
# WITHOUT this workaround where you define `DD_TAGS=env:envenvtag,service:envservicetag,version:envversiontag`
|
|
25
|
+
# and do:
|
|
26
|
+
#
|
|
27
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
28
|
+
# Datadog.configuration.tags
|
|
29
|
+
# puts Datadog.configuration.instance_exec { "#{service} #{env} #{version}" }
|
|
30
|
+
#
|
|
31
|
+
# the output will be:
|
|
32
|
+
#
|
|
33
|
+
# [empty]
|
|
34
|
+
# envservicetag envenvtag envversiontag
|
|
35
|
+
#
|
|
36
|
+
# That is -- the proper values for service/env/version are only set AFTER something accidentally or not triggers
|
|
37
|
+
# the resolution of the tags.
|
|
38
|
+
# This is really confusing, error prone, etc, so calling tags here is a really hacky but effective way to
|
|
39
|
+
# avoid this. I could not think of a better way of fixing this issue without massive refactoring of tags parsing
|
|
40
|
+
# (so that the individual service/env/version get correctly set even from their tags values, not as a side
|
|
41
|
+
# effect). Sorry :(
|
|
42
|
+
tags
|
|
43
|
+
end
|
|
44
|
+
|
|
19
45
|
settings :analytics do
|
|
20
46
|
option :enabled do |o|
|
|
21
47
|
o.default { env_to_bool(Ext::Analytics::ENV_TRACE_ANALYTICS_ENABLED, nil) }
|
|
@@ -69,7 +95,8 @@ module Datadog
|
|
|
69
95
|
option :propagation_extract_style do |o|
|
|
70
96
|
o.default do
|
|
71
97
|
# Look for all headers by default
|
|
72
|
-
env_to_list(Ext::DistributedTracing::
|
|
98
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_EXTRACT_ENV,
|
|
99
|
+
Ext::DistributedTracing::PROPAGATION_EXTRACT_STYLE_ENV_OLD],
|
|
73
100
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG,
|
|
74
101
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3,
|
|
75
102
|
Ext::DistributedTracing::PROPAGATION_STYLE_B3_SINGLE_HEADER])
|
|
@@ -81,7 +108,8 @@ module Datadog
|
|
|
81
108
|
option :propagation_inject_style do |o|
|
|
82
109
|
o.default do
|
|
83
110
|
# Only inject Datadog headers by default
|
|
84
|
-
env_to_list(Ext::DistributedTracing::
|
|
111
|
+
env_to_list([Ext::DistributedTracing::PROPAGATION_STYLE_INJECT_ENV,
|
|
112
|
+
Ext::DistributedTracing::PROPAGATION_INJECT_STYLE_ENV_OLD],
|
|
85
113
|
[Ext::DistributedTracing::PROPAGATION_STYLE_DATADOG])
|
|
86
114
|
end
|
|
87
115
|
|
|
@@ -90,6 +118,7 @@ module Datadog
|
|
|
90
118
|
end
|
|
91
119
|
|
|
92
120
|
option :env do |o|
|
|
121
|
+
# NOTE: env also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
93
122
|
o.default { ENV.fetch(Ext::Environment::ENV_ENVIRONMENT, nil) }
|
|
94
123
|
o.lazy
|
|
95
124
|
end
|
|
@@ -106,6 +135,65 @@ module Datadog
|
|
|
106
135
|
get_option(:logger).instance = logger
|
|
107
136
|
end
|
|
108
137
|
|
|
138
|
+
settings :profiling do
|
|
139
|
+
option :enabled do |o|
|
|
140
|
+
o.default { env_to_bool(Ext::Profiling::ENV_ENABLED, false) }
|
|
141
|
+
o.lazy
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
settings :exporter do
|
|
145
|
+
option :transport
|
|
146
|
+
option :transport_options do |o|
|
|
147
|
+
o.setter do
|
|
148
|
+
# NOTE: As of April 2021 there may be a few profiler private beta customers with this setting, but since I'm
|
|
149
|
+
# marking this as deprecated before public beta, we can remove this for 1.0 without concern.
|
|
150
|
+
Datadog.logger.warn(
|
|
151
|
+
'Configuring the profiler c.profiling.exporter.transport_options is no longer needed, as the profiler ' \
|
|
152
|
+
'will reuse your existing global or tracer configuration. ' \
|
|
153
|
+
'This setting is deprecated for removal in a future ddtrace version ' \
|
|
154
|
+
'(1.0 or profiling GA, whichever comes first).'
|
|
155
|
+
)
|
|
156
|
+
nil
|
|
157
|
+
end
|
|
158
|
+
o.default { nil }
|
|
159
|
+
o.lazy
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
settings :advanced do
|
|
164
|
+
# This should never be reduced, as it can cause the resulting profiles to become biased.
|
|
165
|
+
# The current default should be enough for most services, allowing 16 threads to be sampled around 30 times
|
|
166
|
+
# per second for a 60 second period.
|
|
167
|
+
option :max_events, default: 32768
|
|
168
|
+
|
|
169
|
+
# Controls the maximum number of frames for each thread sampled. Can be tuned to avoid omitted frames in the
|
|
170
|
+
# produced profiles. Increasing this may increase the overhead of profiling.
|
|
171
|
+
option :max_frames do |o|
|
|
172
|
+
o.default { env_to_int(Ext::Profiling::ENV_MAX_FRAMES, 400) }
|
|
173
|
+
o.lazy
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
settings :endpoint do
|
|
177
|
+
settings :collection do
|
|
178
|
+
# When using profiling together with tracing, this controls if endpoint names
|
|
179
|
+
# are gathered and reported together with profiles.
|
|
180
|
+
option :enabled do |o|
|
|
181
|
+
o.default { env_to_bool(Ext::Profiling::ENV_ENDPOINT_COLLECTION_ENABLED, true) }
|
|
182
|
+
o.lazy
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
settings :upload do
|
|
189
|
+
option :timeout_seconds do |o|
|
|
190
|
+
o.setter { |value| value.nil? ? 30.0 : value.to_f }
|
|
191
|
+
o.default { env_to_float(Ext::Profiling::ENV_UPLOAD_TIMEOUT, 30.0) }
|
|
192
|
+
o.lazy
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
109
197
|
option :report_hostname do |o|
|
|
110
198
|
o.default { env_to_bool(Ext::NET::ENV_REPORT_HOSTNAME, false) }
|
|
111
199
|
o.lazy
|
|
@@ -154,8 +242,17 @@ module Datadog
|
|
|
154
242
|
end
|
|
155
243
|
|
|
156
244
|
option :service do |o|
|
|
157
|
-
|
|
245
|
+
# NOTE: service also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
246
|
+
o.default { ENV.fetch(Ext::Environment::ENV_SERVICE, Ext::Environment::FALLBACK_SERVICE_NAME) }
|
|
158
247
|
o.lazy
|
|
248
|
+
|
|
249
|
+
# There's a few cases where we don't want to use the fallback service name, so this helper allows us to get a
|
|
250
|
+
# nil instead so that one can do
|
|
251
|
+
# nice_service_name = Datadog.configure.service_without_fallback || nice_service_name_default
|
|
252
|
+
o.helper(:service_without_fallback) do
|
|
253
|
+
service_name = service
|
|
254
|
+
service_name unless service_name.equal?(Ext::Environment::FALLBACK_SERVICE_NAME)
|
|
255
|
+
end
|
|
159
256
|
end
|
|
160
257
|
|
|
161
258
|
option :site do |o|
|
|
@@ -182,18 +279,17 @@ module Datadog
|
|
|
182
279
|
|
|
183
280
|
o.setter do |new_value, old_value|
|
|
184
281
|
# Coerce keys to strings
|
|
185
|
-
string_tags =
|
|
282
|
+
string_tags = new_value.collect { |k, v| [k.to_s, v] }.to_h
|
|
186
283
|
|
|
187
284
|
# Cross-populate tag values with other settings
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
end
|
|
285
|
+
|
|
286
|
+
self.env = string_tags[Ext::Environment::TAG_ENV] if env.nil? && string_tags.key?(Ext::Environment::TAG_ENV)
|
|
191
287
|
|
|
192
288
|
if version.nil? && string_tags.key?(Ext::Environment::TAG_VERSION)
|
|
193
289
|
self.version = string_tags[Ext::Environment::TAG_VERSION]
|
|
194
290
|
end
|
|
195
291
|
|
|
196
|
-
if
|
|
292
|
+
if service_without_fallback.nil? && string_tags.key?(Ext::Environment::TAG_SERVICE)
|
|
197
293
|
self.service = string_tags[Ext::Environment::TAG_SERVICE]
|
|
198
294
|
end
|
|
199
295
|
|
|
@@ -204,6 +300,39 @@ module Datadog
|
|
|
204
300
|
o.lazy
|
|
205
301
|
end
|
|
206
302
|
|
|
303
|
+
settings :test_mode do
|
|
304
|
+
option :enabled do |o|
|
|
305
|
+
o.default { env_to_bool(Ext::Test::ENV_MODE_ENABLED, false) }
|
|
306
|
+
o.lazy
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
option :context_flush do |o|
|
|
310
|
+
o.default { nil }
|
|
311
|
+
o.lazy
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
option :writer_options do |o|
|
|
315
|
+
o.default { {} }
|
|
316
|
+
o.lazy
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
option :time_now_provider do |o|
|
|
321
|
+
o.default { ::Time.now }
|
|
322
|
+
|
|
323
|
+
o.on_set do |time_provider|
|
|
324
|
+
Utils::Time.now_provider = time_provider
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
o.resetter do |_value|
|
|
328
|
+
# TODO: Resetter needs access to the default value
|
|
329
|
+
# TODO: to help reduce duplication.
|
|
330
|
+
-> { ::Time.now }.tap do |default|
|
|
331
|
+
Utils::Time.now_provider = default
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
207
336
|
settings :tracer do
|
|
208
337
|
option :enabled do |o|
|
|
209
338
|
o.default { env_to_bool(Datadog::Ext::Diagnostics::DD_TRACE_ENABLED, true) }
|
|
@@ -275,6 +404,7 @@ module Datadog
|
|
|
275
404
|
end
|
|
276
405
|
|
|
277
406
|
option :version do |o|
|
|
407
|
+
# NOTE: version also gets set as a side effect of tags. See the WORKAROUND note in #initialize for details.
|
|
278
408
|
o.default { ENV.fetch(Ext::Environment::ENV_VERSION, nil) }
|
|
279
409
|
o.lazy
|
|
280
410
|
end
|
|
@@ -1,14 +1,42 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'forwardable'
|
|
2
|
-
|
|
3
3
|
require 'ddtrace/configuration/pin_setup'
|
|
4
4
|
require 'ddtrace/configuration/settings'
|
|
5
5
|
require 'ddtrace/configuration/components'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Configuration provides a unique access point for configurations
|
|
9
|
-
module Configuration
|
|
9
|
+
module Configuration # rubocop:disable Metrics/ModuleLength
|
|
10
|
+
include Kernel # Ensure that kernel methods are always available (https://sorbet.org/docs/error-reference#7003)
|
|
10
11
|
extend Forwardable
|
|
11
12
|
|
|
13
|
+
# Used to ensure that @components initialization/reconfiguration is performed one-at-a-time, by a single thread.
|
|
14
|
+
#
|
|
15
|
+
# This is important because components can end up being accessed from multiple application threads (for instance on
|
|
16
|
+
# a threaded webserver), and we don't want their initialization to clash (for instance, starting two profilers...).
|
|
17
|
+
#
|
|
18
|
+
# Note that a Mutex **IS NOT** reentrant: the same thread cannot grab the same Mutex more than once.
|
|
19
|
+
# This means below we are careful not to nest calls to methods that would trigger initialization and grab the lock.
|
|
20
|
+
#
|
|
21
|
+
# Every method that directly or indirectly mutates @components should be holding the lock (through
|
|
22
|
+
# #safely_synchronize) while doing so.
|
|
23
|
+
COMPONENTS_WRITE_LOCK = Mutex.new
|
|
24
|
+
private_constant :COMPONENTS_WRITE_LOCK
|
|
25
|
+
|
|
26
|
+
# We use a separate lock when reading the @components, so that they continue to be accessible during reconfiguration.
|
|
27
|
+
# This was needed because we ran into several issues where we still needed to read the old
|
|
28
|
+
# components while the COMPONENTS_WRITE_LOCK was being held (see https://github.com/DataDog/dd-trace-rb/pull/1387
|
|
29
|
+
# and https://github.com/DataDog/dd-trace-rb/pull/1373#issuecomment-799593022 ).
|
|
30
|
+
#
|
|
31
|
+
# Technically on MRI we could get away without this lock, but on non-MRI Rubies, we may run into issues because
|
|
32
|
+
# we fall into the "UnsafeDCLFactory" case of https://shipilev.net/blog/2014/safe-public-construction/ .
|
|
33
|
+
# Specifically, on JRuby reads from the @components do NOT have volatile semantics, and on TruffleRuby they do
|
|
34
|
+
# BUT just as an implementation detail, see https://github.com/jruby/jruby/wiki/Concurrency-in-jruby#volatility and
|
|
35
|
+
# https://github.com/DataDog/dd-trace-rb/pull/1329#issuecomment-776750377 .
|
|
36
|
+
# Concurrency is hard.
|
|
37
|
+
COMPONENTS_READ_LOCK = Mutex.new
|
|
38
|
+
private_constant :COMPONENTS_READ_LOCK
|
|
39
|
+
|
|
12
40
|
attr_writer :configuration
|
|
13
41
|
|
|
14
42
|
def configuration
|
|
@@ -19,13 +47,15 @@ module Datadog
|
|
|
19
47
|
if target.is_a?(Settings)
|
|
20
48
|
yield(target) if block_given?
|
|
21
49
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
50
|
+
safely_synchronize do |write_components|
|
|
51
|
+
write_components.call(
|
|
52
|
+
if components?
|
|
53
|
+
replace_components!(target, @components)
|
|
54
|
+
else
|
|
55
|
+
build_components(target)
|
|
56
|
+
end
|
|
57
|
+
)
|
|
58
|
+
end
|
|
29
59
|
|
|
30
60
|
target
|
|
31
61
|
else
|
|
@@ -36,40 +66,91 @@ module Datadog
|
|
|
36
66
|
def_delegators \
|
|
37
67
|
:components,
|
|
38
68
|
:health_metrics,
|
|
69
|
+
:profiler,
|
|
39
70
|
:runtime_metrics,
|
|
40
71
|
:tracer
|
|
41
72
|
|
|
42
73
|
def logger
|
|
43
|
-
|
|
74
|
+
# avoid initializing components if they didn't already exist
|
|
75
|
+
current_components = components(allow_initialization: false)
|
|
76
|
+
|
|
77
|
+
if current_components
|
|
44
78
|
@temp_logger = nil
|
|
45
|
-
|
|
79
|
+
current_components.logger
|
|
46
80
|
else
|
|
47
|
-
|
|
48
|
-
# This prevents recursive loops while initializing.
|
|
49
|
-
# e.g. Get logger --> Build components --> Log message --> Repeat...
|
|
50
|
-
@temp_logger ||= begin
|
|
51
|
-
logger = configuration.logger.instance || Datadog::Logger.new(STDOUT)
|
|
52
|
-
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
53
|
-
logger
|
|
54
|
-
end
|
|
81
|
+
logger_without_components
|
|
55
82
|
end
|
|
56
83
|
end
|
|
57
84
|
|
|
85
|
+
# Gracefully shuts down all components.
|
|
86
|
+
#
|
|
87
|
+
# Components will still respond to method calls as usual,
|
|
88
|
+
# but might not internally perform their work after shutdown.
|
|
89
|
+
#
|
|
90
|
+
# This avoids errors being raised across the host application
|
|
91
|
+
# during shutdown, while allowing for graceful decommission of resources.
|
|
92
|
+
#
|
|
93
|
+
# Components won't be automatically reinitialized after a shutdown.
|
|
58
94
|
def shutdown!
|
|
59
|
-
|
|
60
|
-
components.shutdown!
|
|
61
|
-
@components = nil
|
|
95
|
+
safely_synchronize do
|
|
96
|
+
@components.shutdown! if components?
|
|
62
97
|
end
|
|
63
98
|
end
|
|
64
99
|
|
|
65
100
|
protected
|
|
66
101
|
|
|
67
|
-
def components
|
|
68
|
-
@components
|
|
102
|
+
def components(allow_initialization: true)
|
|
103
|
+
current_components = COMPONENTS_READ_LOCK.synchronize { defined?(@components) && @components }
|
|
104
|
+
return current_components if current_components || !allow_initialization
|
|
105
|
+
|
|
106
|
+
safely_synchronize do |write_components|
|
|
107
|
+
(defined?(@components) && @components) || write_components.call(build_components(configuration))
|
|
108
|
+
end
|
|
69
109
|
end
|
|
70
110
|
|
|
71
111
|
private
|
|
72
112
|
|
|
113
|
+
# Gracefully shuts down the tracer and disposes of component references,
|
|
114
|
+
# allowing execution to start anew.
|
|
115
|
+
#
|
|
116
|
+
# In contrast with +#shutdown!+, components will be automatically
|
|
117
|
+
# reinitialized after a reset.
|
|
118
|
+
#
|
|
119
|
+
# Used internally to ensure a clean environment between test runs.
|
|
120
|
+
def reset!
|
|
121
|
+
safely_synchronize do |write_components|
|
|
122
|
+
@components.shutdown! if components?
|
|
123
|
+
write_components.call(nil)
|
|
124
|
+
configuration.reset!
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def safely_synchronize
|
|
129
|
+
# Writes to @components should only happen through this proc. Because this proc is only accessible to callers of
|
|
130
|
+
# safely_synchronize, this forces all writers to go through this method.
|
|
131
|
+
write_components = proc do |new_value|
|
|
132
|
+
COMPONENTS_READ_LOCK.synchronize { @components = new_value }
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
COMPONENTS_WRITE_LOCK.synchronize do
|
|
136
|
+
begin
|
|
137
|
+
yield write_components
|
|
138
|
+
rescue ThreadError => e
|
|
139
|
+
logger_without_components.error(
|
|
140
|
+
'Detected deadlock during ddtrace initialization. ' \
|
|
141
|
+
'Please report this at https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug' \
|
|
142
|
+
"\n\tSource:\n\t#{Array(e.backtrace).join("\n\t")}"
|
|
143
|
+
)
|
|
144
|
+
nil
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def components?
|
|
150
|
+
# This does not need to grab the COMPONENTS_READ_LOCK because it's not returning the components
|
|
151
|
+
(defined?(@components) && @components) != nil
|
|
152
|
+
end
|
|
153
|
+
|
|
73
154
|
def build_components(settings)
|
|
74
155
|
components = Components.new(settings)
|
|
75
156
|
components.startup!(settings)
|
|
@@ -83,5 +164,32 @@ module Datadog
|
|
|
83
164
|
components.startup!(settings)
|
|
84
165
|
components
|
|
85
166
|
end
|
|
167
|
+
|
|
168
|
+
def logger_without_components
|
|
169
|
+
# Use default logger without initializing components.
|
|
170
|
+
# This enables logging during initialization, otherwise we'd run into deadlocks.
|
|
171
|
+
@temp_logger ||= begin
|
|
172
|
+
logger = configuration.logger.instance || Datadog::Logger.new($stdout)
|
|
173
|
+
logger.level = configuration.diagnostics.debug ? ::Logger::DEBUG : configuration.logger.level
|
|
174
|
+
logger
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Called from our at_exit hook whenever there was a pending Interrupt exception (e.g. typically due to ctrl+c)
|
|
179
|
+
# to print a nice message whenever we're taking a bit longer than usual to finish the process.
|
|
180
|
+
def handle_interrupt_shutdown!
|
|
181
|
+
logger = Datadog.logger
|
|
182
|
+
shutdown_thread = Thread.new { shutdown! }
|
|
183
|
+
print_message_treshold_seconds = 0.2
|
|
184
|
+
|
|
185
|
+
slow_shutdown = shutdown_thread.join(print_message_treshold_seconds).nil?
|
|
186
|
+
|
|
187
|
+
if slow_shutdown
|
|
188
|
+
logger.info 'Reporting remaining data... Press ctrl+c to exit immediately.'
|
|
189
|
+
shutdown_thread.join
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
nil
|
|
193
|
+
end
|
|
86
194
|
end
|
|
87
195
|
end
|
data/lib/ddtrace/context.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
# typed: true
|
|
2
2
|
require 'ddtrace/diagnostics/health'
|
|
3
3
|
|
|
4
4
|
require 'ddtrace/context_flush'
|
|
5
5
|
require 'ddtrace/context_provider'
|
|
6
|
+
require 'ddtrace/utils/forking'
|
|
6
7
|
|
|
7
8
|
module Datadog
|
|
8
9
|
# \Context is used to keep track of a hierarchy of spans for the current
|
|
@@ -19,6 +20,8 @@ module Datadog
|
|
|
19
20
|
# This data structure is thread-safe.
|
|
20
21
|
# rubocop:disable Metrics/ClassLength
|
|
21
22
|
class Context
|
|
23
|
+
include Datadog::Utils::Forking
|
|
24
|
+
|
|
22
25
|
# 100k spans is about a 100Mb footprint
|
|
23
26
|
DEFAULT_MAX_LENGTH = 100_000
|
|
24
27
|
|
|
@@ -75,13 +78,21 @@ module Datadog
|
|
|
75
78
|
# earlier while child spans still need to finish their traced execution.
|
|
76
79
|
def current_span
|
|
77
80
|
@mutex.synchronize do
|
|
78
|
-
|
|
81
|
+
@current_span
|
|
79
82
|
end
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
def current_root_span
|
|
83
86
|
@mutex.synchronize do
|
|
84
|
-
|
|
87
|
+
@current_root_span
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Same as calling #current_span and #current_root_span, but works atomically thus preventing races when we need to
|
|
92
|
+
# retrieve both
|
|
93
|
+
def current_span_and_root_span
|
|
94
|
+
@mutex.synchronize do
|
|
95
|
+
[@current_span, @current_root_span]
|
|
85
96
|
end
|
|
86
97
|
end
|
|
87
98
|
|
|
@@ -123,6 +134,7 @@ module Datadog
|
|
|
123
134
|
# on per-instrumentation code to retrieve handle parent/child relations.
|
|
124
135
|
set_current_span(span.parent)
|
|
125
136
|
return if span.tracer.nil?
|
|
137
|
+
|
|
126
138
|
if span.parent.nil? && !all_spans_finished?
|
|
127
139
|
if Datadog.configuration.diagnostics.debug
|
|
128
140
|
opened_spans = @trace.length - @finished_spans
|
|
@@ -186,6 +198,9 @@ module Datadog
|
|
|
186
198
|
# Root span is finished at this point, we can configure it
|
|
187
199
|
annotate_for_flush!(@current_root_span)
|
|
188
200
|
|
|
201
|
+
# Allow caller to modify trace before context is reset
|
|
202
|
+
yield(trace) if block_given?
|
|
203
|
+
|
|
189
204
|
reset
|
|
190
205
|
[trace, sampled]
|
|
191
206
|
end
|
|
@@ -224,14 +239,43 @@ module Datadog
|
|
|
224
239
|
attach_origin(span) if @origin
|
|
225
240
|
end
|
|
226
241
|
|
|
242
|
+
def attach_sampling_priority(span)
|
|
243
|
+
span.set_metric(
|
|
244
|
+
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
245
|
+
@sampling_priority
|
|
246
|
+
)
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def attach_origin(span)
|
|
250
|
+
span.set_tag(
|
|
251
|
+
Ext::DistributedTracing::ORIGIN_KEY,
|
|
252
|
+
@origin
|
|
253
|
+
)
|
|
254
|
+
end
|
|
255
|
+
|
|
227
256
|
# Return a string representation of the context.
|
|
228
257
|
def to_s
|
|
229
258
|
@mutex.synchronize do
|
|
230
|
-
# rubocop:disable
|
|
259
|
+
# rubocop:disable Layout/LineLength
|
|
231
260
|
"Context(trace.length:#{@trace.length},sampled:#{@sampled},finished_spans:#{@finished_spans},current_span:#{@current_span})"
|
|
232
261
|
end
|
|
233
262
|
end
|
|
234
263
|
|
|
264
|
+
# Generates equivalent context for forked processes.
|
|
265
|
+
#
|
|
266
|
+
# When Context from parent process is forked, child process
|
|
267
|
+
# should have a Context belonging to the same trace but not
|
|
268
|
+
# have the parent process spans.
|
|
269
|
+
def fork_clone
|
|
270
|
+
self.class.new(
|
|
271
|
+
trace_id: trace_id,
|
|
272
|
+
span_id: span_id,
|
|
273
|
+
sampled: sampled?,
|
|
274
|
+
sampling_priority: sampling_priority,
|
|
275
|
+
origin: origin
|
|
276
|
+
)
|
|
277
|
+
end
|
|
278
|
+
|
|
235
279
|
private
|
|
236
280
|
|
|
237
281
|
def reset(options = {})
|
|
@@ -264,24 +308,11 @@ module Datadog
|
|
|
264
308
|
@finished_spans > 0 && @trace.length == @finished_spans
|
|
265
309
|
end
|
|
266
310
|
|
|
267
|
-
def attach_sampling_priority(span)
|
|
268
|
-
span.set_metric(
|
|
269
|
-
Ext::DistributedTracing::SAMPLING_PRIORITY_KEY,
|
|
270
|
-
@sampling_priority
|
|
271
|
-
)
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
def attach_origin(span)
|
|
275
|
-
span.set_tag(
|
|
276
|
-
Ext::DistributedTracing::ORIGIN_KEY,
|
|
277
|
-
@origin
|
|
278
|
-
)
|
|
279
|
-
end
|
|
280
|
-
|
|
281
311
|
# Return the start time of the root span, or nil if there are no spans or this is undefined.
|
|
282
312
|
def start_time
|
|
283
313
|
@mutex.synchronize do
|
|
284
314
|
return nil if @trace.empty?
|
|
315
|
+
|
|
285
316
|
@trace[0].start_time
|
|
286
317
|
end
|
|
287
318
|
end
|
|
@@ -294,11 +325,9 @@ module Datadog
|
|
|
294
325
|
end
|
|
295
326
|
|
|
296
327
|
# Iterate on each span within the trace. This is thread safe.
|
|
297
|
-
def each_span
|
|
328
|
+
def each_span(&block)
|
|
298
329
|
@mutex.synchronize do
|
|
299
|
-
@trace.each
|
|
300
|
-
yield span
|
|
301
|
-
end
|
|
330
|
+
@trace.each(&block)
|
|
302
331
|
end
|
|
303
332
|
end
|
|
304
333
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
module Datadog
|
|
2
3
|
module ContextFlush
|
|
3
4
|
# Consumes only completed traces (where all spans have finished)
|
|
@@ -9,9 +10,15 @@ module Datadog
|
|
|
9
10
|
#
|
|
10
11
|
# @return [Array<Span>] trace to be flushed, or +nil+ if the trace is not finished
|
|
11
12
|
def consume!(context)
|
|
12
|
-
trace, sampled = context
|
|
13
|
+
trace, sampled = get_trace(context)
|
|
13
14
|
trace if sampled
|
|
14
15
|
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def get_trace(context)
|
|
20
|
+
context.get
|
|
21
|
+
end
|
|
15
22
|
end
|
|
16
23
|
|
|
17
24
|
# Performs partial trace flushing to avoid large traces residing in memory for too long
|
|
@@ -34,7 +41,7 @@ module Datadog
|
|
|
34
41
|
#
|
|
35
42
|
# @return [Array<Span>] partial or complete trace to be flushed, or +nil+ if no spans are finished
|
|
36
43
|
def consume!(context)
|
|
37
|
-
trace, sampled = context
|
|
44
|
+
trace, sampled = get_trace(context)
|
|
38
45
|
|
|
39
46
|
return nil unless sampled
|
|
40
47
|
return trace if trace && !trace.empty?
|
|
@@ -42,6 +49,12 @@ module Datadog
|
|
|
42
49
|
partial_trace(context)
|
|
43
50
|
end
|
|
44
51
|
|
|
52
|
+
protected
|
|
53
|
+
|
|
54
|
+
def get_trace(context)
|
|
55
|
+
context.get
|
|
56
|
+
end
|
|
57
|
+
|
|
45
58
|
private
|
|
46
59
|
|
|
47
60
|
def partial_trace(context)
|