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,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/http/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/http/patcher'
|
|
4
|
+
require 'ddtrace/contrib/http/circuit_breaker'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Contrib
|
|
8
|
+
# HTTP integration
|
|
9
|
+
module HTTP
|
|
10
|
+
extend CircuitBreaker
|
|
11
|
+
|
|
12
|
+
# Description of HTTP integration
|
|
13
|
+
class Integration
|
|
14
|
+
include Contrib::Integration
|
|
15
|
+
|
|
16
|
+
register_as :http, auto_patch: true
|
|
17
|
+
|
|
18
|
+
def self.version
|
|
19
|
+
Gem::Version.new(RUBY_VERSION)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def default_configuration
|
|
23
|
+
Configuration::Settings.new
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def patcher
|
|
27
|
+
Patcher
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/http/ext'
|
|
3
|
+
require 'ddtrace/contrib/http/instrumentation'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
# Datadog Net/HTTP integration.
|
|
8
|
+
module HTTP
|
|
9
|
+
# Patcher enables patching of 'net/http' module.
|
|
10
|
+
module Patcher
|
|
11
|
+
include Contrib::Patcher
|
|
12
|
+
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
def patched?
|
|
16
|
+
done?(:http)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# patch applies our patch if needed
|
|
20
|
+
def patch
|
|
21
|
+
do_once(:http) do
|
|
22
|
+
begin
|
|
23
|
+
::Net::HTTP.send(:include, Instrumentation)
|
|
24
|
+
rescue StandardError => e
|
|
25
|
+
Datadog::Tracer.log.error("Unable to apply net/http integration: #{e}")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configurable'
|
|
2
|
+
require 'ddtrace/contrib/patchable'
|
|
3
|
+
require 'ddtrace/contrib/registerable'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
# Base provides features that are shared across all integrations
|
|
8
|
+
module Integration
|
|
9
|
+
def self.included(base)
|
|
10
|
+
base.send(:include, Configurable)
|
|
11
|
+
base.send(:include, Patchable)
|
|
12
|
+
base.send(:include, Registerable)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/mongodb/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module MongoDB
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the MongoDB integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
DEFAULT_QUANTIZE = { show: [:collection, :database, :operation] }.freeze
|
|
11
|
+
|
|
12
|
+
option :analytics_enabled do |o|
|
|
13
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
14
|
+
o.lazy
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
option :analytics_sample_rate do |o|
|
|
18
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
19
|
+
o.lazy
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
option :quantize, default: DEFAULT_QUANTIZE
|
|
23
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module MongoDB
|
|
4
|
+
# MongoDB integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'mongodb'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_MONGO_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_MONGO_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'mongodb'.freeze
|
|
10
|
+
SPAN_COMMAND = 'mongo.cmd'.freeze
|
|
11
|
+
SPAN_TYPE_COMMAND = 'mongodb'.freeze
|
|
12
|
+
TAG_COLLECTION = 'mongodb.collection'.freeze
|
|
13
|
+
TAG_DB = 'mongodb.db'.freeze
|
|
14
|
+
TAG_OPERATION = 'mongodb.operation'.freeze
|
|
15
|
+
TAG_QUERY = 'mongodb.query'.freeze
|
|
16
|
+
TAG_ROWS = 'mongodb.rows'.freeze
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'ddtrace/pin'
|
|
2
|
+
require 'ddtrace/ext/net'
|
|
3
|
+
require 'ddtrace/ext/app_types'
|
|
4
|
+
require 'ddtrace/contrib/mongodb/ext'
|
|
5
|
+
require 'ddtrace/contrib/mongodb/parsers'
|
|
6
|
+
require 'ddtrace/contrib/mongodb/subscribers'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Contrib
|
|
10
|
+
module MongoDB
|
|
11
|
+
# Instrumentation for Mongo integration
|
|
12
|
+
module Instrumentation
|
|
13
|
+
# Instrumentation for Mongo::Client
|
|
14
|
+
module Client
|
|
15
|
+
def self.included(base)
|
|
16
|
+
base.send(:include, InstanceMethods)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Instance methods for Mongo::Client
|
|
20
|
+
module InstanceMethods
|
|
21
|
+
def datadog_pin
|
|
22
|
+
# safe-navigation to avoid crashes during each query
|
|
23
|
+
return unless respond_to? :cluster
|
|
24
|
+
return unless cluster.respond_to? :addresses
|
|
25
|
+
return unless cluster.addresses.respond_to? :first
|
|
26
|
+
Datadog::Pin.get_from(cluster.addresses.first)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def datadog_pin=(pin)
|
|
30
|
+
# safe-navigation to avoid crashes during each query
|
|
31
|
+
return unless respond_to? :cluster
|
|
32
|
+
return unless cluster.respond_to? :addresses
|
|
33
|
+
return unless cluster.addresses.respond_to? :each
|
|
34
|
+
# attach the PIN to all cluster addresses. One of them is used
|
|
35
|
+
# when executing a Command and it is attached to the Monitoring
|
|
36
|
+
# Event instance.
|
|
37
|
+
cluster.addresses.each { |x| pin.onto(x) }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Instrumentation for Mongo::Address
|
|
43
|
+
module Address
|
|
44
|
+
def self.included(base)
|
|
45
|
+
base.send(:include, InstanceMethods)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Instance methods for Mongo::Address
|
|
49
|
+
module InstanceMethods
|
|
50
|
+
def datadog_pin
|
|
51
|
+
@datadog_pin ||= begin
|
|
52
|
+
tracer = Datadog.configuration[:mongo][:tracer]
|
|
53
|
+
service = Datadog.configuration[:mongo][:service_name]
|
|
54
|
+
|
|
55
|
+
Datadog::Pin.new(
|
|
56
|
+
service,
|
|
57
|
+
app: Datadog::Contrib::MongoDB::Ext::APP,
|
|
58
|
+
app_type: Datadog::Ext::AppTypes::DB,
|
|
59
|
+
tracer: tracer
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/mongodb/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/mongodb/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module MongoDB
|
|
8
|
+
# Description of MongoDB integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :mongo, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['mongo'] && Gem.loaded_specs['mongo'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Mongo::Monitoring::Global)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && version >= Gem::Version.new('2.1.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,68 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
# MongoDB module includes classes and functions to instrument MongoDB clients
|
|
4
|
+
module MongoDB
|
|
5
|
+
EXCLUDE_KEYS = [:_id].freeze
|
|
6
|
+
SHOW_KEYS = [].freeze
|
|
7
|
+
DEFAULT_OPTIONS = { exclude: EXCLUDE_KEYS, show: SHOW_KEYS }.freeze
|
|
8
|
+
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
# skipped keys are related to command names, since they are already
|
|
12
|
+
# extracted by the query_builder
|
|
13
|
+
PLACEHOLDER = '?'.freeze
|
|
14
|
+
|
|
15
|
+
# returns a formatted and normalized query
|
|
16
|
+
def query_builder(command_name, database_name, command)
|
|
17
|
+
# always exclude the command name
|
|
18
|
+
options = Quantization::Hash.merge_options(quantization_options, exclude: [command_name.to_s])
|
|
19
|
+
|
|
20
|
+
# quantized statements keys are strings to avoid leaking Symbols in older Rubies
|
|
21
|
+
# as Symbols are not GC'ed in Rubies prior to 2.2
|
|
22
|
+
base_info = Quantization::Hash.format({
|
|
23
|
+
'operation' => command_name,
|
|
24
|
+
'database' => database_name,
|
|
25
|
+
'collection' => command.values.first
|
|
26
|
+
}, options)
|
|
27
|
+
|
|
28
|
+
base_info.merge(Quantization::Hash.format(command, options))
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# removes the values from the given query; this quantization recursively
|
|
32
|
+
# replace elements available in a given query, so that Arrays, Hashes and so
|
|
33
|
+
# on are compacted. It ensures a low cardinality so that it can be used
|
|
34
|
+
# as a Span resource.
|
|
35
|
+
# @deprecated
|
|
36
|
+
def quantize_statement(statement, skip = [])
|
|
37
|
+
case statement
|
|
38
|
+
when Hash
|
|
39
|
+
statement.each_with_object({}) do |(key, value), quantized|
|
|
40
|
+
quantized[key] = quantize_value(value, skip) unless skip.include?(key)
|
|
41
|
+
end
|
|
42
|
+
else
|
|
43
|
+
quantize_value(statement, skip)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @deprecated
|
|
48
|
+
def quantize_value(value, skip = [])
|
|
49
|
+
case value
|
|
50
|
+
when Hash
|
|
51
|
+
quantize_statement(value, skip)
|
|
52
|
+
when Array
|
|
53
|
+
quantize_value(value.first, skip)
|
|
54
|
+
else
|
|
55
|
+
PLACEHOLDER
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def quantization_options
|
|
60
|
+
Datadog::Quantization::Hash.merge_options(DEFAULT_OPTIONS, configuration[:quantize])
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def configuration
|
|
64
|
+
Datadog.configuration[:mongo]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/mongodb/ext'
|
|
3
|
+
require 'ddtrace/contrib/mongodb/instrumentation'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module MongoDB
|
|
8
|
+
# Patcher enables patching of 'mongo' module.
|
|
9
|
+
module Patcher
|
|
10
|
+
include Contrib::Patcher
|
|
11
|
+
|
|
12
|
+
module_function
|
|
13
|
+
|
|
14
|
+
def patched?
|
|
15
|
+
done?(:mongo)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def patch
|
|
19
|
+
do_once(:mongo) do
|
|
20
|
+
begin
|
|
21
|
+
::Mongo::Address.send(:include, Instrumentation::Address)
|
|
22
|
+
::Mongo::Client.send(:include, Instrumentation::Client)
|
|
23
|
+
add_mongo_monitoring
|
|
24
|
+
rescue StandardError => e
|
|
25
|
+
Datadog::Tracer.log.error("Unable to apply MongoDB integration: #{e}")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def add_mongo_monitoring
|
|
31
|
+
# Subscribe to all COMMAND queries with our subscriber class
|
|
32
|
+
::Mongo::Monitoring::Global.subscribe(::Mongo::Monitoring::COMMAND, MongoCommandSubscriber.new)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
2
|
+
require 'ddtrace/contrib/mongodb/ext'
|
|
3
|
+
require 'ddtrace/contrib/mongodb/parsers'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module MongoDB
|
|
8
|
+
# `MongoCommandSubscriber` listens to all events from the `Monitoring`
|
|
9
|
+
# system available in the Mongo driver.
|
|
10
|
+
class MongoCommandSubscriber
|
|
11
|
+
def started(event)
|
|
12
|
+
pin = Datadog::Pin.get_from(event.address)
|
|
13
|
+
return unless pin && pin.enabled?
|
|
14
|
+
|
|
15
|
+
# start a trace and store it in the current thread; using the `operation_id`
|
|
16
|
+
# is safe since it's a unique id used to link events together. Also only one
|
|
17
|
+
# thread is involved in this execution so thread-local storage should be safe. Reference:
|
|
18
|
+
# https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/monitoring.rb#L70
|
|
19
|
+
# https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/monitoring/publishable.rb#L38-L56
|
|
20
|
+
span = pin.tracer.trace(Ext::SPAN_COMMAND, service: pin.service, span_type: Ext::SPAN_TYPE_COMMAND)
|
|
21
|
+
set_span(event, span)
|
|
22
|
+
|
|
23
|
+
# build a quantized Query using the Parser module
|
|
24
|
+
query = MongoDB.query_builder(event.command_name, event.database_name, event.command)
|
|
25
|
+
serialized_query = query.to_s
|
|
26
|
+
|
|
27
|
+
# Set analytics sample rate
|
|
28
|
+
if analytics_enabled?
|
|
29
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# add operation tags; the full query is stored and used as a resource,
|
|
33
|
+
# since it has been quantized and reduced
|
|
34
|
+
span.set_tag(Ext::TAG_DB, query['database'])
|
|
35
|
+
span.set_tag(Ext::TAG_COLLECTION, query['collection'])
|
|
36
|
+
span.set_tag(Ext::TAG_OPERATION, query['operation'])
|
|
37
|
+
span.set_tag(Ext::TAG_QUERY, serialized_query)
|
|
38
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, event.address.host)
|
|
39
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, event.address.port)
|
|
40
|
+
|
|
41
|
+
# set the resource with the quantized query
|
|
42
|
+
span.resource = serialized_query
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def failed(event)
|
|
46
|
+
span = get_span(event)
|
|
47
|
+
return unless span
|
|
48
|
+
|
|
49
|
+
# the failure is not a real exception because it's handled by
|
|
50
|
+
# the framework itself, so we set only the error and the message
|
|
51
|
+
span.set_error(event)
|
|
52
|
+
rescue StandardError => e
|
|
53
|
+
Datadog::Tracer.log.debug("error when handling MongoDB 'failed' event: #{e}")
|
|
54
|
+
ensure
|
|
55
|
+
# whatever happens, the Span must be removed from the local storage and
|
|
56
|
+
# it must be finished to prevent any leak
|
|
57
|
+
span.finish unless span.nil?
|
|
58
|
+
clear_span(event)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def succeeded(event)
|
|
62
|
+
span = get_span(event)
|
|
63
|
+
return unless span
|
|
64
|
+
|
|
65
|
+
# add fields that are available only after executing the query
|
|
66
|
+
rows = event.reply.fetch('n', nil)
|
|
67
|
+
span.set_tag(Ext::TAG_ROWS, rows) unless rows.nil?
|
|
68
|
+
rescue StandardError => e
|
|
69
|
+
Datadog::Tracer.log.debug("error when handling MongoDB 'succeeded' event: #{e}")
|
|
70
|
+
ensure
|
|
71
|
+
# whatever happens, the Span must be removed from the local storage and
|
|
72
|
+
# it must be finished to prevent any leak
|
|
73
|
+
span.finish unless span.nil?
|
|
74
|
+
clear_span(event)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def get_span(event)
|
|
80
|
+
Thread.current[:datadog_mongo_span] \
|
|
81
|
+
&& Thread.current[:datadog_mongo_span][event.request_id]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def set_span(event, span)
|
|
85
|
+
Thread.current[:datadog_mongo_span] ||= {}
|
|
86
|
+
Thread.current[:datadog_mongo_span][event.request_id] = span
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def clear_span(event)
|
|
90
|
+
return if Thread.current[:datadog_mongo_span].nil?
|
|
91
|
+
Thread.current[:datadog_mongo_span].delete(event.request_id)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def analytics_enabled?
|
|
95
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def analytics_sample_rate
|
|
99
|
+
datadog_configuration[:analytics_sample_rate]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def datadog_configuration
|
|
103
|
+
Datadog.configuration[:mongo]
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|