ddtrace 0.38.0
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 +7 -0
- data/.circleci/config.yml +492 -0
- data/.circleci/images/primary/Dockerfile-2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-2.1.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.2.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
- data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.5.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.6.4 +73 -0
- data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
- data/.dockerignore +1 -0
- data/.env +26 -0
- data/.github/CODEOWNERS +1 -0
- data/.gitignore +61 -0
- data/.gitlab-ci.yml +26 -0
- data/.rspec +1 -0
- data/.rubocop.yml +85 -0
- data/.yardopts +5 -0
- data/Appraisals +961 -0
- data/CHANGELOG.md +1402 -0
- data/CONTRIBUTING.md +85 -0
- data/Gemfile +7 -0
- data/LICENSE +6 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +23 -0
- data/Rakefile +753 -0
- data/benchmarks/postgres_database.yml +9 -0
- data/benchmarks/sidekiq_test.rb +154 -0
- data/ddtrace.gemspec +71 -0
- data/docker-compose.yml +370 -0
- data/docs/DevelopmentGuide.md +195 -0
- data/docs/GettingStarted.md +2224 -0
- data/lib/ddtrace.rb +76 -0
- data/lib/ddtrace/analytics.rb +36 -0
- data/lib/ddtrace/augmentation.rb +13 -0
- data/lib/ddtrace/augmentation/method_wrapper.rb +20 -0
- data/lib/ddtrace/augmentation/method_wrapping.rb +38 -0
- data/lib/ddtrace/augmentation/shim.rb +102 -0
- data/lib/ddtrace/buffer.rb +119 -0
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +53 -0
- data/lib/ddtrace/configuration/base.rb +84 -0
- data/lib/ddtrace/configuration/components.rb +154 -0
- data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
- data/lib/ddtrace/configuration/option.rb +64 -0
- data/lib/ddtrace/configuration/option_definition.rb +123 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +112 -0
- data/lib/ddtrace/configuration/pin_setup.rb +31 -0
- data/lib/ddtrace/configuration/settings.rb +273 -0
- data/lib/ddtrace/context.rb +305 -0
- data/lib/ddtrace/context_flush.rb +69 -0
- data/lib/ddtrace/context_provider.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +23 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +148 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +25 -0
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +16 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +23 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/action_view/event.rb +39 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +17 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +74 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +47 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +68 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +40 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +29 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +45 -0
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/active_record/event.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +60 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +64 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +46 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +23 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +76 -0
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +157 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +48 -0
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +40 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +64 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +159 -0
- data/lib/ddtrace/contrib/active_support/patcher.rb +23 -0
- data/lib/ddtrace/contrib/analytics.rb +24 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/aws/ext.rb +20 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +56 -0
- data/lib/ddtrace/contrib/aws/integration.rb +42 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +49 -0
- data/lib/ddtrace/contrib/aws/services.rb +115 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +41 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +38 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +28 -0
- data/lib/ddtrace/contrib/configurable.rb +76 -0
- data/lib/ddtrace/contrib/configuration/resolver.rb +16 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +53 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +17 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +50 -0
- data/lib/ddtrace/contrib/dalli/integration.rb +38 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +63 -0
- data/lib/ddtrace/contrib/dalli/quantize.rb +22 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +38 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +28 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +61 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +19 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +39 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +117 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +148 -0
- data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +43 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
- data/lib/ddtrace/contrib/ethon/patcher.rb +25 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/excon/ext.rb +14 -0
- data/lib/ddtrace/contrib/excon/integration.rb +43 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +157 -0
- data/lib/ddtrace/contrib/excon/patcher.rb +27 -0
- data/lib/ddtrace/contrib/extensions.rb +93 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +43 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +83 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +80 -0
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +208 -0
- data/lib/ddtrace/contrib/grape/ext.rb +19 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
- data/lib/ddtrace/contrib/grape/integration.rb +39 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +73 -0
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +13 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +39 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +60 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +74 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +54 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +76 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +68 -0
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/http/ext.rb +14 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +175 -0
- data/lib/ddtrace/contrib/http/integration.rb +45 -0
- data/lib/ddtrace/contrib/http/patcher.rb +26 -0
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +14 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +163 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/integration.rb +16 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +38 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +67 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +38 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +31 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +108 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +60 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +38 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +27 -0
- data/lib/ddtrace/contrib/patchable.rb +59 -0
- data/lib/ddtrace/contrib/patcher.rb +62 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/presto/ext.rb +25 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
- data/lib/ddtrace/contrib/presto/integration.rb +38 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/racecar/event.rb +71 -0
- data/lib/ddtrace/contrib/racecar/events.rb +30 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +39 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +26 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +41 -0
- data/lib/ddtrace/contrib/rack/ext.rb +18 -0
- data/lib/ddtrace/contrib/rack/integration.rb +38 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +290 -0
- data/lib/ddtrace/contrib/rack/patcher.rb +107 -0
- data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +83 -0
- data/lib/ddtrace/contrib/rails/ext.rb +13 -0
- data/lib/ddtrace/contrib/rails/framework.rb +124 -0
- data/lib/ddtrace/contrib/rails/integration.rb +44 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +74 -0
- data/lib/ddtrace/contrib/rails/railtie.rb +17 -0
- data/lib/ddtrace/contrib/rails/utils.rb +20 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/rake/ext.rb +18 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +88 -0
- data/lib/ddtrace/contrib/rake/integration.rb +38 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +30 -0
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/redis/ext.rb +18 -0
- data/lib/ddtrace/contrib/redis/integration.rb +42 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +97 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
- data/lib/ddtrace/contrib/redis/tags.rb +38 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
- data/lib/ddtrace/contrib/registerable.rb +33 -0
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/resque/ext.rb +14 -0
- data/lib/ddtrace/contrib/resque/integration.rb +47 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +29 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +80 -0
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +14 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +38 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +23 -0
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +89 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/sequel/database.rb +61 -0
- data/lib/ddtrace/contrib/sequel/dataset.rb +62 -0
- data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +38 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +33 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +46 -0
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +18 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +39 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +49 -0
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +24 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +38 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +41 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +67 -0
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +45 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +58 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +24 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
- data/lib/ddtrace/contrib/sinatra/integration.rb +38 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +28 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +150 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +78 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +84 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +38 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +42 -0
- data/lib/ddtrace/correlation.rb +38 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/diagnostics/health.rb +33 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +70 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +45 -0
- data/lib/ddtrace/encoding.rb +69 -0
- data/lib/ddtrace/environment.rb +31 -0
- data/lib/ddtrace/error.rb +27 -0
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +12 -0
- data/lib/ddtrace/ext/app_types.rb +11 -0
- data/lib/ddtrace/ext/correlation.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +35 -0
- data/lib/ddtrace/ext/distributed.rb +33 -0
- data/lib/ddtrace/ext/environment.rb +16 -0
- data/lib/ddtrace/ext/errors.rb +10 -0
- data/lib/ddtrace/ext/forced_tracing.rb +25 -0
- data/lib/ddtrace/ext/http.rb +46 -0
- data/lib/ddtrace/ext/manual_tracing.rb +9 -0
- data/lib/ddtrace/ext/metrics.rb +15 -0
- data/lib/ddtrace/ext/net.rb +10 -0
- data/lib/ddtrace/ext/priority.rb +16 -0
- data/lib/ddtrace/ext/runtime.rb +26 -0
- data/lib/ddtrace/ext/sampling.rb +16 -0
- data/lib/ddtrace/ext/sql.rb +8 -0
- data/lib/ddtrace/ext/transport.rb +17 -0
- data/lib/ddtrace/forced_tracing.rb +36 -0
- data/lib/ddtrace/logger.rb +40 -0
- data/lib/ddtrace/metrics.rb +222 -0
- data/lib/ddtrace/monkey.rb +58 -0
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/opentracer.rb +40 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
- data/lib/ddtrace/opentracer/carrier.rb +6 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +52 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
- data/lib/ddtrace/opentracer/propagator.rb +22 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
- data/lib/ddtrace/opentracer/scope.rb +15 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
- data/lib/ddtrace/opentracer/span.rb +98 -0
- data/lib/ddtrace/opentracer/span_context.rb +14 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +30 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
- data/lib/ddtrace/opentracer/tracer.rb +208 -0
- data/lib/ddtrace/patcher.rb +47 -0
- data/lib/ddtrace/pin.rb +138 -0
- data/lib/ddtrace/pipeline.rb +46 -0
- data/lib/ddtrace/pipeline/span_filter.rb +38 -0
- data/lib/ddtrace/pipeline/span_processor.rb +20 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +61 -0
- data/lib/ddtrace/propagation/http_propagator.rb +75 -0
- data/lib/ddtrace/quantization/hash.rb +103 -0
- data/lib/ddtrace/quantization/http.rb +86 -0
- data/lib/ddtrace/runtime/cgroup.rb +44 -0
- data/lib/ddtrace/runtime/class_count.rb +17 -0
- data/lib/ddtrace/runtime/container.rb +73 -0
- data/lib/ddtrace/runtime/gc.rb +16 -0
- data/lib/ddtrace/runtime/identity.rb +41 -0
- data/lib/ddtrace/runtime/metrics.rb +96 -0
- data/lib/ddtrace/runtime/object_space.rb +19 -0
- data/lib/ddtrace/runtime/socket.rb +14 -0
- data/lib/ddtrace/runtime/thread_count.rb +16 -0
- data/lib/ddtrace/sampler.rb +292 -0
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
- data/lib/ddtrace/span.rb +307 -0
- data/lib/ddtrace/sync_writer.rb +67 -0
- data/lib/ddtrace/tracer.rb +439 -0
- data/lib/ddtrace/transport/http.rb +91 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +120 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +81 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +68 -0
- data/lib/ddtrace/transport/http/api.rb +46 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
- data/lib/ddtrace/transport/http/api/instance.rb +33 -0
- data/lib/ddtrace/transport/http/api/map.rb +14 -0
- data/lib/ddtrace/transport/http/api/spec.rb +15 -0
- data/lib/ddtrace/transport/http/builder.rb +163 -0
- data/lib/ddtrace/transport/http/client.rb +50 -0
- data/lib/ddtrace/transport/http/env.rb +48 -0
- data/lib/ddtrace/transport/http/response.rb +26 -0
- data/lib/ddtrace/transport/http/statistics.rb +30 -0
- data/lib/ddtrace/transport/http/traces.rb +143 -0
- data/lib/ddtrace/transport/io.rb +26 -0
- data/lib/ddtrace/transport/io/client.rb +76 -0
- data/lib/ddtrace/transport/io/response.rb +25 -0
- data/lib/ddtrace/transport/io/traces.rb +91 -0
- data/lib/ddtrace/transport/parcel.rb +13 -0
- data/lib/ddtrace/transport/request.rb +13 -0
- data/lib/ddtrace/transport/response.rb +60 -0
- data/lib/ddtrace/transport/statistics.rb +72 -0
- data/lib/ddtrace/transport/traces.rb +183 -0
- data/lib/ddtrace/utils.rb +65 -0
- data/lib/ddtrace/utils/database.rb +25 -0
- data/lib/ddtrace/utils/time.rb +14 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
- data/lib/ddtrace/version.rb +12 -0
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers.rb +117 -0
- data/lib/ddtrace/workers/async.rb +165 -0
- data/lib/ddtrace/workers/loop.rb +105 -0
- data/lib/ddtrace/workers/polling.rb +48 -0
- data/lib/ddtrace/workers/queue.rb +39 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
- data/lib/ddtrace/workers/trace_writer.rb +202 -0
- data/lib/ddtrace/writer.rb +175 -0
- data/tasks/release_gem.rake +28 -0
- metadata +815 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module SuckerPunch
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the SuckerPunch integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate do |o|
|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'sucker_punch'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module SuckerPunch
|
|
6
|
+
# Patches `sucker_punch` exception handling
|
|
7
|
+
module ExceptionHandler
|
|
8
|
+
METHOD = ->(e, *) { raise(e) }
|
|
9
|
+
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def patch!
|
|
13
|
+
::SuckerPunch.class_eval do
|
|
14
|
+
class << self
|
|
15
|
+
alias_method :__exception_handler, :exception_handler
|
|
16
|
+
|
|
17
|
+
def exception_handler
|
|
18
|
+
::Datadog::Contrib::SuckerPunch::ExceptionHandler::METHOD
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module SuckerPunch
|
|
4
|
+
# SuckerPunch integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'sucker_punch'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_SUCKER_PUNCH_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_SUCKER_PUNCH_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'sucker_punch'.freeze
|
|
10
|
+
SPAN_PERFORM = 'sucker_punch.perform'.freeze
|
|
11
|
+
SPAN_PERFORM_ASYNC = 'sucker_punch.perform_async'.freeze
|
|
12
|
+
SPAN_PERFORM_IN = 'sucker_punch.perform_in'.freeze
|
|
13
|
+
TAG_PERFORM_IN = 'sucker_punch.perform_in'.freeze
|
|
14
|
+
TAG_QUEUE = 'sucker_punch.queue'.freeze
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'sucker_punch'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
3
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module SuckerPunch
|
|
8
|
+
# Defines instrumentation patches for the `sucker_punch` gem
|
|
9
|
+
module Instrumentation
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
# rubocop:disable Metrics/MethodLength
|
|
13
|
+
def patch!
|
|
14
|
+
# rubocop:disable Metrics/BlockLength
|
|
15
|
+
::SuckerPunch::Job::ClassMethods.class_eval do
|
|
16
|
+
alias_method :__run_perform_without_datadog, :__run_perform
|
|
17
|
+
def __run_perform(*args)
|
|
18
|
+
pin = Datadog::Pin.get_from(::SuckerPunch)
|
|
19
|
+
pin.tracer.provider.context = Datadog::Context.new
|
|
20
|
+
|
|
21
|
+
__with_instrumentation(Ext::SPAN_PERFORM) do |span|
|
|
22
|
+
span.resource = "PROCESS #{self}"
|
|
23
|
+
|
|
24
|
+
# Set analytics sample rate
|
|
25
|
+
if Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
26
|
+
Contrib::Analytics.set_sample_rate(span, datadog_configuration[:analytics_sample_rate])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Measure service stats
|
|
30
|
+
Contrib::Analytics.set_measured(span)
|
|
31
|
+
|
|
32
|
+
__run_perform_without_datadog(*args)
|
|
33
|
+
end
|
|
34
|
+
rescue => e
|
|
35
|
+
::SuckerPunch.__exception_handler.call(e, self, args)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
alias_method :__perform_async, :perform_async
|
|
39
|
+
def perform_async(*args)
|
|
40
|
+
__with_instrumentation(Ext::SPAN_PERFORM_ASYNC) do |span|
|
|
41
|
+
span.resource = "ENQUEUE #{self}"
|
|
42
|
+
|
|
43
|
+
# Measure service stats
|
|
44
|
+
Contrib::Analytics.set_measured(span)
|
|
45
|
+
|
|
46
|
+
__perform_async(*args)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
alias_method :__perform_in, :perform_in
|
|
51
|
+
def perform_in(interval, *args)
|
|
52
|
+
__with_instrumentation(Ext::SPAN_PERFORM_IN) do |span|
|
|
53
|
+
span.resource = "ENQUEUE #{self}"
|
|
54
|
+
span.set_tag(Ext::TAG_PERFORM_IN, interval)
|
|
55
|
+
|
|
56
|
+
# Measure service stats
|
|
57
|
+
Contrib::Analytics.set_measured(span)
|
|
58
|
+
|
|
59
|
+
__perform_in(interval, *args)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def datadog_configuration
|
|
66
|
+
Datadog.configuration[:sucker_punch]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def __with_instrumentation(name)
|
|
70
|
+
pin = Datadog::Pin.get_from(::SuckerPunch)
|
|
71
|
+
|
|
72
|
+
pin.tracer.trace(name) do |span|
|
|
73
|
+
span.service = pin.service
|
|
74
|
+
span.span_type = pin.app_type
|
|
75
|
+
span.set_tag(Ext::TAG_QUEUE, to_s)
|
|
76
|
+
yield span
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/sucker_punch/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/sucker_punch/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module SuckerPunch
|
|
8
|
+
# Description of SuckerPunch integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
MINIMUM_VERSION = Gem::Version.new('2.0.0')
|
|
13
|
+
|
|
14
|
+
register_as :sucker_punch, auto_patch: true
|
|
15
|
+
|
|
16
|
+
def self.version
|
|
17
|
+
Gem.loaded_specs['sucker_punch'] && Gem.loaded_specs['sucker_punch'].version
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.loaded?
|
|
21
|
+
!defined?(::SuckerPunch).nil?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.compatible?
|
|
25
|
+
super && version >= MINIMUM_VERSION
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def default_configuration
|
|
29
|
+
Configuration::Settings.new
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def patcher
|
|
33
|
+
Patcher
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/sucker_punch/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module SuckerPunch
|
|
8
|
+
# Patcher enables patching of 'sucker_punch' module.
|
|
9
|
+
module Patcher
|
|
10
|
+
include Contrib::Patcher
|
|
11
|
+
|
|
12
|
+
module_function
|
|
13
|
+
|
|
14
|
+
def target_version
|
|
15
|
+
Integration.version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def patch
|
|
19
|
+
require 'ddtrace/contrib/sucker_punch/exception_handler'
|
|
20
|
+
require 'ddtrace/contrib/sucker_punch/instrumentation'
|
|
21
|
+
|
|
22
|
+
add_pin!
|
|
23
|
+
ExceptionHandler.patch!
|
|
24
|
+
Instrumentation.patch!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def add_pin!
|
|
28
|
+
Pin.new(
|
|
29
|
+
get_option(:service_name),
|
|
30
|
+
app: Ext::APP,
|
|
31
|
+
app_type: Datadog::Ext::AppTypes::WORKER,
|
|
32
|
+
tracer: -> { get_option(:tracer) }
|
|
33
|
+
).onto(::SuckerPunch)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def get_option(option)
|
|
37
|
+
Datadog.configuration[:sucker_punch].get_option(option)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/ext/correlation'
|
|
2
|
+
require 'ddtrace/environment'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Contains behavior for managing correlations with tracing
|
|
6
|
+
# e.g. Retrieve a correlation to the current trace for logging, etc.
|
|
7
|
+
module Correlation
|
|
8
|
+
# Struct representing correlation
|
|
9
|
+
Identifier = Struct.new(:trace_id, :span_id, :env, :service, :version) do
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
super
|
|
12
|
+
self.trace_id = trace_id || 0
|
|
13
|
+
self.span_id = span_id || 0
|
|
14
|
+
self.env = env || Datadog.configuration.env
|
|
15
|
+
self.service = service || Datadog.configuration.service
|
|
16
|
+
self.version = version || Datadog.configuration.version
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def to_s
|
|
20
|
+
attributes = []
|
|
21
|
+
attributes << "#{Ext::Correlation::ATTR_ENV}=#{env}" unless env.nil?
|
|
22
|
+
attributes << "#{Ext::Correlation::ATTR_SERVICE}=#{service}" unless service.nil?
|
|
23
|
+
attributes << "#{Ext::Correlation::ATTR_VERSION}=#{version}" unless version.nil?
|
|
24
|
+
attributes << "#{Ext::Correlation::ATTR_TRACE_ID}=#{trace_id}"
|
|
25
|
+
attributes << "#{Ext::Correlation::ATTR_SPAN_ID}=#{span_id}"
|
|
26
|
+
attributes.join(' ')
|
|
27
|
+
end
|
|
28
|
+
end.freeze
|
|
29
|
+
|
|
30
|
+
module_function
|
|
31
|
+
|
|
32
|
+
# Produces a CorrelationIdentifier from the Context provided
|
|
33
|
+
def identifier_from_context(context)
|
|
34
|
+
return Identifier.new.freeze if context.nil?
|
|
35
|
+
Identifier.new(context.trace_id, context.span_id).freeze
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'rbconfig'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Diagnostics
|
|
7
|
+
# A holistic collection of the environment in which ddtrace is running.
|
|
8
|
+
# This logger should allow for easy reporting by users to Datadog support.
|
|
9
|
+
#
|
|
10
|
+
# rubocop:disable Style/DoubleNegation
|
|
11
|
+
module EnvironmentLogger
|
|
12
|
+
class << self
|
|
13
|
+
# Outputs environment information to {Datadog.logger}.
|
|
14
|
+
# Executes only for the lifetime of the program.
|
|
15
|
+
def log!(transport_responses)
|
|
16
|
+
return if @executed || !log?
|
|
17
|
+
@executed = true
|
|
18
|
+
|
|
19
|
+
data = EnvironmentCollector.new.collect!(transport_responses)
|
|
20
|
+
data.reject! { |_, v| v.nil? } # Remove empty values from hash output
|
|
21
|
+
|
|
22
|
+
log_environment!(data.to_json)
|
|
23
|
+
log_error!('Agent Error'.freeze, data[:agent_error]) if data[:agent_error]
|
|
24
|
+
rescue => e
|
|
25
|
+
Datadog.logger.warn("Failed to collect environment information: #{e} location: #{e.backtrace.first}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
def log_environment!(line)
|
|
31
|
+
Datadog.logger.warn("DATADOG TRACER CONFIGURATION - #{line}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def log_error!(type, error)
|
|
35
|
+
Datadog.logger.warn("DATADOG TRACER DIAGNOSTIC - #{type}: #{error}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Are we logging the environment data?
|
|
39
|
+
def log?
|
|
40
|
+
startup_logs_enabled = Datadog.configuration.diagnostics.startup_logs.enabled
|
|
41
|
+
if startup_logs_enabled.nil?
|
|
42
|
+
!repl? # Suppress logs if we running in a REPL
|
|
43
|
+
else
|
|
44
|
+
startup_logs_enabled
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
REPL_PROGRAM_NAMES = %w[irb pry].freeze
|
|
49
|
+
|
|
50
|
+
def repl?
|
|
51
|
+
REPL_PROGRAM_NAMES.include?($PROGRAM_NAME)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Collects environment information for diagnostic logging
|
|
57
|
+
class EnvironmentCollector
|
|
58
|
+
# @return [String] current time in ISO8601 format
|
|
59
|
+
def date
|
|
60
|
+
DateTime.now.iso8601
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Best portable guess of OS information.
|
|
64
|
+
# @return [String] platform string
|
|
65
|
+
def os_name
|
|
66
|
+
RbConfig::CONFIG['host'.freeze]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# @return [String] ddtrace version
|
|
70
|
+
def version
|
|
71
|
+
VERSION::STRING
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @return [String] "ruby"
|
|
75
|
+
def lang
|
|
76
|
+
Ext::Runtime::LANG
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Supported Ruby language version.
|
|
80
|
+
# Will be distinct from VM version for non-MRI environments.
|
|
81
|
+
# @return [String]
|
|
82
|
+
def lang_version
|
|
83
|
+
Ext::Runtime::LANG_VERSION
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# @return [String] configured application environment
|
|
87
|
+
def env
|
|
88
|
+
Datadog.configuration.env
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @return [Boolean, nil]
|
|
92
|
+
def enabled
|
|
93
|
+
Datadog.configuration.tracer.enabled
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [String] configured application service name
|
|
97
|
+
def service
|
|
98
|
+
Datadog.configuration.service
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# @return [String] configured application version
|
|
102
|
+
def dd_version
|
|
103
|
+
Datadog.configuration.version
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @return [String] target agent URL for trace flushing
|
|
107
|
+
def agent_url
|
|
108
|
+
# Retrieve the effect agent URL, regardless of how it was configured
|
|
109
|
+
transport = Datadog.tracer.writer.transport
|
|
110
|
+
adapter = transport.client.api.adapter
|
|
111
|
+
adapter.url
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Error returned by Datadog agent during a tracer flush attempt
|
|
115
|
+
# @return [String] concatenated list of transport errors
|
|
116
|
+
def agent_error(transport_responses)
|
|
117
|
+
error_responses = transport_responses.reject(&:ok?)
|
|
118
|
+
|
|
119
|
+
return nil if error_responses.empty?
|
|
120
|
+
|
|
121
|
+
error_responses.map(&:inspect).join(','.freeze)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @return [Boolean, nil] debug mode enabled in configuration
|
|
125
|
+
def debug
|
|
126
|
+
!!Datadog.configuration.diagnostics.debug
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @return [Boolean, nil] analytics enabled in configuration
|
|
130
|
+
def analytics_enabled
|
|
131
|
+
!!Datadog.configuration.analytics.enabled
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @return [Numeric, nil] tracer sample rate configured
|
|
135
|
+
def sample_rate
|
|
136
|
+
sampler = Datadog.configuration.tracer.sampler
|
|
137
|
+
return nil unless sampler
|
|
138
|
+
|
|
139
|
+
sampler.sample_rate(nil) rescue nil
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# DEV: We currently only support SimpleRule instances.
|
|
143
|
+
# DEV: These are the most commonly used rules.
|
|
144
|
+
# DEV: We should expand support for other rules in the future,
|
|
145
|
+
# DEV: although it is tricky to serialize arbitrary rules.
|
|
146
|
+
#
|
|
147
|
+
# @return [Hash, nil] sample rules configured
|
|
148
|
+
def sampling_rules
|
|
149
|
+
sampler = Datadog.configuration.tracer.sampler
|
|
150
|
+
return nil unless sampler.is_a?(Datadog::PrioritySampler) &&
|
|
151
|
+
sampler.priority_sampler.is_a?(Datadog::Sampling::RuleSampler)
|
|
152
|
+
|
|
153
|
+
sampler.priority_sampler.rules.map do |rule|
|
|
154
|
+
next unless rule.is_a?(Datadog::Sampling::SimpleRule)
|
|
155
|
+
|
|
156
|
+
{
|
|
157
|
+
name: rule.matcher.name,
|
|
158
|
+
service: rule.matcher.service,
|
|
159
|
+
sample_rate: rule.sampler.sample_rate(nil)
|
|
160
|
+
}
|
|
161
|
+
end.compact
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# @return [Hash, nil] concatenated list of global tracer tags configured
|
|
165
|
+
def tags
|
|
166
|
+
tags = Datadog.configuration.tags
|
|
167
|
+
return nil if tags.empty?
|
|
168
|
+
hash_serializer(tags)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# @return [Boolean, nil] runtime metrics enabled in configuration
|
|
172
|
+
def runtime_metrics_enabled
|
|
173
|
+
Datadog.configuration.runtime_metrics.enabled
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Concatenated list of integrations activated, with their gem version.
|
|
177
|
+
# Example: "rails@6.0.3,rack@2.2.3"
|
|
178
|
+
#
|
|
179
|
+
# @return [String, nil]
|
|
180
|
+
def integrations_loaded
|
|
181
|
+
integrations = instrumented_integrations
|
|
182
|
+
return if integrations.empty?
|
|
183
|
+
|
|
184
|
+
integrations.map { |name, integration| "#{name}@#{integration.class.version}" }.join(','.freeze)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Ruby VM name and version.
|
|
188
|
+
# Examples: "ruby-2.7.1", "jruby-9.2.11.1", "truffleruby-20.1.0"
|
|
189
|
+
# @return [String, nil]
|
|
190
|
+
def vm
|
|
191
|
+
# RUBY_ENGINE_VERSION returns the VM version, which
|
|
192
|
+
# will differ from RUBY_VERSION for non-mri VMs.
|
|
193
|
+
if defined?(RUBY_ENGINE_VERSION)
|
|
194
|
+
"#{RUBY_ENGINE}-#{RUBY_ENGINE_VERSION}"
|
|
195
|
+
else
|
|
196
|
+
# Ruby < 2.3 doesn't support RUBY_ENGINE_VERSION
|
|
197
|
+
"#{RUBY_ENGINE}-#{RUBY_VERSION}"
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
# @return [Boolean, nil] partial flushing enabled in configuration
|
|
202
|
+
def partial_flushing_enabled
|
|
203
|
+
!!Datadog.configuration.tracer.partial_flush.enabled
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# @return [Boolean, nil] priority sampling enabled in configuration
|
|
207
|
+
def priority_sampling_enabled
|
|
208
|
+
!!Datadog.configuration.tracer.priority_sampling
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# @return [Boolean, nil] health metrics enabled in configuration
|
|
212
|
+
def health_metrics_enabled
|
|
213
|
+
!!Datadog.configuration.diagnostics.health_metrics.enabled
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# TODO: Populate when profiling is implemented
|
|
217
|
+
# def profiling_enabled
|
|
218
|
+
# end
|
|
219
|
+
|
|
220
|
+
# TODO: Populate when automatic log correlation is implemented
|
|
221
|
+
# def logs_correlation_enabled
|
|
222
|
+
# end
|
|
223
|
+
|
|
224
|
+
# @return [Hash] environment information available at call time
|
|
225
|
+
def collect!(transport_responses)
|
|
226
|
+
{
|
|
227
|
+
date: date,
|
|
228
|
+
os_name: os_name,
|
|
229
|
+
version: version,
|
|
230
|
+
lang: lang,
|
|
231
|
+
lang_version: lang_version,
|
|
232
|
+
env: env,
|
|
233
|
+
enabled: enabled,
|
|
234
|
+
service: service,
|
|
235
|
+
dd_version: dd_version,
|
|
236
|
+
agent_url: agent_url,
|
|
237
|
+
agent_error: agent_error(transport_responses),
|
|
238
|
+
debug: debug,
|
|
239
|
+
analytics_enabled: analytics_enabled,
|
|
240
|
+
sample_rate: sample_rate,
|
|
241
|
+
sampling_rules: sampling_rules,
|
|
242
|
+
tags: tags,
|
|
243
|
+
runtime_metrics_enabled: runtime_metrics_enabled,
|
|
244
|
+
integrations_loaded: integrations_loaded,
|
|
245
|
+
vm: vm,
|
|
246
|
+
partial_flushing_enabled: partial_flushing_enabled,
|
|
247
|
+
priority_sampling_enabled: priority_sampling_enabled,
|
|
248
|
+
health_metrics_enabled: health_metrics_enabled,
|
|
249
|
+
**instrumented_integrations_settings
|
|
250
|
+
}
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
private
|
|
254
|
+
|
|
255
|
+
def instrumented_integrations
|
|
256
|
+
Datadog.configuration.instrumented_integrations
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Capture all active integration settings into "integrationName_settingName: value" entries.
|
|
260
|
+
def instrumented_integrations_settings
|
|
261
|
+
Hash[instrumented_integrations.flat_map do |name, integration|
|
|
262
|
+
integration.configuration.to_h.flat_map do |setting, value|
|
|
263
|
+
next [] if setting == :tracer # Skip internal Ruby objects
|
|
264
|
+
|
|
265
|
+
# Convert value to a string to avoid custom #to_json
|
|
266
|
+
# handlers possibly causing errors.
|
|
267
|
+
[[:"integration_#{name}_#{setting}", value.to_s]]
|
|
268
|
+
end
|
|
269
|
+
end]
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# Outputs "k1:v1,k2:v2,..."
|
|
273
|
+
def hash_serializer(h)
|
|
274
|
+
h.map { |k, v| "#{k}:#{v}" }.join(','.freeze)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|