ls-trace 0.1.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 +7 -0
- data/.circleci/config.yml +673 -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/.dockerignore +1 -0
- data/.env +24 -0
- data/.github/CODEOWNERS +1 -0
- data/.gitignore +59 -0
- data/.rspec +1 -0
- data/.rubocop.yml +77 -0
- data/.yardopts +5 -0
- data/Appraisals +820 -0
- data/CHANGELOG.md +1051 -0
- data/CONTRIBUTING.md +85 -0
- data/Gemfile +7 -0
- data/LICENSE +24 -0
- data/README.md +108 -0
- data/Rakefile +635 -0
- data/benchmarks/postgres_database.yml +9 -0
- data/benchmarks/sidekiq_test.rb +154 -0
- data/ddtrace.gemspec +63 -0
- data/docker-compose.yml +276 -0
- data/docs/DevelopmentGuide.md +195 -0
- data/docs/GettingStarted.md +1981 -0
- data/lib/ddtrace.rb +63 -0
- data/lib/ddtrace/analytics.rb +29 -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/configuration.rb +30 -0
- data/lib/ddtrace/configuration/base.rb +82 -0
- data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
- data/lib/ddtrace/configuration/option.rb +55 -0
- data/lib/ddtrace/configuration/option_definition.rb +127 -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 +107 -0
- data/lib/ddtrace/configuration/pin_setup.rb +30 -0
- data/lib/ddtrace/configuration/settings.rb +105 -0
- data/lib/ddtrace/context.rb +284 -0
- data/lib/ddtrace/context_flush.rb +132 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +144 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +37 -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 +36 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +29 -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/ext.rb +17 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +43 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +53 -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 +65 -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 +39 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +36 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +46 -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 +57 -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 +44 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +29 -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 +62 -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 +38 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +62 -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 +29 -0
- data/lib/ddtrace/contrib/analytics.rb +20 -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 +36 -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 +35 -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 +32 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +35 -0
- data/lib/ddtrace/contrib/configurable.rb +59 -0
- data/lib/ddtrace/contrib/configuration/resolver.rb +12 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +35 -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 +36 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +73 -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 +32 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +34 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +57 -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 +37 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +124 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +139 -0
- data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +31 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
- data/lib/ddtrace/contrib/ethon/patcher.rb +27 -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 +32 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +154 -0
- data/lib/ddtrace/contrib/excon/patcher.rb +34 -0
- data/lib/ddtrace/contrib/extensions.rb +59 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +36 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +93 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +82 -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 +199 -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 +36 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +79 -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 +38 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +63 -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 +56 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +73 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +36 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +78 -0
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +63 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/http/ext.rb +14 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +114 -0
- data/lib/ddtrace/contrib/http/integration.rb +32 -0
- data/lib/ddtrace/contrib/http/patcher.rb +32 -0
- data/lib/ddtrace/contrib/integration.rb +16 -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 +68 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +36 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +37 -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 +32 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +33 -0
- data/lib/ddtrace/contrib/patchable.rb +42 -0
- data/lib/ddtrace/contrib/patcher.rb +28 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/racecar/event.rb +67 -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 +36 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +32 -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 +32 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +283 -0
- data/lib/ddtrace/contrib/rack/patcher.rb +72 -0
- data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +80 -0
- data/lib/ddtrace/contrib/rails/ext.rb +12 -0
- data/lib/ddtrace/contrib/rails/framework.rb +100 -0
- data/lib/ddtrace/contrib/rails/integration.rb +37 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +78 -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 +84 -0
- data/lib/ddtrace/contrib/rake/integration.rb +32 -0
- data/lib/ddtrace/contrib/rake/patcher.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 +36 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +94 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
- data/lib/ddtrace/contrib/redis/tags.rb +38 -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 +37 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +35 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +76 -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 +31 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +25 -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 +32 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +39 -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 +35 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +30 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +45 -0
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +21 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +36 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +40 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +58 -0
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +28 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +38 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +18 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
- data/lib/ddtrace/contrib/sinatra/integration.rb +36 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +33 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +84 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +72 -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 +70 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +36 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +48 -0
- data/lib/ddtrace/correlation.rb +28 -0
- data/lib/ddtrace/diagnostics/health.rb +30 -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 +65 -0
- data/lib/ddtrace/environment.rb +23 -0
- data/lib/ddtrace/error.rb +27 -0
- data/lib/ddtrace/ext/analytics.rb +11 -0
- data/lib/ddtrace/ext/app_types.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +25 -0
- data/lib/ddtrace/ext/distributed.rb +33 -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/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 +39 -0
- data/lib/ddtrace/metrics.rb +215 -0
- data/lib/ddtrace/monkey.rb +58 -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 +114 -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/provider.rb +21 -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 +93 -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 +195 -0
- data/lib/ddtrace/span.rb +260 -0
- data/lib/ddtrace/sync_writer.rb +62 -0
- data/lib/ddtrace/tracer.rb +459 -0
- data/lib/ddtrace/transport/http.rb +91 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +112 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +77 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +64 -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 +29 -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 +165 -0
- data/lib/ddtrace/transport/http/client.rb +107 -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 +140 -0
- data/lib/ddtrace/transport/parcel.rb +13 -0
- data/lib/ddtrace/transport/request.rb +13 -0
- data/lib/ddtrace/transport/response.rb +49 -0
- data/lib/ddtrace/transport/statistics.rb +72 -0
- data/lib/ddtrace/transport/traces.rb +33 -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/workers.rb +125 -0
- data/lib/ddtrace/writer.rb +157 -0
- data/tasks/release_gem.rake +28 -0
- metadata +682 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/analytics'
|
|
3
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module GRPC
|
|
8
|
+
module DatadogInterceptor
|
|
9
|
+
# The DatadogInterceptor::Server implements the tracing strategy
|
|
10
|
+
# for gRPC server-side endpoints. When the datadog fields have been
|
|
11
|
+
# added to the gRPC call metadata, this middleware component will
|
|
12
|
+
# extract any client-side tracing information, attempting to associate
|
|
13
|
+
# its tracing context with a parent client-side context
|
|
14
|
+
class Server < Base
|
|
15
|
+
def trace(keywords)
|
|
16
|
+
options = {
|
|
17
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND,
|
|
18
|
+
service: service_name,
|
|
19
|
+
resource: format_resource(keywords[:method])
|
|
20
|
+
}
|
|
21
|
+
metadata = keywords[:call].metadata
|
|
22
|
+
|
|
23
|
+
set_distributed_context!(tracer, metadata)
|
|
24
|
+
|
|
25
|
+
tracer.trace(Ext::SPAN_SERVICE, options) do |span|
|
|
26
|
+
annotate!(span, metadata)
|
|
27
|
+
|
|
28
|
+
yield
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def set_distributed_context!(tracer, metadata)
|
|
35
|
+
tracer.provider.context = Datadog::GRPCPropagator
|
|
36
|
+
.extract(metadata)
|
|
37
|
+
rescue StandardError => e
|
|
38
|
+
Datadog::Tracer.log.debug(
|
|
39
|
+
"unable to propagate GRPC metadata to context: #{e}"
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def annotate!(span, metadata)
|
|
44
|
+
metadata.each do |header, value|
|
|
45
|
+
next if reserved_headers.include?(header)
|
|
46
|
+
span.set_tag(header, value)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Set analytics sample rate
|
|
50
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
51
|
+
rescue StandardError => e
|
|
52
|
+
Datadog::Tracer.log.debug("GRPC client trace failed: #{e}")
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def reserved_headers
|
|
56
|
+
[Datadog::Ext::DistributedTracing::GRPC_METADATA_TRACE_ID,
|
|
57
|
+
Datadog::Ext::DistributedTracing::GRPC_METADATA_PARENT_ID,
|
|
58
|
+
Datadog::Ext::DistributedTracing::GRPC_METADATA_SAMPLING_PRIORITY]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def format_resource(proto_method)
|
|
62
|
+
proto_method.owner
|
|
63
|
+
.to_s
|
|
64
|
+
.downcase
|
|
65
|
+
.split('::')
|
|
66
|
+
.<<(proto_method.name)
|
|
67
|
+
.join('.')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module GRPC
|
|
4
|
+
# gRPC integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'grpc'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_GRPC_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_GRPC_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'grpc'.freeze
|
|
10
|
+
SPAN_CLIENT = 'grpc.client'.freeze
|
|
11
|
+
SPAN_SERVICE = 'grpc.service'.freeze
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/grpc/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/grpc/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module GRPC
|
|
8
|
+
# Description of gRPC integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :grpc, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['grpc'] && Gem.loaded_specs['grpc'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::GRPC)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && version >= Gem::Version.new('0.10.0')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default_configuration
|
|
27
|
+
Configuration::Settings.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def patcher
|
|
31
|
+
Patcher
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require_relative 'datadog_interceptor'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module GRPC
|
|
6
|
+
# :nodoc:
|
|
7
|
+
# The `#intercept!` method is implemented in gRPC; this module
|
|
8
|
+
# will be prepended to the original class, effectively injecting
|
|
9
|
+
# our tracing middleware into the head of the call chain.
|
|
10
|
+
module InterceptWithDatadog
|
|
11
|
+
def intercept!(type, args = {})
|
|
12
|
+
if should_prepend?
|
|
13
|
+
datadog_interceptor = choose_datadog_interceptor(args)
|
|
14
|
+
|
|
15
|
+
@interceptors.unshift(datadog_interceptor.new) if datadog_interceptor
|
|
16
|
+
|
|
17
|
+
@trace_started = true
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
super
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def should_prepend?
|
|
26
|
+
!trace_started? && !already_prepended?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def trace_started?
|
|
30
|
+
defined?(@trace_started) && @trace_started
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def already_prepended?
|
|
34
|
+
@interceptors.any? do |interceptor|
|
|
35
|
+
interceptor.class.ancestors.include?(Datadog::Contrib::GRPC::DatadogInterceptor::Base)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def choose_datadog_interceptor(args)
|
|
40
|
+
if args.key?(:metadata)
|
|
41
|
+
Datadog::Contrib::GRPC::DatadogInterceptor::Client
|
|
42
|
+
elsif args.key?(:call)
|
|
43
|
+
Datadog::Contrib::GRPC::DatadogInterceptor::Server
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/grpc/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module GRPC
|
|
7
|
+
# Patcher enables patching of 'grpc' module.
|
|
8
|
+
module Patcher
|
|
9
|
+
include Contrib::Patcher
|
|
10
|
+
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
def patched?
|
|
14
|
+
done?(:grpc)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def patch
|
|
18
|
+
do_once(:grpc) do
|
|
19
|
+
begin
|
|
20
|
+
require 'ddtrace/propagation/grpc_propagator'
|
|
21
|
+
require 'ddtrace/contrib/grpc/datadog_interceptor'
|
|
22
|
+
require 'ddtrace/contrib/grpc/intercept_with_datadog'
|
|
23
|
+
|
|
24
|
+
add_pin!
|
|
25
|
+
|
|
26
|
+
prepend_interceptor
|
|
27
|
+
rescue StandardError => e
|
|
28
|
+
Datadog::Tracer.log.error("Unable to apply gRPC integration: #{e}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def add_pin!
|
|
34
|
+
DeprecatedPin.new(
|
|
35
|
+
get_option(:service_name),
|
|
36
|
+
app: Ext::APP,
|
|
37
|
+
app_type: Datadog::Ext::AppTypes::WEB,
|
|
38
|
+
tracer: get_option(:tracer)
|
|
39
|
+
).onto(::GRPC)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def prepend_interceptor
|
|
43
|
+
::GRPC::InterceptionContext
|
|
44
|
+
.send(:prepend, Datadog::Contrib::GRPC::InterceptWithDatadog)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def get_option(option)
|
|
48
|
+
Datadog.configuration[:grpc].get_option(option)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
52
|
+
# To be removed when support for Datadog::Pin with GRPC is removed.
|
|
53
|
+
class DeprecatedPin < Datadog::Pin
|
|
54
|
+
include Datadog::DeprecatedPin
|
|
55
|
+
|
|
56
|
+
DEPRECATION_WARNING = %(
|
|
57
|
+
Use of Datadog::Pin with GRPC is DEPRECATED.
|
|
58
|
+
Upgrade to the configuration API using the migration guide here:
|
|
59
|
+
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
60
|
+
|
|
61
|
+
def tracer=(tracer)
|
|
62
|
+
Datadog.configuration[:grpc][:tracer] = tracer
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def service_name=(service_name)
|
|
66
|
+
Datadog.configuration[:grpc][:service_name] = service_name
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def log_deprecation_warning(method_name)
|
|
70
|
+
do_once(method_name) do
|
|
71
|
+
Datadog::Tracer.log.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module HTTP
|
|
4
|
+
# HTTP integration circuit breaker behavior
|
|
5
|
+
# For avoiding recursive traces.
|
|
6
|
+
module CircuitBreaker
|
|
7
|
+
def should_skip_tracing?(req, address, port, tracer)
|
|
8
|
+
return true if datadog_http_request?(req, address, port, tracer)
|
|
9
|
+
|
|
10
|
+
# we don't want a "shotgun" effect with two nested traces for one
|
|
11
|
+
# logical get, and request is likely to call itself recursively
|
|
12
|
+
active = tracer.active_span
|
|
13
|
+
return true if active && (active.name == Ext::SPAN_REQUEST)
|
|
14
|
+
|
|
15
|
+
false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# We don't want to trace our own call to the API (they use net/http)
|
|
19
|
+
# TODO: We don't want this kind of coupling with the transport.
|
|
20
|
+
# Remove this when transport implements its own "skip tracing" mechanism.
|
|
21
|
+
def datadog_http_request?(req, address, port, tracer)
|
|
22
|
+
transport = tracer.writer.transport
|
|
23
|
+
|
|
24
|
+
transport_hostname = nil
|
|
25
|
+
transport_port = nil
|
|
26
|
+
|
|
27
|
+
# Get settings from transport, if available.
|
|
28
|
+
case transport
|
|
29
|
+
when Datadog::Transport::HTTP::Client
|
|
30
|
+
adapter = transport.current_api.adapter
|
|
31
|
+
if adapter.is_a?(Datadog::Transport::HTTP::Adapters::Net)
|
|
32
|
+
transport_hostname = adapter.hostname.to_s
|
|
33
|
+
transport_port = adapter.port.to_i
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# When we know the host & port (from the URI) we use it, else (most-likely
|
|
38
|
+
# called with a block) rely on the URL at the end.
|
|
39
|
+
if req.respond_to?(:uri) && req.uri
|
|
40
|
+
if req.uri.host.to_s == transport_hostname &&
|
|
41
|
+
req.uri.port.to_i == transport_port
|
|
42
|
+
return true
|
|
43
|
+
end
|
|
44
|
+
elsif address && port &&
|
|
45
|
+
address.to_s == transport_hostname &&
|
|
46
|
+
port.to_i == transport_port
|
|
47
|
+
return true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
false
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def should_skip_distributed_tracing?(pin)
|
|
54
|
+
if pin.config && pin.config.key?(:distributed_tracing)
|
|
55
|
+
return !pin.config[:distributed_tracing]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
!Datadog.configuration[:http][:distributed_tracing]
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/http/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module HTTP
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the HTTP 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 :distributed_tracing, default: true
|
|
21
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module HTTP
|
|
4
|
+
# HTTP integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'net/http'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_HTTP_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_HTTP_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'net/http'.freeze
|
|
10
|
+
SPAN_REQUEST = 'http.request'.freeze
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require 'uri'
|
|
2
|
+
require 'ddtrace/pin'
|
|
3
|
+
require 'ddtrace/ext/app_types'
|
|
4
|
+
require 'ddtrace/ext/http'
|
|
5
|
+
require 'ddtrace/ext/net'
|
|
6
|
+
require 'ddtrace/ext/distributed'
|
|
7
|
+
require 'ddtrace/contrib/analytics'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Contrib
|
|
11
|
+
module HTTP
|
|
12
|
+
# Instrumentation for Net::HTTP
|
|
13
|
+
module Instrumentation
|
|
14
|
+
def self.included(base)
|
|
15
|
+
base.send(:prepend, InstanceMethods)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Span hook invoked after request is completed.
|
|
19
|
+
def self.after_request(&block)
|
|
20
|
+
if block_given?
|
|
21
|
+
# Set hook
|
|
22
|
+
@after_request = block
|
|
23
|
+
else
|
|
24
|
+
# Get hook
|
|
25
|
+
@after_request ||= nil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# InstanceMethods - implementing instrumentation
|
|
30
|
+
module InstanceMethods
|
|
31
|
+
def request(req, body = nil, &block) # :yield: +response+
|
|
32
|
+
pin = datadog_pin
|
|
33
|
+
return super(req, body, &block) unless pin && pin.tracer
|
|
34
|
+
|
|
35
|
+
if Datadog::Contrib::HTTP.should_skip_tracing?(req, @address, @port, pin.tracer)
|
|
36
|
+
return super(req, body, &block)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
pin.tracer.trace(Ext::SPAN_REQUEST) do |span|
|
|
40
|
+
begin
|
|
41
|
+
span.service = pin.service
|
|
42
|
+
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
43
|
+
span.resource = req.method
|
|
44
|
+
|
|
45
|
+
if pin.tracer.enabled && !Datadog::Contrib::HTTP.should_skip_distributed_tracing?(pin)
|
|
46
|
+
Datadog::HTTPPropagator.inject!(span.context, req)
|
|
47
|
+
end
|
|
48
|
+
rescue StandardError => e
|
|
49
|
+
Datadog::Tracer.log.error("error preparing span for http request: #{e}")
|
|
50
|
+
ensure
|
|
51
|
+
response = super(req, body, &block)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Add additional tags to the span.
|
|
55
|
+
annotate_span!(span, req, response)
|
|
56
|
+
|
|
57
|
+
# Invoke hook, if set.
|
|
58
|
+
unless Contrib::HTTP::Instrumentation.after_request.nil?
|
|
59
|
+
Contrib::HTTP::Instrumentation.after_request.call(span, self, req, response)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
response
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def annotate_span!(span, request, response)
|
|
67
|
+
span.set_tag(Datadog::Ext::HTTP::URL, request.path)
|
|
68
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, request.method)
|
|
69
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, response.code)
|
|
70
|
+
|
|
71
|
+
if request.respond_to?(:uri) && request.uri
|
|
72
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, request.uri.host)
|
|
73
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, request.uri.port.to_s)
|
|
74
|
+
else
|
|
75
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, @address)
|
|
76
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, @port.to_s)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Set analytics sample rate
|
|
80
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate) if analytics_enabled?
|
|
81
|
+
|
|
82
|
+
case response.code.to_i
|
|
83
|
+
when 400...599
|
|
84
|
+
span.set_error(response)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def datadog_pin
|
|
89
|
+
@datadog_pin ||= begin
|
|
90
|
+
service = Datadog.configuration[:http][:service_name]
|
|
91
|
+
tracer = Datadog.configuration[:http][:tracer]
|
|
92
|
+
|
|
93
|
+
Datadog::Pin.new(service, app: Ext::APP, app_type: Datadog::Ext::AppTypes::WEB, tracer: tracer)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
def datadog_configuration
|
|
100
|
+
Datadog.configuration[:http]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def analytics_enabled?
|
|
104
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def analytics_sample_rate
|
|
108
|
+
datadog_configuration[:analytics_sample_rate]
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|