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
data/lib/ddtrace/span.rb
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
+
require 'time'
|
|
4
5
|
require 'ddtrace/utils'
|
|
6
|
+
require 'ddtrace/ext/distributed'
|
|
7
|
+
require 'ddtrace/ext/environment'
|
|
5
8
|
require 'ddtrace/ext/errors'
|
|
9
|
+
require 'ddtrace/ext/http'
|
|
10
|
+
require 'ddtrace/ext/net'
|
|
6
11
|
require 'ddtrace/ext/priority'
|
|
7
|
-
require 'ddtrace/environment'
|
|
8
12
|
require 'ddtrace/analytics'
|
|
9
13
|
require 'ddtrace/forced_tracing'
|
|
10
14
|
require 'ddtrace/diagnostics/health'
|
|
15
|
+
require 'ddtrace/utils/time'
|
|
11
16
|
|
|
12
17
|
module Datadog
|
|
13
18
|
# Represents a logical unit of work in the system. Each trace consists of one or more spans.
|
|
@@ -24,29 +29,45 @@ module Datadog
|
|
|
24
29
|
# The max value for a \Span identifier.
|
|
25
30
|
# Span and trace identifiers should be strictly positive and strictly inferior to this limit.
|
|
26
31
|
#
|
|
27
|
-
# Limited to
|
|
28
|
-
#
|
|
29
|
-
|
|
32
|
+
# Limited to +2<<62-1+ positive integers, as Ruby is able to represent such numbers "inline",
|
|
33
|
+
# inside a +VALUE+ scalar, thus not requiring memory allocation.
|
|
34
|
+
#
|
|
35
|
+
# The range of IDs also has to consider portability across different languages and platforms.
|
|
36
|
+
RUBY_MAX_ID = (1 << 62) - 1
|
|
30
37
|
|
|
31
38
|
# While we only generate 63-bit integers due to limitations in other languages, we support
|
|
32
39
|
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
|
33
|
-
EXTERNAL_MAX_ID =
|
|
40
|
+
EXTERNAL_MAX_ID = 1 << 64
|
|
34
41
|
|
|
35
42
|
# This limit is for numeric tags because uint64 could end up rounded.
|
|
36
|
-
NUMERIC_TAG_SIZE_RANGE = (-
|
|
43
|
+
NUMERIC_TAG_SIZE_RANGE = (-1 << 53..1 << 53).freeze
|
|
44
|
+
|
|
45
|
+
# Some associated values should always be sent as Tags, never as Metrics, regardless
|
|
46
|
+
# if their value is numeric or not.
|
|
47
|
+
# The Datadog agent will look for these values only as Tags, not Metrics.
|
|
48
|
+
# @see https://github.com/DataDog/datadog-agent/blob/2ae2cdd315bcda53166dd8fa0dedcfc448087b9d/pkg/trace/stats/aggregation.go#L13-L17
|
|
49
|
+
ENSURE_AGENT_TAGS = {
|
|
50
|
+
Ext::DistributedTracing::ORIGIN_KEY => true,
|
|
51
|
+
Ext::Environment::TAG_VERSION => true,
|
|
52
|
+
Ext::HTTP::STATUS_CODE => true,
|
|
53
|
+
Ext::NET::TAG_HOSTNAME => true
|
|
54
|
+
}.freeze
|
|
37
55
|
|
|
38
56
|
attr_accessor :name, :service, :resource, :span_type,
|
|
39
|
-
:start_time, :end_time,
|
|
40
57
|
:span_id, :trace_id, :parent_id,
|
|
41
58
|
:status, :sampled,
|
|
42
59
|
:tracer, :context
|
|
43
60
|
|
|
44
|
-
attr_reader :parent
|
|
61
|
+
attr_reader :parent, :start_time, :end_time, :resource_container
|
|
62
|
+
|
|
63
|
+
attr_writer :duration
|
|
64
|
+
|
|
45
65
|
# Create a new span linked to the given tracer. Call the \Tracer method <tt>start_span()</tt>
|
|
46
66
|
# and then <tt>finish()</tt> once the tracer operation is over.
|
|
47
67
|
#
|
|
48
68
|
# * +service+: the service name for this span
|
|
49
|
-
# * +resource+: the resource this span refers, or +name+ if it's missing
|
|
69
|
+
# * +resource+: the resource this span refers, or +name+ if it's missing.
|
|
70
|
+
# +nil+ can be used as a placeholder, when the resource value is not yet known at +#initialize+ time.
|
|
50
71
|
# * +span_type+: the type of the span (such as +http+, +db+ and so on)
|
|
51
72
|
# * +parent_id+: the identifier of the parent span
|
|
52
73
|
# * +trace_id+: the identifier of the root span for this trace
|
|
@@ -72,11 +93,20 @@ module Datadog
|
|
|
72
93
|
@parent = nil
|
|
73
94
|
@sampled = true
|
|
74
95
|
|
|
75
|
-
@start_time = nil # set by Tracer.start_span
|
|
76
|
-
@end_time = nil # set by Span.finish
|
|
77
|
-
|
|
78
96
|
@allocation_count_start = now_allocations
|
|
79
97
|
@allocation_count_finish = @allocation_count_start
|
|
98
|
+
|
|
99
|
+
# start_time and end_time track wall clock. In Ruby, wall clock
|
|
100
|
+
# has less accuracy than monotonic clock, so if possible we look to only use wall clock
|
|
101
|
+
# to measure duration when a time is supplied by the user, or if monotonic clock
|
|
102
|
+
# is unsupported.
|
|
103
|
+
@start_time = nil
|
|
104
|
+
@end_time = nil
|
|
105
|
+
|
|
106
|
+
# duration_start and duration_end track monotonic clock, and may remain nil in cases where it
|
|
107
|
+
# is known that we have to use wall clock to measure duration.
|
|
108
|
+
@duration_start = nil
|
|
109
|
+
@duration_end = nil
|
|
80
110
|
end
|
|
81
111
|
|
|
82
112
|
# Set the given key / value tag pair on the span. Keys and values
|
|
@@ -87,11 +117,8 @@ module Datadog
|
|
|
87
117
|
# Keys must be unique between tags and metrics
|
|
88
118
|
@metrics.delete(key)
|
|
89
119
|
|
|
90
|
-
#
|
|
91
|
-
|
|
92
|
-
# DEV: This is necessary because the agent looks to `meta['http.status_code']` for
|
|
93
|
-
# tagging necessary metrics
|
|
94
|
-
value = value.to_s if key == Ext::HTTP::STATUS_CODE
|
|
120
|
+
# DEV: This is necessary because the agent looks at `meta[key]`, not `metrics[key]`.
|
|
121
|
+
value = value.to_s if ENSURE_AGENT_TAGS[key]
|
|
95
122
|
|
|
96
123
|
# NOTE: Adding numeric tags as metrics is stop-gap support
|
|
97
124
|
# for numeric typed tags. Eventually they will become
|
|
@@ -160,6 +187,28 @@ module Datadog
|
|
|
160
187
|
set_tag(Ext::Errors::STACK, e.backtrace) unless e.backtrace.empty?
|
|
161
188
|
end
|
|
162
189
|
|
|
190
|
+
# Mark the span started at the current time.
|
|
191
|
+
def start(start_time = nil)
|
|
192
|
+
# A span should not be started twice. However, this is existing
|
|
193
|
+
# behavior and so we maintain it for backward compatibility for those
|
|
194
|
+
# who are using async manual instrumentation that may rely on this
|
|
195
|
+
|
|
196
|
+
@start_time = start_time || Utils::Time.now.utc
|
|
197
|
+
@duration_start = start_time.nil? ? duration_marker : nil
|
|
198
|
+
|
|
199
|
+
self
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# for backwards compatibility
|
|
203
|
+
def start_time=(time)
|
|
204
|
+
time.tap { start(time) }
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# for backwards compatibility
|
|
208
|
+
def end_time=(time)
|
|
209
|
+
time.tap { finish(time) }
|
|
210
|
+
end
|
|
211
|
+
|
|
163
212
|
# Mark the span finished at the current time and submit it.
|
|
164
213
|
def finish(finish_time = nil)
|
|
165
214
|
# A span should not be finished twice. Note that this is not thread-safe,
|
|
@@ -170,12 +219,15 @@ module Datadog
|
|
|
170
219
|
|
|
171
220
|
@allocation_count_finish = now_allocations
|
|
172
221
|
|
|
173
|
-
|
|
174
|
-
# Using now here causes 0-duration spans, still, this is expected, as we never
|
|
175
|
-
# explicitely say when it started.
|
|
176
|
-
@start_time ||= Time.now.utc
|
|
222
|
+
now = Utils::Time.now.utc
|
|
177
223
|
|
|
178
|
-
|
|
224
|
+
# Provide a default start_time if unset.
|
|
225
|
+
# Using `now` here causes duration to be 0; this is expected
|
|
226
|
+
# behavior when start_time is unknown.
|
|
227
|
+
start(finish_time || now) unless started?
|
|
228
|
+
|
|
229
|
+
@end_time = finish_time || now
|
|
230
|
+
@duration_end = finish_time.nil? ? duration_marker : nil
|
|
179
231
|
|
|
180
232
|
# Finish does not really do anything if the span is not bound to a tracer and a context.
|
|
181
233
|
return self if @tracer.nil? || @context.nil?
|
|
@@ -195,11 +247,6 @@ module Datadog
|
|
|
195
247
|
self
|
|
196
248
|
end
|
|
197
249
|
|
|
198
|
-
# Return whether the span is finished or not.
|
|
199
|
-
def finished?
|
|
200
|
-
!@end_time.nil?
|
|
201
|
-
end
|
|
202
|
-
|
|
203
250
|
# Return a string representation of the span.
|
|
204
251
|
def to_s
|
|
205
252
|
"Span(name:#{@name},sid:#{@span_id},tid:#{@trace_id},pid:#{@parent_id})"
|
|
@@ -246,19 +293,76 @@ module Datadog
|
|
|
246
293
|
error: @status
|
|
247
294
|
}
|
|
248
295
|
|
|
249
|
-
if
|
|
250
|
-
h[:start] =
|
|
251
|
-
h[:duration] =
|
|
296
|
+
if finished?
|
|
297
|
+
h[:start] = start_time_nano
|
|
298
|
+
h[:duration] = duration_nano
|
|
252
299
|
end
|
|
253
300
|
|
|
254
301
|
h
|
|
255
302
|
end
|
|
256
303
|
|
|
304
|
+
# MessagePack serializer interface. Making this object
|
|
305
|
+
# respond to `#to_msgpack` allows it to be automatically
|
|
306
|
+
# serialized by MessagePack.
|
|
307
|
+
#
|
|
308
|
+
# This is more efficient than doing +MessagePack.pack(span.to_hash)+
|
|
309
|
+
# as we don't have to create an intermediate Hash.
|
|
310
|
+
#
|
|
311
|
+
# @param packer [MessagePack::Packer] serialization buffer, can be +nil+ with JRuby
|
|
312
|
+
def to_msgpack(packer = nil)
|
|
313
|
+
# As of 1.3.3, JRuby implementation doesn't pass an existing packer
|
|
314
|
+
packer ||= MessagePack::Packer.new
|
|
315
|
+
|
|
316
|
+
if finished?
|
|
317
|
+
packer.write_map_header(13) # Set header with how many elements in the map
|
|
318
|
+
|
|
319
|
+
packer.write('start')
|
|
320
|
+
packer.write(start_time_nano)
|
|
321
|
+
|
|
322
|
+
packer.write('duration')
|
|
323
|
+
packer.write(duration_nano)
|
|
324
|
+
else
|
|
325
|
+
packer.write_map_header(11) # Set header with how many elements in the map
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
# DEV: We use strings as keys here, instead of symbols, as
|
|
329
|
+
# DEV: MessagePack will ultimately convert them to strings.
|
|
330
|
+
# DEV: By providing strings directly, we skip this indirection operation.
|
|
331
|
+
packer.write('span_id')
|
|
332
|
+
packer.write(@span_id)
|
|
333
|
+
packer.write('parent_id')
|
|
334
|
+
packer.write(@parent_id)
|
|
335
|
+
packer.write('trace_id')
|
|
336
|
+
packer.write(@trace_id)
|
|
337
|
+
packer.write('name')
|
|
338
|
+
packer.write(@name)
|
|
339
|
+
packer.write('service')
|
|
340
|
+
packer.write(@service)
|
|
341
|
+
packer.write('resource')
|
|
342
|
+
packer.write(@resource)
|
|
343
|
+
packer.write('type')
|
|
344
|
+
packer.write(@span_type)
|
|
345
|
+
packer.write('meta')
|
|
346
|
+
packer.write(@meta)
|
|
347
|
+
packer.write('metrics')
|
|
348
|
+
packer.write(@metrics)
|
|
349
|
+
packer.write('allocations')
|
|
350
|
+
packer.write(allocations)
|
|
351
|
+
packer.write('error')
|
|
352
|
+
packer.write(@status)
|
|
353
|
+
packer
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
# JSON serializer interface.
|
|
357
|
+
# Used by older version of the transport.
|
|
358
|
+
def to_json(*args)
|
|
359
|
+
to_hash.to_json(*args)
|
|
360
|
+
end
|
|
361
|
+
|
|
257
362
|
# Return a human readable version of the span
|
|
258
363
|
def pretty_print(q)
|
|
259
|
-
start_time = (
|
|
260
|
-
end_time = (
|
|
261
|
-
duration = ((@end_time - @start_time) * 1e9).to_i rescue 0
|
|
364
|
+
start_time = (self.start_time.to_f * 1e9).to_i
|
|
365
|
+
end_time = (self.end_time.to_f * 1e9).to_i
|
|
262
366
|
q.group 0 do
|
|
263
367
|
q.breakable
|
|
264
368
|
q.text "Name: #{@name}\n"
|
|
@@ -271,7 +375,7 @@ module Datadog
|
|
|
271
375
|
q.text "Error: #{@status}\n"
|
|
272
376
|
q.text "Start: #{start_time}\n"
|
|
273
377
|
q.text "End: #{end_time}\n"
|
|
274
|
-
q.text "Duration: #{duration}\n"
|
|
378
|
+
q.text "Duration: #{duration.to_f if finished?}\n"
|
|
275
379
|
q.text "Allocations: #{allocations}\n"
|
|
276
380
|
q.group(2, 'Tags: [', "]\n") do
|
|
277
381
|
q.breakable
|
|
@@ -288,8 +392,30 @@ module Datadog
|
|
|
288
392
|
end
|
|
289
393
|
end
|
|
290
394
|
|
|
395
|
+
# Return whether the duration is started or not
|
|
396
|
+
def started?
|
|
397
|
+
!@start_time.nil?
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
# Return whether the duration is finished or not.
|
|
401
|
+
def finished?
|
|
402
|
+
!@end_time.nil?
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
def duration
|
|
406
|
+
if @duration_end.nil? || @duration_start.nil?
|
|
407
|
+
@end_time - @start_time
|
|
408
|
+
else
|
|
409
|
+
@duration_end - @duration_start
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
|
|
291
413
|
private
|
|
292
414
|
|
|
415
|
+
def duration_marker
|
|
416
|
+
Utils::Time.get_time
|
|
417
|
+
end
|
|
418
|
+
|
|
293
419
|
if defined?(JRUBY_VERSION) || Gem::Version.new(RUBY_VERSION) < Gem::Version.new(VERSION::MINIMUM_RUBY_VERSION)
|
|
294
420
|
def now_allocations
|
|
295
421
|
0
|
|
@@ -303,5 +429,17 @@ module Datadog
|
|
|
303
429
|
GC.stat(:total_allocated_objects)
|
|
304
430
|
end
|
|
305
431
|
end
|
|
432
|
+
|
|
433
|
+
# Used for serialization
|
|
434
|
+
# @return [Integer] in nanoseconds since Epoch
|
|
435
|
+
def start_time_nano
|
|
436
|
+
@start_time.to_i * 1000000000 + @start_time.nsec
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
# Used for serialization
|
|
440
|
+
# @return [Integer] in nanoseconds since Epoch
|
|
441
|
+
def duration_nano
|
|
442
|
+
(duration * 1e9).to_i
|
|
443
|
+
end
|
|
306
444
|
end
|
|
307
445
|
end
|
data/lib/ddtrace/sync_writer.rb
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
# typed: true
|
|
1
2
|
require 'ddtrace/ext/net'
|
|
2
|
-
require '
|
|
3
|
+
require 'datadog/core/environment/socket'
|
|
3
4
|
require 'ddtrace/runtime/metrics'
|
|
5
|
+
require 'ddtrace/utils/only_once'
|
|
4
6
|
|
|
5
7
|
module Datadog
|
|
6
8
|
# SyncWriter flushes both services and traces synchronously
|
|
7
9
|
# DEV: To be replaced by Datadog::Workers::TraceWriter.
|
|
10
|
+
#
|
|
11
|
+
# Note: If you're wondering if this class is used at all, since there are no other references to it on the codebase,
|
|
12
|
+
# the separate `datadog-lambda` uses it as of February 2021:
|
|
13
|
+
# <https://github.com/DataDog/datadog-lambda-rb/blob/c15f0f0916c90123416dc44e7d6800ef4a7cfdbf/lib/datadog/lambda.rb#L38>
|
|
8
14
|
class SyncWriter
|
|
15
|
+
DEPRECATION_WARN_ONLY_ONCE = Datadog::Utils::OnlyOnce.new
|
|
16
|
+
|
|
9
17
|
attr_reader \
|
|
10
18
|
:priority_sampler,
|
|
11
19
|
:transport
|
|
@@ -13,7 +21,8 @@ module Datadog
|
|
|
13
21
|
def initialize(options = {})
|
|
14
22
|
@transport = options.fetch(:transport) do
|
|
15
23
|
transport_options = options.fetch(:transport_options, {})
|
|
16
|
-
|
|
24
|
+
transport_options[:agent_settings] = options[:agent_settings] if options.key?(:agent_settings)
|
|
25
|
+
Transport::HTTP.default(**transport_options)
|
|
17
26
|
end
|
|
18
27
|
|
|
19
28
|
@priority_sampler = options.fetch(:priority_sampler, nil)
|
|
@@ -21,17 +30,15 @@ module Datadog
|
|
|
21
30
|
|
|
22
31
|
def write(trace, services = nil)
|
|
23
32
|
unless services.nil?
|
|
24
|
-
|
|
33
|
+
DEPRECATION_WARN_ONLY_ONCE.run do
|
|
25
34
|
Datadog.logger.warn(%(
|
|
26
35
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
27
|
-
write(traces, services) can be
|
|
36
|
+
write(traces, services) can be updated to write(traces)
|
|
28
37
|
))
|
|
29
38
|
end
|
|
30
39
|
end
|
|
31
40
|
|
|
32
|
-
|
|
33
|
-
proc { flush_trace(trace) }
|
|
34
|
-
)
|
|
41
|
+
flush_trace(trace)
|
|
35
42
|
rescue => e
|
|
36
43
|
Datadog.logger.debug(e)
|
|
37
44
|
end
|
|
@@ -44,23 +51,18 @@ module Datadog
|
|
|
44
51
|
|
|
45
52
|
private
|
|
46
53
|
|
|
47
|
-
def perform_concurrently(*tasks)
|
|
48
|
-
tasks.map { |task| Thread.new(&task) }.each(&:join)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
54
|
def flush_trace(trace)
|
|
52
55
|
processed_traces = Pipeline.process!([trace])
|
|
53
56
|
return if processed_traces.empty?
|
|
57
|
+
|
|
54
58
|
inject_hostname!(processed_traces.first) if Datadog.configuration.report_hostname
|
|
55
59
|
transport.send_traces(processed_traces)
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def inject_hostname!(trace)
|
|
59
63
|
unless trace.first.nil?
|
|
60
|
-
hostname = Datadog::
|
|
61
|
-
unless hostname.nil? || hostname.empty?
|
|
62
|
-
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
63
|
-
end
|
|
64
|
+
hostname = Datadog::Core::Environment::Socket.hostname
|
|
65
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname) unless hostname.nil? || hostname.empty?
|
|
64
66
|
end
|
|
65
67
|
end
|
|
66
68
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Wraps command with Datadog tracing
|
|
5
|
+
class Exec
|
|
6
|
+
attr_reader :args
|
|
7
|
+
|
|
8
|
+
def initialize(args)
|
|
9
|
+
@args = args
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run
|
|
13
|
+
set_rubyopt!
|
|
14
|
+
exec_with_error_handling(args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def rubyopts
|
|
18
|
+
[
|
|
19
|
+
'-rddtrace/profiling/preload'
|
|
20
|
+
]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def set_rubyopt!
|
|
26
|
+
existing_rubyopt = ENV['RUBYOPT']
|
|
27
|
+
|
|
28
|
+
ENV['RUBYOPT'] = existing_rubyopt ? "#{existing_rubyopt} #{rubyopts.join(' ')}" : rubyopts.join(' ')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# If there's an error here, rather than throwing a cryptic stack trace, let's instead have clearer messages, and
|
|
32
|
+
# follow the same status codes as the shell uses
|
|
33
|
+
# See also:
|
|
34
|
+
# * https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html
|
|
35
|
+
# * https://github.com/rubygems/rubygems/blob/dd93966cac224532035deda533cba2685dfa30cc/bundler/lib/bundler/cli/exec.rb#L45
|
|
36
|
+
def exec_with_error_handling(args)
|
|
37
|
+
Kernel.exec(*args)
|
|
38
|
+
rescue Errno::ENOENT => e
|
|
39
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
40
|
+
Kernel.exit 127
|
|
41
|
+
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
42
|
+
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
43
|
+
Kernel.exit 126
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
module Datadog
|
|
3
|
+
module Tasks
|
|
4
|
+
# Prints help message for usage of `ddtrace`
|
|
5
|
+
class Help
|
|
6
|
+
def run
|
|
7
|
+
puts %(
|
|
8
|
+
Usage: ddtrace [command] [arguments]
|
|
9
|
+
exec [command]: Executes command with tracing & profiling preloaded.
|
|
10
|
+
help: Prints this help message.
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|