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,34 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module Excon
|
|
6
|
+
# Patcher enables patching of 'excon' module.
|
|
7
|
+
module Patcher
|
|
8
|
+
include Contrib::Patcher
|
|
9
|
+
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def patched?
|
|
13
|
+
done?(:excon)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def patch
|
|
17
|
+
do_once(:excon) do
|
|
18
|
+
begin
|
|
19
|
+
require 'ddtrace/contrib/excon/middleware'
|
|
20
|
+
|
|
21
|
+
add_middleware
|
|
22
|
+
rescue StandardError => e
|
|
23
|
+
Datadog::Tracer.log.error("Unable to apply Excon integration: #{e}")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def add_middleware
|
|
29
|
+
::Excon.defaults[:middlewares] = Middleware.around_default_stack
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'ddtrace/contrib/registry'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
# Extensions that can be added to the base library
|
|
6
|
+
# Adds registry, configuration access for integrations.
|
|
7
|
+
module Extensions
|
|
8
|
+
def self.extended(base)
|
|
9
|
+
Datadog.send(:extend, Helpers)
|
|
10
|
+
Datadog::Configuration::Settings.send(:include, Configuration::Settings)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Helper methods for Datadog module.
|
|
14
|
+
module Helpers
|
|
15
|
+
def registry
|
|
16
|
+
configuration.registry
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Configuration
|
|
21
|
+
# Extensions for Datadog::Configuration::Settings
|
|
22
|
+
module Settings
|
|
23
|
+
InvalidIntegrationError = Class.new(StandardError)
|
|
24
|
+
|
|
25
|
+
def self.included(base)
|
|
26
|
+
# Add the additional options to the global configuration settings
|
|
27
|
+
base.instance_eval do
|
|
28
|
+
option :registry, default: Registry.new
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def [](integration_name, configuration_name = :default)
|
|
33
|
+
integration = fetch_integration(integration_name)
|
|
34
|
+
integration.configuration(configuration_name) unless integration.nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def use(integration_name, options = {}, &block)
|
|
38
|
+
integration = fetch_integration(integration_name)
|
|
39
|
+
|
|
40
|
+
unless integration.nil?
|
|
41
|
+
configuration_name = options[:describes] || :default
|
|
42
|
+
filtered_options = options.reject { |k, _v| k == :describes }
|
|
43
|
+
integration.configure(configuration_name, filtered_options, &block)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
integration.patch if integration.respond_to?(:patch)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
|
|
51
|
+
def fetch_integration(name)
|
|
52
|
+
get_option(:registry)[name] ||
|
|
53
|
+
raise(InvalidIntegrationError, "'#{name}' is not a valid integration.")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Faraday
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the Faraday integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
DEFAULT_ERROR_HANDLER = lambda do |env|
|
|
12
|
+
Datadog::Ext::HTTP::ERROR_RANGE.cover?(env[:status])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_enabled do |o|
|
|
16
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :analytics_sample_rate do |o|
|
|
21
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
22
|
+
o.lazy
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
option :distributed_tracing, default: true
|
|
26
|
+
option :error_handler, default: DEFAULT_ERROR_HANDLER
|
|
27
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
28
|
+
option :split_by_domain, default: false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Faraday
|
|
4
|
+
# Faraday integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'faraday'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_FARADAY_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_FARADAY_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'faraday'.freeze
|
|
10
|
+
SPAN_REQUEST = 'faraday.request'.freeze
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/faraday/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/faraday/patcher'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Faraday
|
|
8
|
+
# Description of Faraday integration
|
|
9
|
+
class Integration
|
|
10
|
+
include Contrib::Integration
|
|
11
|
+
|
|
12
|
+
register_as :faraday, auto_patch: true
|
|
13
|
+
|
|
14
|
+
def self.version
|
|
15
|
+
Gem.loaded_specs['faraday'] && Gem.loaded_specs['faraday'].version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.present?
|
|
19
|
+
super && defined?(::Faraday)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.compatible?
|
|
23
|
+
super && version < Gem::Version.new('1.0.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,93 @@
|
|
|
1
|
+
require 'faraday'
|
|
2
|
+
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/ext/net'
|
|
4
|
+
require 'ddtrace/propagation/http_propagator'
|
|
5
|
+
require 'ddtrace/contrib/analytics'
|
|
6
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Contrib
|
|
10
|
+
module Faraday
|
|
11
|
+
# Middleware implements a faraday-middleware for ddtrace instrumentation
|
|
12
|
+
class Middleware < ::Faraday::Middleware
|
|
13
|
+
include Datadog::Ext::DistributedTracing
|
|
14
|
+
|
|
15
|
+
def initialize(app, options = {})
|
|
16
|
+
super(app)
|
|
17
|
+
@options = datadog_configuration.options_hash.merge(options)
|
|
18
|
+
setup_service!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def call(env)
|
|
22
|
+
tracer.trace(Ext::SPAN_REQUEST) do |span|
|
|
23
|
+
annotate!(span, env)
|
|
24
|
+
propagate!(span, env) if options[:distributed_tracing] && tracer.enabled
|
|
25
|
+
app.call(env).on_complete { |resp| handle_response(span, resp) }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
attr_reader :app, :options
|
|
32
|
+
|
|
33
|
+
def annotate!(span, env)
|
|
34
|
+
span.resource = resource_name(env)
|
|
35
|
+
span.service = service_name(env)
|
|
36
|
+
span.span_type = Datadog::Ext::HTTP::TYPE_OUTBOUND
|
|
37
|
+
|
|
38
|
+
# Set analytics sample rate
|
|
39
|
+
if analytics_enabled?
|
|
40
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path)
|
|
44
|
+
span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase)
|
|
45
|
+
span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host)
|
|
46
|
+
span.set_tag(Datadog::Ext::NET::TARGET_PORT, env[:url].port)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def handle_response(span, env)
|
|
50
|
+
if options.fetch(:error_handler).call(env)
|
|
51
|
+
span.set_error(["Error #{env[:status]}", env[:body]])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
span.set_tag(Datadog::Ext::HTTP::STATUS_CODE, env[:status])
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def propagate!(span, env)
|
|
58
|
+
Datadog::HTTPPropagator.inject!(span.context, env[:request_headers])
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def datadog_configuration
|
|
62
|
+
Datadog.configuration[:faraday]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def tracer
|
|
66
|
+
options[:tracer]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def service_name(env)
|
|
70
|
+
return env[:url].host if options[:split_by_domain]
|
|
71
|
+
|
|
72
|
+
options[:service_name]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def resource_name(env)
|
|
76
|
+
env[:method].to_s.upcase
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def analytics_enabled?
|
|
80
|
+
Contrib::Analytics.enabled?(options[:analytics_enabled])
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def analytics_sample_rate
|
|
84
|
+
options[:analytics_sample_rate]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def setup_service!
|
|
88
|
+
return if options[:service_name] == datadog_configuration[:service_name]
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/ext/app_types'
|
|
3
|
+
require 'ddtrace/contrib/faraday/ext'
|
|
4
|
+
require 'ddtrace/contrib/faraday/rack_builder'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Contrib
|
|
8
|
+
module Faraday
|
|
9
|
+
# Patcher enables patching of 'faraday' module.
|
|
10
|
+
module Patcher
|
|
11
|
+
include Contrib::Patcher
|
|
12
|
+
|
|
13
|
+
module_function
|
|
14
|
+
|
|
15
|
+
def patched?
|
|
16
|
+
done?(:faraday)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def patch
|
|
20
|
+
do_once(:faraday) do
|
|
21
|
+
begin
|
|
22
|
+
require 'ddtrace/contrib/faraday/middleware'
|
|
23
|
+
|
|
24
|
+
add_pin!
|
|
25
|
+
register_middleware!
|
|
26
|
+
add_default_middleware!
|
|
27
|
+
rescue StandardError => e
|
|
28
|
+
Datadog::Tracer.log.error("Unable to apply Faraday integration: #{e}")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def add_pin!
|
|
34
|
+
DeprecatedPin
|
|
35
|
+
.new(
|
|
36
|
+
get_option(:service_name),
|
|
37
|
+
app: Ext::APP,
|
|
38
|
+
app_type: Datadog::Ext::AppTypes::WEB,
|
|
39
|
+
tracer: get_option(:tracer)
|
|
40
|
+
).onto(::Faraday)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def register_middleware!
|
|
44
|
+
::Faraday::Middleware.register_middleware(ddtrace: Middleware)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_default_middleware!
|
|
48
|
+
::Faraday::RackBuilder.send(:prepend, RackBuilder)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def get_option(option)
|
|
52
|
+
Datadog.configuration[:faraday].get_option(option)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Implementation of deprecated Pin, which raises warnings when accessed.
|
|
56
|
+
# To be removed when support for Datadog::Pin with Faraday is removed.
|
|
57
|
+
class DeprecatedPin < Datadog::Pin
|
|
58
|
+
include Datadog::DeprecatedPin
|
|
59
|
+
|
|
60
|
+
DEPRECATION_WARNING = %(
|
|
61
|
+
Use of Datadog::Pin with Faraday is DEPRECATED.
|
|
62
|
+
Upgrade to the configuration API using the migration guide here:
|
|
63
|
+
https://github.com/DataDog/dd-trace-rb/releases/tag/v0.11.0).freeze
|
|
64
|
+
|
|
65
|
+
def tracer=(tracer)
|
|
66
|
+
Datadog.configuration[:faraday][:tracer] = tracer
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def service_name=(service_name)
|
|
70
|
+
Datadog.configuration[:faraday][:service_name] = service_name
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def log_deprecation_warning(method_name)
|
|
74
|
+
do_once(method_name) do
|
|
75
|
+
Datadog::Tracer.log.warn("#{method_name}:#{DEPRECATION_WARNING}")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module Faraday
|
|
4
|
+
# Handles installation of our middleware if the user has *not*
|
|
5
|
+
# already explicitly configured it for this correction.
|
|
6
|
+
#
|
|
7
|
+
# RackBuilder class was introduced in faraday 0.9.0:
|
|
8
|
+
# https://github.com/lostisland/faraday/commit/77d7546d6d626b91086f427c56bc2cdd951353b3
|
|
9
|
+
module RackBuilder
|
|
10
|
+
def adapter(*args)
|
|
11
|
+
use(:ddtrace) unless @handlers.any? { |h| h.klass == Middleware }
|
|
12
|
+
|
|
13
|
+
super
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/ext/http'
|
|
3
|
+
require 'ddtrace/contrib/grape/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module Grape
|
|
8
|
+
module Configuration
|
|
9
|
+
# Custom settings for the Grape integration
|
|
10
|
+
class Settings < Contrib::Configuration::Settings
|
|
11
|
+
option :analytics_enabled do |o|
|
|
12
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, nil) }
|
|
13
|
+
o.lazy
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
option :analytics_sample_rate do |o|
|
|
17
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
18
|
+
o.lazy
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
option :enabled, default: true
|
|
22
|
+
option :service_name, default: Ext::SERVICE_NAME
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
require 'ddtrace/ext/http'
|
|
2
|
+
require 'ddtrace/ext/errors'
|
|
3
|
+
require 'ddtrace/contrib/analytics'
|
|
4
|
+
require 'ddtrace/contrib/rack/ext'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Contrib
|
|
8
|
+
module Grape
|
|
9
|
+
# rubocop:disable Metrics/ModuleLength
|
|
10
|
+
# Endpoint module includes a list of subscribers to create
|
|
11
|
+
# traces when a Grape endpoint is hit
|
|
12
|
+
module Endpoint
|
|
13
|
+
KEY_RUN = 'datadog_grape_endpoint_run'.freeze
|
|
14
|
+
KEY_RENDER = 'datadog_grape_endpoint_render'.freeze
|
|
15
|
+
|
|
16
|
+
class << self
|
|
17
|
+
def subscribe
|
|
18
|
+
# subscribe when a Grape endpoint is hit
|
|
19
|
+
::ActiveSupport::Notifications.subscribe('endpoint_run.grape.start_process') do |*args|
|
|
20
|
+
endpoint_start_process(*args)
|
|
21
|
+
end
|
|
22
|
+
::ActiveSupport::Notifications.subscribe('endpoint_run.grape') do |*args|
|
|
23
|
+
endpoint_run(*args)
|
|
24
|
+
end
|
|
25
|
+
::ActiveSupport::Notifications.subscribe('endpoint_render.grape.start_render') do |*args|
|
|
26
|
+
endpoint_start_render(*args)
|
|
27
|
+
end
|
|
28
|
+
::ActiveSupport::Notifications.subscribe('endpoint_render.grape') do |*args|
|
|
29
|
+
endpoint_render(*args)
|
|
30
|
+
end
|
|
31
|
+
::ActiveSupport::Notifications.subscribe('endpoint_run_filters.grape') do |*args|
|
|
32
|
+
endpoint_run_filters(*args)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def endpoint_start_process(*)
|
|
37
|
+
return if Thread.current[KEY_RUN]
|
|
38
|
+
return unless enabled?
|
|
39
|
+
|
|
40
|
+
# Store the beginning of a trace
|
|
41
|
+
tracer.trace(
|
|
42
|
+
Ext::SPAN_ENDPOINT_RUN,
|
|
43
|
+
service: service_name,
|
|
44
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
Thread.current[KEY_RUN] = true
|
|
48
|
+
rescue StandardError => e
|
|
49
|
+
Datadog::Tracer.log.error(e.message)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def endpoint_run(name, start, finish, id, payload)
|
|
53
|
+
return unless Thread.current[KEY_RUN]
|
|
54
|
+
Thread.current[KEY_RUN] = false
|
|
55
|
+
|
|
56
|
+
return unless enabled?
|
|
57
|
+
|
|
58
|
+
span = tracer.active_span
|
|
59
|
+
return unless span
|
|
60
|
+
|
|
61
|
+
begin
|
|
62
|
+
# collect endpoint details
|
|
63
|
+
api = payload[:endpoint].options[:for]
|
|
64
|
+
# If the API inherits from Grape::API in version >= 1.2.0
|
|
65
|
+
# then the API will be an instance and the name must be derived from the base.
|
|
66
|
+
# See https://github.com/ruby-grape/grape/issues/1825
|
|
67
|
+
api_view = if defined?(::Grape::API::Instance) && api <= ::Grape::API::Instance
|
|
68
|
+
api.base.to_s
|
|
69
|
+
else
|
|
70
|
+
api.to_s
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
path = payload[:endpoint].options[:path].join('/')
|
|
74
|
+
resource = "#{api_view}##{path}"
|
|
75
|
+
span.resource = resource
|
|
76
|
+
|
|
77
|
+
# set the request span resource if it's a `rack.request` span
|
|
78
|
+
request_span = payload[:env][Datadog::Contrib::Rack::Ext::RACK_ENV_REQUEST_SPAN]
|
|
79
|
+
if !request_span.nil? && request_span.name == Datadog::Contrib::Rack::Ext::SPAN_REQUEST
|
|
80
|
+
request_span.resource = resource
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Set analytics sample rate
|
|
84
|
+
if analytics_enabled?
|
|
85
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# catch thrown exceptions
|
|
89
|
+
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
90
|
+
|
|
91
|
+
# override the current span with this notification values
|
|
92
|
+
span.set_tag(Ext::TAG_ROUTE_ENDPOINT, api_view) unless api_view.nil?
|
|
93
|
+
span.set_tag(Ext::TAG_ROUTE_PATH, path)
|
|
94
|
+
ensure
|
|
95
|
+
span.start_time = start
|
|
96
|
+
span.finish(finish)
|
|
97
|
+
end
|
|
98
|
+
rescue StandardError => e
|
|
99
|
+
Datadog::Tracer.log.error(e.message)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def endpoint_start_render(*)
|
|
103
|
+
return if Thread.current[KEY_RENDER]
|
|
104
|
+
return unless enabled?
|
|
105
|
+
|
|
106
|
+
# Store the beginning of a trace
|
|
107
|
+
tracer.trace(
|
|
108
|
+
Ext::SPAN_ENDPOINT_RENDER,
|
|
109
|
+
service: service_name,
|
|
110
|
+
span_type: Datadog::Ext::HTTP::TEMPLATE
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
Thread.current[KEY_RENDER] = true
|
|
114
|
+
rescue StandardError => e
|
|
115
|
+
Datadog::Tracer.log.error(e.message)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def endpoint_render(name, start, finish, id, payload)
|
|
119
|
+
return unless Thread.current[KEY_RENDER]
|
|
120
|
+
Thread.current[KEY_RENDER] = false
|
|
121
|
+
|
|
122
|
+
return unless enabled?
|
|
123
|
+
|
|
124
|
+
span = tracer.active_span
|
|
125
|
+
return unless span
|
|
126
|
+
|
|
127
|
+
# catch thrown exceptions
|
|
128
|
+
begin
|
|
129
|
+
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
130
|
+
ensure
|
|
131
|
+
span.start_time = start
|
|
132
|
+
span.finish(finish)
|
|
133
|
+
end
|
|
134
|
+
rescue StandardError => e
|
|
135
|
+
Datadog::Tracer.log.error(e.message)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def endpoint_run_filters(name, start, finish, id, payload)
|
|
139
|
+
return unless enabled?
|
|
140
|
+
|
|
141
|
+
# safe-guard to prevent submitting empty filters
|
|
142
|
+
zero_length = (finish - start).zero?
|
|
143
|
+
filters = payload[:filters]
|
|
144
|
+
type = payload[:type]
|
|
145
|
+
return if (!filters || filters.empty?) || !type || zero_length
|
|
146
|
+
|
|
147
|
+
span = tracer.trace(
|
|
148
|
+
Ext::SPAN_ENDPOINT_RUN_FILTERS,
|
|
149
|
+
service: service_name,
|
|
150
|
+
span_type: Datadog::Ext::HTTP::TYPE_INBOUND
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
begin
|
|
154
|
+
# Set analytics sample rate
|
|
155
|
+
if analytics_enabled?
|
|
156
|
+
Contrib::Analytics.set_sample_rate(span, analytics_sample_rate)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# catch thrown exceptions
|
|
160
|
+
span.set_error(payload[:exception_object]) unless payload[:exception_object].nil?
|
|
161
|
+
span.set_tag(Ext::TAG_FILTER_TYPE, type.to_s)
|
|
162
|
+
ensure
|
|
163
|
+
span.start_time = start
|
|
164
|
+
span.finish(finish)
|
|
165
|
+
end
|
|
166
|
+
rescue StandardError => e
|
|
167
|
+
Datadog::Tracer.log.error(e.message)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
private
|
|
171
|
+
|
|
172
|
+
def tracer
|
|
173
|
+
datadog_configuration[:tracer]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def service_name
|
|
177
|
+
datadog_configuration[:service_name]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def analytics_enabled?
|
|
181
|
+
Contrib::Analytics.enabled?(datadog_configuration[:analytics_enabled])
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def analytics_sample_rate
|
|
185
|
+
datadog_configuration[:analytics_sample_rate]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def enabled?
|
|
189
|
+
datadog_configuration[:enabled] == true
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def datadog_configuration
|
|
193
|
+
Datadog.configuration[:grape]
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|