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,72 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Rack
|
|
4
|
+
# Provides instrumentation for `rack`
|
|
5
|
+
module Patcher
|
|
6
|
+
include Contrib::Patcher
|
|
7
|
+
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
def patched?
|
|
11
|
+
done?(:rack)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def patch
|
|
15
|
+
# Patch middleware
|
|
16
|
+
do_once(:rack) do
|
|
17
|
+
require_relative 'middlewares'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Patch middleware names
|
|
21
|
+
if !done?(:rack_middleware_names) && get_option(:middleware_names)
|
|
22
|
+
if get_option(:application)
|
|
23
|
+
do_once(:rack_middleware_names) do
|
|
24
|
+
patch_middleware_names
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
Datadog::Tracer.log.warn(%(
|
|
28
|
+
Rack :middleware_names requires you to also pass :application.
|
|
29
|
+
Middleware names have NOT been patched; please provide :application.
|
|
30
|
+
e.g. use: :rack, middleware_names: true, application: my_rack_app).freeze)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
rescue StandardError => e
|
|
34
|
+
Datadog::Tracer.log.error("Unable to apply Rack integration: #{e}")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def patch_middleware_names
|
|
38
|
+
retain_middleware_name(get_option(:application))
|
|
39
|
+
rescue => e
|
|
40
|
+
# We can safely ignore these exceptions since they happen only in the
|
|
41
|
+
# context of middleware patching outside a Rails server process (eg. a
|
|
42
|
+
# process that doesn't serve HTTP requests but has Rails environment
|
|
43
|
+
# loaded such as a Resque master process)
|
|
44
|
+
Tracer.log.debug("Error patching middleware stack: #{e}")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def retain_middleware_name(middleware)
|
|
48
|
+
return unless middleware && middleware.respond_to?(:call)
|
|
49
|
+
|
|
50
|
+
middleware.singleton_class.class_eval do
|
|
51
|
+
alias_method :__call, :call
|
|
52
|
+
|
|
53
|
+
def call(env)
|
|
54
|
+
env['RESPONSE_MIDDLEWARE'] = self.class.to_s
|
|
55
|
+
__call(env)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
following = if middleware.instance_variable_defined?('@app')
|
|
60
|
+
middleware.instance_variable_get('@app')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
retain_middleware_name(following)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def get_option(option)
|
|
67
|
+
Datadog.configuration[:rack].get_option(option)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Rack
|
|
4
|
+
# QueueTime simply...
|
|
5
|
+
module QueueTime
|
|
6
|
+
REQUEST_START = 'HTTP_X_REQUEST_START'.freeze
|
|
7
|
+
QUEUE_START = 'HTTP_X_QUEUE_START'.freeze
|
|
8
|
+
MINIMUM_ACCEPTABLE_TIME_VALUE = 1_000_000_000
|
|
9
|
+
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def get_request_start(env, now = Time.now.utc)
|
|
13
|
+
header = env[REQUEST_START] || env[QUEUE_START]
|
|
14
|
+
return unless header
|
|
15
|
+
|
|
16
|
+
# nginx header is seconds in the format "t=1512379167.574"
|
|
17
|
+
# apache header is microseconds in the format "t=1570633834463123"
|
|
18
|
+
# heroku header is milliseconds in the format "1570634024294"
|
|
19
|
+
time_string = header.to_s.delete('^0-9')
|
|
20
|
+
return if time_string.nil?
|
|
21
|
+
|
|
22
|
+
# Return nil if the time is clearly invalid
|
|
23
|
+
time_value = "#{time_string[0, 10]}.#{time_string[10, 6]}".to_f
|
|
24
|
+
return if time_value.zero? || time_value < MINIMUM_ACCEPTABLE_TIME_VALUE
|
|
25
|
+
|
|
26
|
+
# return the request_start only if it's lesser than
|
|
27
|
+
# current time, to avoid significant clock skew
|
|
28
|
+
request_start = Time.at(time_value)
|
|
29
|
+
request_start.utc > now ? nil : request_start
|
|
30
|
+
rescue StandardError => e
|
|
31
|
+
# in case of an Exception we don't create a
|
|
32
|
+
# `request.queuing` span
|
|
33
|
+
Datadog::Tracer.log.debug("[rack] unable to parse request queue headers: #{e}")
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module Rails
|
|
6
|
+
module Configuration
|
|
7
|
+
# Custom settings for the Rails integration
|
|
8
|
+
class Settings < Contrib::Configuration::Settings
|
|
9
|
+
option :analytics_enabled do |o|
|
|
10
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
11
|
+
o.lazy
|
|
12
|
+
o.on_set do |value|
|
|
13
|
+
# Update ActionPack analytics too
|
|
14
|
+
Datadog.configuration[:action_pack][:analytics_enabled] = value
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
option :analytics_sample_rate do |o|
|
|
19
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
20
|
+
o.lazy
|
|
21
|
+
o.on_set do |value|
|
|
22
|
+
# Update ActionPack analytics too
|
|
23
|
+
Datadog.configuration[:action_pack][:analytics_sample_rate] = value
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
option :cache_service do |o|
|
|
28
|
+
o.on_set do |value|
|
|
29
|
+
# Update ActiveSupport service name too
|
|
30
|
+
Datadog.configuration[:active_support][:cache_service] = value
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
option :controller_service do |o|
|
|
35
|
+
o.on_set do |value|
|
|
36
|
+
# Update ActionPack service name too
|
|
37
|
+
Datadog.configuration[:action_pack][:controller_service] = value
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
option :database_service do |o|
|
|
42
|
+
o.depends_on :service_name
|
|
43
|
+
o.on_set do |value|
|
|
44
|
+
# Update ActiveRecord service name too
|
|
45
|
+
Datadog.configuration[:active_record][:service_name] = value
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
option :distributed_tracing, default: true
|
|
50
|
+
option :exception_controller do |o|
|
|
51
|
+
o.on_set do |value|
|
|
52
|
+
# Update ActionPack exception controller too
|
|
53
|
+
Datadog.configuration[:action_pack][:exception_controller] = value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
option :middleware, default: true
|
|
58
|
+
option :middleware_names, default: false
|
|
59
|
+
option :template_base_path do |o|
|
|
60
|
+
o.default 'views/'
|
|
61
|
+
o.on_set do |value|
|
|
62
|
+
# Update ActionView template base path too
|
|
63
|
+
Datadog.configuration[:action_view][:template_base_path] = value
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
option :tracer do |o|
|
|
68
|
+
o.delegate_to { Datadog.tracer }
|
|
69
|
+
o.on_set do |value|
|
|
70
|
+
Datadog.configuration[:active_record][:tracer] = value
|
|
71
|
+
Datadog.configuration[:active_support][:tracer] = value
|
|
72
|
+
Datadog.configuration[:action_pack][:tracer] = value
|
|
73
|
+
Datadog.configuration[:action_view][:tracer] = value
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Rails
|
|
4
|
+
# Rails integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'rails'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_RAILS_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_RAILS_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'ddtrace/pin'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/contrib/active_record/integration'
|
|
5
|
+
require 'ddtrace/contrib/active_support/integration'
|
|
6
|
+
require 'ddtrace/contrib/action_pack/integration'
|
|
7
|
+
require 'ddtrace/contrib/action_view/integration'
|
|
8
|
+
require 'ddtrace/contrib/grape/endpoint'
|
|
9
|
+
|
|
10
|
+
require 'ddtrace/contrib/rails/ext'
|
|
11
|
+
require 'ddtrace/contrib/rails/utils'
|
|
12
|
+
|
|
13
|
+
module Datadog
|
|
14
|
+
module Contrib
|
|
15
|
+
# Instrument Rails.
|
|
16
|
+
module Rails
|
|
17
|
+
# Rails framework code, used to essentially:
|
|
18
|
+
# - handle configuration entries which are specific to Datadog tracing
|
|
19
|
+
# - instrument parts of the framework when needed
|
|
20
|
+
module Framework
|
|
21
|
+
# configure Datadog settings
|
|
22
|
+
def self.setup
|
|
23
|
+
config = config_with_defaults
|
|
24
|
+
|
|
25
|
+
activate_rack!(config)
|
|
26
|
+
activate_active_support!(config)
|
|
27
|
+
activate_action_pack!(config)
|
|
28
|
+
activate_action_view!(config)
|
|
29
|
+
activate_active_record!(config)
|
|
30
|
+
|
|
31
|
+
# By default, default service would be guessed from the script
|
|
32
|
+
# being executed, but here we know better, get it from Rails config.
|
|
33
|
+
config[:tracer].default_service = config[:service_name]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.config_with_defaults
|
|
37
|
+
# We set defaults here instead of in the patcher because we need to wait
|
|
38
|
+
# for the Rails application to be fully initialized.
|
|
39
|
+
Datadog.configuration[:rails].tap do |config|
|
|
40
|
+
config[:service_name] ||= Utils.app_name
|
|
41
|
+
config[:database_service] ||= "#{config[:service_name]}-#{Contrib::ActiveRecord::Utils.adapter_name}"
|
|
42
|
+
config[:controller_service] ||= config[:service_name]
|
|
43
|
+
config[:cache_service] ||= "#{config[:service_name]}-cache"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.activate_rack!(config)
|
|
48
|
+
Datadog.configuration.use(
|
|
49
|
+
:rack,
|
|
50
|
+
tracer: config[:tracer],
|
|
51
|
+
application: ::Rails.application,
|
|
52
|
+
service_name: config[:service_name],
|
|
53
|
+
middleware_names: config[:middleware_names],
|
|
54
|
+
distributed_tracing: config[:distributed_tracing]
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.activate_active_support!(config)
|
|
59
|
+
return unless defined?(::ActiveSupport)
|
|
60
|
+
|
|
61
|
+
Datadog.configuration.use(
|
|
62
|
+
:active_support,
|
|
63
|
+
cache_service: config[:cache_service],
|
|
64
|
+
tracer: config[:tracer]
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.activate_action_pack!(config)
|
|
69
|
+
return unless defined?(::ActionPack)
|
|
70
|
+
|
|
71
|
+
Datadog.configuration.use(
|
|
72
|
+
:action_pack,
|
|
73
|
+
service_name: config[:service_name],
|
|
74
|
+
tracer: config[:tracer]
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.activate_action_view!(config)
|
|
79
|
+
return unless defined?(::ActionView)
|
|
80
|
+
|
|
81
|
+
Datadog.configuration.use(
|
|
82
|
+
:action_view,
|
|
83
|
+
service_name: config[:service_name],
|
|
84
|
+
tracer: config[:tracer]
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def self.activate_active_record!(config)
|
|
89
|
+
return unless defined?(::ActiveRecord)
|
|
90
|
+
|
|
91
|
+
Datadog.configuration.use(
|
|
92
|
+
:active_record,
|
|
93
|
+
service_name: config[:database_service],
|
|
94
|
+
tracer: config[:tracer]
|
|
95
|
+
)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/rails/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/rails/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Rails
|
|
8
|
+
# Description of Rails integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :rails, auto_patch: false
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['rails'] && Gem.loaded_specs['rails'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
defined?(::Rails)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
return false if ENV['DISABLE_DATADOG_RAILS']
|
|
24
|
+
super && defined?(::Rails::VERSION) && ::Rails::VERSION::MAJOR.to_i >= 3
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_configuration
|
|
28
|
+
Configuration::Settings.new
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def patcher
|
|
32
|
+
Patcher
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/contrib/action_pack/utils'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
# Rails module includes middlewares that are required for Rails to be properly instrumented.
|
|
7
|
+
module Rails
|
|
8
|
+
# This is only here to catch errors, the Rack module does something very similar, however,
|
|
9
|
+
# since it's not in the same place in the stack, when the Rack middleware is called,
|
|
10
|
+
# error is already swallowed and handled by Rails so we miss the call stack, for instance.
|
|
11
|
+
class ExceptionMiddleware
|
|
12
|
+
def initialize(app)
|
|
13
|
+
@app = app
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def call(env)
|
|
17
|
+
@app.call(env)
|
|
18
|
+
# rubocop:disable Lint/RescueException
|
|
19
|
+
# Here we really want to catch *any* exception, not only StandardError,
|
|
20
|
+
# as we really have no clue of what is in the block,
|
|
21
|
+
# and it is user code which should be executed no matter what.
|
|
22
|
+
# It's not a problem since we re-raise it afterwards so for example a
|
|
23
|
+
# SignalException::Interrupt would still bubble up.
|
|
24
|
+
rescue Exception => e
|
|
25
|
+
tracer = Datadog.configuration[:rails][:tracer]
|
|
26
|
+
span = tracer.active_span
|
|
27
|
+
unless span.nil?
|
|
28
|
+
# Only set error if it's supposed to be flagged as such
|
|
29
|
+
# e.g. we don't want to flag 404s.
|
|
30
|
+
# You can add custom errors via `config.action_dispatch.rescue_responses`
|
|
31
|
+
span.set_error(e) if ActionPack::Utils.exception_is_error?(e)
|
|
32
|
+
end
|
|
33
|
+
raise e
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
require 'ddtrace/contrib/rails/utils'
|
|
2
|
+
require 'ddtrace/contrib/rails/framework'
|
|
3
|
+
require 'ddtrace/contrib/rails/middlewares'
|
|
4
|
+
require 'ddtrace/contrib/rack/middlewares'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Contrib
|
|
8
|
+
module Rails
|
|
9
|
+
# Patcher enables patching of 'rails' module.
|
|
10
|
+
module Patcher
|
|
11
|
+
include Contrib::Patcher
|
|
12
|
+
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
def patched?
|
|
16
|
+
done?(:rails)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def patch
|
|
20
|
+
do_once(:rails) do
|
|
21
|
+
patch_before_intialize
|
|
22
|
+
patch_after_intialize
|
|
23
|
+
end
|
|
24
|
+
rescue => e
|
|
25
|
+
Datadog::Tracer.log.error("Unable to apply Rails integration: #{e}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def patch_before_intialize
|
|
29
|
+
::ActiveSupport.on_load(:before_initialize) do
|
|
30
|
+
Datadog::Contrib::Rails::Patcher.before_intialize(self)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def before_intialize(app)
|
|
35
|
+
do_once(:rails_before_initialize, for: app) do
|
|
36
|
+
# Middleware must be added before the application is initialized.
|
|
37
|
+
# Otherwise the middleware stack will be frozen.
|
|
38
|
+
# Sometimes we don't want to activate middleware e.g. OpenTracing, etc.
|
|
39
|
+
add_middleware(app) if Datadog.configuration[:rails][:middleware]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def add_middleware(app)
|
|
44
|
+
# Add trace middleware
|
|
45
|
+
app.middleware.insert_before(0, Datadog::Contrib::Rack::TraceMiddleware)
|
|
46
|
+
|
|
47
|
+
# Insert right after Rails exception handling middleware, because if it's before,
|
|
48
|
+
# it catches and swallows the error. If it's too far after, custom middleware can find itself
|
|
49
|
+
# between, and raise exceptions that don't end up getting tagged on the request properly.
|
|
50
|
+
# e.g lost stack trace.
|
|
51
|
+
app.middleware.insert_after(
|
|
52
|
+
ActionDispatch::ShowExceptions,
|
|
53
|
+
Datadog::Contrib::Rails::ExceptionMiddleware
|
|
54
|
+
)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def patch_after_intialize
|
|
58
|
+
::ActiveSupport.on_load(:after_initialize) do
|
|
59
|
+
Datadog::Contrib::Rails::Patcher.after_intialize(self)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def after_intialize(app)
|
|
64
|
+
do_once(:rails_after_initialize, for: app) do
|
|
65
|
+
# Finish configuring the tracer after the application is initialized.
|
|
66
|
+
# We need to wait for some things, like application name, middleware stack, etc.
|
|
67
|
+
setup_tracer
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Configure Rails tracing with settings
|
|
72
|
+
def setup_tracer
|
|
73
|
+
Datadog::Contrib::Rails::Framework.setup
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|