ddtrace 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.circleci/config.yml +492 -0
- data/.circleci/images/primary/Dockerfile-2.0.0 +73 -0
- data/.circleci/images/primary/Dockerfile-2.1.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.2.10 +73 -0
- data/.circleci/images/primary/Dockerfile-2.3.8 +75 -0
- data/.circleci/images/primary/Dockerfile-2.4.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.5.6 +73 -0
- data/.circleci/images/primary/Dockerfile-2.6.4 +73 -0
- data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
- data/.dockerignore +1 -0
- data/.env +26 -0
- data/.github/CODEOWNERS +1 -0
- data/.gitignore +61 -0
- data/.gitlab-ci.yml +26 -0
- data/.rspec +1 -0
- data/.rubocop.yml +85 -0
- data/.yardopts +5 -0
- data/Appraisals +961 -0
- data/CHANGELOG.md +1402 -0
- data/CONTRIBUTING.md +85 -0
- data/Gemfile +7 -0
- data/LICENSE +6 -0
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +23 -0
- data/Rakefile +753 -0
- data/benchmarks/postgres_database.yml +9 -0
- data/benchmarks/sidekiq_test.rb +154 -0
- data/ddtrace.gemspec +71 -0
- data/docker-compose.yml +370 -0
- data/docs/DevelopmentGuide.md +195 -0
- data/docs/GettingStarted.md +2224 -0
- data/lib/ddtrace.rb +76 -0
- data/lib/ddtrace/analytics.rb +36 -0
- data/lib/ddtrace/augmentation.rb +13 -0
- data/lib/ddtrace/augmentation/method_wrapper.rb +20 -0
- data/lib/ddtrace/augmentation/method_wrapping.rb +38 -0
- data/lib/ddtrace/augmentation/shim.rb +102 -0
- data/lib/ddtrace/buffer.rb +119 -0
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +53 -0
- data/lib/ddtrace/configuration/base.rb +84 -0
- data/lib/ddtrace/configuration/components.rb +154 -0
- data/lib/ddtrace/configuration/dependency_resolver.rb +24 -0
- data/lib/ddtrace/configuration/option.rb +64 -0
- data/lib/ddtrace/configuration/option_definition.rb +123 -0
- data/lib/ddtrace/configuration/option_definition_set.rb +18 -0
- data/lib/ddtrace/configuration/option_set.rb +6 -0
- data/lib/ddtrace/configuration/options.rb +112 -0
- data/lib/ddtrace/configuration/pin_setup.rb +31 -0
- data/lib/ddtrace/configuration/settings.rb +273 -0
- data/lib/ddtrace/context.rb +305 -0
- data/lib/ddtrace/context_flush.rb +69 -0
- data/lib/ddtrace/context_provider.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +23 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +148 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +25 -0
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +16 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +23 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +36 -0
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/action_view/event.rb +39 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +17 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +74 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +167 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +45 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +47 -0
- data/lib/ddtrace/contrib/action_view/utils.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +68 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +30 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +32 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +35 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +17 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +40 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +29 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +45 -0
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/active_record/event.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events.rb +30 -0
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +60 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +64 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +46 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +23 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +76 -0
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +157 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +48 -0
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +47 -0
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +21 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +40 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +64 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +66 -0
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +159 -0
- data/lib/ddtrace/contrib/active_support/patcher.rb +23 -0
- data/lib/ddtrace/contrib/analytics.rb +24 -0
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/aws/ext.rb +20 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +56 -0
- data/lib/ddtrace/contrib/aws/integration.rb +42 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +56 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +49 -0
- data/lib/ddtrace/contrib/aws/services.rb +115 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +15 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +41 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +11 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +23 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +38 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +28 -0
- data/lib/ddtrace/contrib/configurable.rb +76 -0
- data/lib/ddtrace/contrib/configuration/resolver.rb +16 -0
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +53 -0
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +17 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +50 -0
- data/lib/ddtrace/contrib/dalli/integration.rb +38 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +63 -0
- data/lib/ddtrace/contrib/dalli/quantize.rb +22 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +18 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +38 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +28 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +61 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +19 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +39 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +117 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +80 -0
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +148 -0
- data/lib/ddtrace/contrib/ethon/ext.rb +15 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +43 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +80 -0
- data/lib/ddtrace/contrib/ethon/patcher.rb +25 -0
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/excon/ext.rb +14 -0
- data/lib/ddtrace/contrib/excon/integration.rb +43 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +157 -0
- data/lib/ddtrace/contrib/excon/patcher.rb +27 -0
- data/lib/ddtrace/contrib/extensions.rb +93 -0
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +33 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +14 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +43 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +83 -0
- data/lib/ddtrace/contrib/faraday/patcher.rb +80 -0
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +18 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +208 -0
- data/lib/ddtrace/contrib/grape/ext.rb +19 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +33 -0
- data/lib/ddtrace/contrib/grape/integration.rb +39 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +73 -0
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +13 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +39 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +60 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +74 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +54 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +76 -0
- data/lib/ddtrace/contrib/grpc/ext.rb +15 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +38 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +49 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +68 -0
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +39 -0
- data/lib/ddtrace/contrib/http/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/http/ext.rb +14 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +175 -0
- data/lib/ddtrace/contrib/http/integration.rb +45 -0
- data/lib/ddtrace/contrib/http/patcher.rb +26 -0
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +14 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +163 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/integration.rb +16 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +38 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +28 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +20 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +67 -0
- data/lib/ddtrace/contrib/mongodb/integration.rb +38 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +68 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +31 -0
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +108 -0
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +15 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +60 -0
- data/lib/ddtrace/contrib/mysql2/integration.rb +38 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +27 -0
- data/lib/ddtrace/contrib/patchable.rb +59 -0
- data/lib/ddtrace/contrib/patcher.rb +62 -0
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/presto/ext.rb +25 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
- data/lib/ddtrace/contrib/presto/integration.rb +38 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/racecar/event.rb +71 -0
- data/lib/ddtrace/contrib/racecar/events.rb +30 -0
- data/lib/ddtrace/contrib/racecar/events/batch.rb +27 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +21 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +39 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +26 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +41 -0
- data/lib/ddtrace/contrib/rack/ext.rb +18 -0
- data/lib/ddtrace/contrib/rack/integration.rb +38 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +290 -0
- data/lib/ddtrace/contrib/rack/patcher.rb +107 -0
- data/lib/ddtrace/contrib/rack/request_queue.rb +39 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +83 -0
- data/lib/ddtrace/contrib/rails/ext.rb +13 -0
- data/lib/ddtrace/contrib/rails/framework.rb +124 -0
- data/lib/ddtrace/contrib/rails/integration.rb +44 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +38 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +74 -0
- data/lib/ddtrace/contrib/rails/railtie.rb +17 -0
- data/lib/ddtrace/contrib/rails/utils.rb +20 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +27 -0
- data/lib/ddtrace/contrib/rake/ext.rb +18 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +88 -0
- data/lib/ddtrace/contrib/rake/integration.rb +38 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +30 -0
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/redis/ext.rb +18 -0
- data/lib/ddtrace/contrib/redis/integration.rb +42 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +97 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +47 -0
- data/lib/ddtrace/contrib/redis/tags.rb +38 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
- data/lib/ddtrace/contrib/registerable.rb +33 -0
- data/lib/ddtrace/contrib/registry.rb +42 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/resque/ext.rb +14 -0
- data/lib/ddtrace/contrib/resque/integration.rb +47 -0
- data/lib/ddtrace/contrib/resque/patcher.rb +29 -0
- data/lib/ddtrace/contrib/resque/resque_job.rb +80 -0
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +26 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +14 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +38 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +23 -0
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +89 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +23 -0
- data/lib/ddtrace/contrib/sequel/database.rb +61 -0
- data/lib/ddtrace/contrib/sequel/dataset.rb +62 -0
- data/lib/ddtrace/contrib/sequel/ext.rb +15 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +38 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +33 -0
- data/lib/ddtrace/contrib/sequel/utils.rb +46 -0
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +18 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +39 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +24 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +49 -0
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +43 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +31 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +24 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +38 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +41 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +67 -0
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +45 -0
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +34 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +58 -0
- data/lib/ddtrace/contrib/sinatra/ext.rb +24 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +31 -0
- data/lib/ddtrace/contrib/sinatra/integration.rb +38 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +28 -0
- data/lib/ddtrace/contrib/sinatra/tracer.rb +150 -0
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +78 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +25 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +26 -0
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +18 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +84 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +38 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +42 -0
- data/lib/ddtrace/correlation.rb +38 -0
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/diagnostics/health.rb +33 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +44 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +56 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +42 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +70 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +45 -0
- data/lib/ddtrace/encoding.rb +69 -0
- data/lib/ddtrace/environment.rb +31 -0
- data/lib/ddtrace/error.rb +27 -0
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +12 -0
- data/lib/ddtrace/ext/app_types.rb +11 -0
- data/lib/ddtrace/ext/correlation.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +35 -0
- data/lib/ddtrace/ext/distributed.rb +33 -0
- data/lib/ddtrace/ext/environment.rb +16 -0
- data/lib/ddtrace/ext/errors.rb +10 -0
- data/lib/ddtrace/ext/forced_tracing.rb +25 -0
- data/lib/ddtrace/ext/http.rb +46 -0
- data/lib/ddtrace/ext/manual_tracing.rb +9 -0
- data/lib/ddtrace/ext/metrics.rb +15 -0
- data/lib/ddtrace/ext/net.rb +10 -0
- data/lib/ddtrace/ext/priority.rb +16 -0
- data/lib/ddtrace/ext/runtime.rb +26 -0
- data/lib/ddtrace/ext/sampling.rb +16 -0
- data/lib/ddtrace/ext/sql.rb +8 -0
- data/lib/ddtrace/ext/transport.rb +17 -0
- data/lib/ddtrace/forced_tracing.rb +36 -0
- data/lib/ddtrace/logger.rb +40 -0
- data/lib/ddtrace/metrics.rb +222 -0
- data/lib/ddtrace/monkey.rb +58 -0
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/opentracer.rb +40 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +24 -0
- data/lib/ddtrace/opentracer/carrier.rb +6 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +52 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +15 -0
- data/lib/ddtrace/opentracer/propagator.rb +22 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +60 -0
- data/lib/ddtrace/opentracer/scope.rb +15 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +6 -0
- data/lib/ddtrace/opentracer/span.rb +98 -0
- data/lib/ddtrace/opentracer/span_context.rb +14 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +23 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +75 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +30 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +40 -0
- data/lib/ddtrace/opentracer/tracer.rb +208 -0
- data/lib/ddtrace/patcher.rb +47 -0
- data/lib/ddtrace/pin.rb +138 -0
- data/lib/ddtrace/pipeline.rb +46 -0
- data/lib/ddtrace/pipeline/span_filter.rb +38 -0
- data/lib/ddtrace/pipeline/span_processor.rb +20 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +61 -0
- data/lib/ddtrace/propagation/http_propagator.rb +75 -0
- data/lib/ddtrace/quantization/hash.rb +103 -0
- data/lib/ddtrace/quantization/http.rb +86 -0
- data/lib/ddtrace/runtime/cgroup.rb +44 -0
- data/lib/ddtrace/runtime/class_count.rb +17 -0
- data/lib/ddtrace/runtime/container.rb +73 -0
- data/lib/ddtrace/runtime/gc.rb +16 -0
- data/lib/ddtrace/runtime/identity.rb +41 -0
- data/lib/ddtrace/runtime/metrics.rb +96 -0
- data/lib/ddtrace/runtime/object_space.rb +19 -0
- data/lib/ddtrace/runtime/socket.rb +14 -0
- data/lib/ddtrace/runtime/thread_count.rb +16 -0
- data/lib/ddtrace/sampler.rb +292 -0
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
- data/lib/ddtrace/span.rb +307 -0
- data/lib/ddtrace/sync_writer.rb +67 -0
- data/lib/ddtrace/tracer.rb +439 -0
- data/lib/ddtrace/transport/http.rb +91 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +120 -0
- data/lib/ddtrace/transport/http/adapters/registry.rb +24 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +81 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +68 -0
- data/lib/ddtrace/transport/http/api.rb +46 -0
- data/lib/ddtrace/transport/http/api/endpoint.rb +27 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +22 -0
- data/lib/ddtrace/transport/http/api/instance.rb +33 -0
- data/lib/ddtrace/transport/http/api/map.rb +14 -0
- data/lib/ddtrace/transport/http/api/spec.rb +15 -0
- data/lib/ddtrace/transport/http/builder.rb +163 -0
- data/lib/ddtrace/transport/http/client.rb +50 -0
- data/lib/ddtrace/transport/http/env.rb +48 -0
- data/lib/ddtrace/transport/http/response.rb +26 -0
- data/lib/ddtrace/transport/http/statistics.rb +30 -0
- data/lib/ddtrace/transport/http/traces.rb +143 -0
- data/lib/ddtrace/transport/io.rb +26 -0
- data/lib/ddtrace/transport/io/client.rb +76 -0
- data/lib/ddtrace/transport/io/response.rb +25 -0
- data/lib/ddtrace/transport/io/traces.rb +91 -0
- data/lib/ddtrace/transport/parcel.rb +13 -0
- data/lib/ddtrace/transport/request.rb +13 -0
- data/lib/ddtrace/transport/response.rb +60 -0
- data/lib/ddtrace/transport/statistics.rb +72 -0
- data/lib/ddtrace/transport/traces.rb +183 -0
- data/lib/ddtrace/utils.rb +65 -0
- data/lib/ddtrace/utils/database.rb +25 -0
- data/lib/ddtrace/utils/time.rb +14 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +301 -0
- data/lib/ddtrace/version.rb +12 -0
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers.rb +117 -0
- data/lib/ddtrace/workers/async.rb +165 -0
- data/lib/ddtrace/workers/loop.rb +105 -0
- data/lib/ddtrace/workers/polling.rb +48 -0
- data/lib/ddtrace/workers/queue.rb +39 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
- data/lib/ddtrace/workers/trace_writer.rb +202 -0
- data/lib/ddtrace/writer.rb +175 -0
- data/tasks/release_gem.rake +28 -0
- metadata +815 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'ddtrace/contrib/patcher'
|
|
2
|
+
require 'ddtrace/contrib/active_support/cache/instrumentation'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActiveSupport
|
|
7
|
+
module Cache
|
|
8
|
+
# Patcher enables patching of 'active_support' module.
|
|
9
|
+
module Patcher
|
|
10
|
+
include Contrib::Patcher
|
|
11
|
+
|
|
12
|
+
module_function
|
|
13
|
+
|
|
14
|
+
def target_version
|
|
15
|
+
Integration.version
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def patch
|
|
19
|
+
patch_cache_store_read
|
|
20
|
+
patch_cache_store_fetch
|
|
21
|
+
patch_cache_store_write
|
|
22
|
+
patch_cache_store_delete
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def cache_store_class(meth)
|
|
26
|
+
::ActiveSupport::Cache::Store
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def patch_cache_store_read
|
|
30
|
+
cache_store_class(:read).send(:prepend, Cache::Instrumentation::Read)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def patch_cache_store_fetch
|
|
34
|
+
cache_store_class(:fetch).send(:prepend, Cache::Instrumentation::Fetch)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def patch_cache_store_write
|
|
38
|
+
cache_store_class(:write).send(:prepend, Cache::Instrumentation::Write)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def patch_cache_store_delete
|
|
42
|
+
cache_store_class(:delete).send(:prepend, Cache::Instrumentation::Delete)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'ddtrace/contrib/active_support/cache/patcher'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module ActiveSupport
|
|
6
|
+
module Cache
|
|
7
|
+
# Support for Redis with ActiveSupport
|
|
8
|
+
module Redis
|
|
9
|
+
# Patching behavior for Redis with ActiveSupport
|
|
10
|
+
module Patcher
|
|
11
|
+
# For Rails < 5.2 w/ redis-activesupport...
|
|
12
|
+
# When Redis is used, we can't only patch Cache::Store as it is
|
|
13
|
+
# Cache::RedisStore, a sub-class of it that is used, in practice.
|
|
14
|
+
# We need to do a per-method monkey patching as some of them might
|
|
15
|
+
# be redefined, and some of them not. The latest version of redis-activesupport
|
|
16
|
+
# redefines write but leaves untouched read and delete:
|
|
17
|
+
# https://github.com/redis-store/redis-activesupport/blob/v4.1.5/lib/active_support/cache/redis_store.rb
|
|
18
|
+
#
|
|
19
|
+
# For Rails >= 5.2 w/o redis-activesupport...
|
|
20
|
+
# ActiveSupport includes a Redis cache store internally, and does not require these overrides.
|
|
21
|
+
# https://github.com/rails/rails/blob/master/activesupport/lib/active_support/cache/redis_cache_store.rb
|
|
22
|
+
def patch_redis?(meth)
|
|
23
|
+
!Gem.loaded_specs['redis-activesupport'].nil? \
|
|
24
|
+
&& defined?(::ActiveSupport::Cache::RedisStore) \
|
|
25
|
+
&& ::ActiveSupport::Cache::RedisStore.instance_methods(false).include?(meth)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def cache_store_class(meth)
|
|
29
|
+
if patch_redis?(meth)
|
|
30
|
+
::ActiveSupport::Cache::RedisStore
|
|
31
|
+
else
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Decorate Cache patcher with Redis support
|
|
38
|
+
Cache::Patcher.instance_eval do
|
|
39
|
+
class << self
|
|
40
|
+
prepend Redis::Patcher
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/active_support/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActiveSupport
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the ActiveSupport integration
|
|
9
|
+
class Settings < Contrib::Configuration::Settings
|
|
10
|
+
option :analytics_enabled do |o|
|
|
11
|
+
o.default { env_to_bool(Ext::ENV_ANALYTICS_ENABLED, false) }
|
|
12
|
+
o.lazy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
option :analytics_sample_rate do |o|
|
|
16
|
+
o.default { env_to_float(Ext::ENV_ANALYTICS_SAMPLE_RATE, 1.0) }
|
|
17
|
+
o.lazy
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
option :cache_service, default: Ext::SERVICE_CACHE
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module ActiveSupport
|
|
4
|
+
# ActiveSupport integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'active_support'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_ACTIVE_SUPPORT_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_ACTIVE_SUPPORT_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
QUANTIZE_CACHE_MAX_KEY_SIZE = 300
|
|
10
|
+
RESOURCE_CACHE_DELETE = 'DELETE'.freeze
|
|
11
|
+
RESOURCE_CACHE_GET = 'GET'.freeze
|
|
12
|
+
RESOURCE_CACHE_SET = 'SET'.freeze
|
|
13
|
+
SERVICE_CACHE = 'active_support-cache'.freeze
|
|
14
|
+
SPAN_CACHE = 'rails.cache'.freeze
|
|
15
|
+
SPAN_TYPE_CACHE = 'cache'.freeze
|
|
16
|
+
TAG_CACHE_BACKEND = 'rails.cache.backend'.freeze
|
|
17
|
+
TAG_CACHE_KEY = 'rails.cache.key'.freeze
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'ddtrace/contrib/integration'
|
|
2
|
+
require 'ddtrace/contrib/active_support/configuration/settings'
|
|
3
|
+
require 'ddtrace/contrib/active_support/patcher'
|
|
4
|
+
|
|
5
|
+
require 'ddtrace/contrib/active_support/cache/redis'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module Contrib
|
|
9
|
+
module ActiveSupport
|
|
10
|
+
# Describes the ActiveSupport integration
|
|
11
|
+
class Integration
|
|
12
|
+
include Contrib::Integration
|
|
13
|
+
|
|
14
|
+
MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
15
|
+
|
|
16
|
+
register_as :active_support, auto_patch: false
|
|
17
|
+
|
|
18
|
+
def self.version
|
|
19
|
+
Gem.loaded_specs['activesupport'] && Gem.loaded_specs['activesupport'].version
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.loaded?
|
|
23
|
+
!defined?(::ActiveSupport).nil?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.compatible?
|
|
27
|
+
super && version >= MINIMUM_VERSION
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def default_configuration
|
|
31
|
+
Configuration::Settings.new
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def patcher
|
|
35
|
+
ActiveSupport::Patcher
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'ddtrace/contrib/active_support/notifications/subscriber'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Contrib
|
|
5
|
+
module ActiveSupport
|
|
6
|
+
module Notifications
|
|
7
|
+
# Defines behaviors for an ActiveSupport::Notifications event.
|
|
8
|
+
# Compose this into a module or class, then define
|
|
9
|
+
# #event_name, #span_name, and #process. You can then
|
|
10
|
+
# invoke Event.subscribe! to more easily subscribe to an event.
|
|
11
|
+
module Event
|
|
12
|
+
def self.included(base)
|
|
13
|
+
base.send(:include, Subscriber)
|
|
14
|
+
base.send(:extend, ClassMethods)
|
|
15
|
+
base.send(:on_subscribe) { base.subscribe }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Redefines some class behaviors for a Subscriber to make
|
|
19
|
+
# it a bit simpler for an Event.
|
|
20
|
+
module ClassMethods
|
|
21
|
+
DEFAULT_TRACER = -> { Datadog.tracer }
|
|
22
|
+
|
|
23
|
+
def subscribe!
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def subscription(span_name = nil, options = nil, tracer = nil)
|
|
28
|
+
super(
|
|
29
|
+
span_name || self.span_name,
|
|
30
|
+
options || span_options,
|
|
31
|
+
tracer || self.tracer,
|
|
32
|
+
&method(:process)
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def subscribe(pattern = nil, span_name = nil, options = nil, tracer = nil)
|
|
37
|
+
if supported?
|
|
38
|
+
super(
|
|
39
|
+
pattern || event_name,
|
|
40
|
+
span_name || self.span_name,
|
|
41
|
+
options || span_options,
|
|
42
|
+
tracer || self.tracer,
|
|
43
|
+
&method(:process)
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def supported?
|
|
49
|
+
true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def span_options
|
|
53
|
+
{}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def tracer
|
|
57
|
+
DEFAULT_TRACER
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
require 'ddtrace/contrib/active_support/notifications/subscription'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActiveSupport
|
|
7
|
+
module Notifications
|
|
8
|
+
# For classes that listen to ActiveSupport::Notification events.
|
|
9
|
+
# Creates subscriptions that are wrapped with tracing.
|
|
10
|
+
module Subscriber
|
|
11
|
+
def self.included(base)
|
|
12
|
+
base.send(:extend, ClassMethods)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Class methods that are implemented in the inheriting class.
|
|
16
|
+
module ClassMethods
|
|
17
|
+
# Returns a list of subscriptions created for this class.
|
|
18
|
+
def subscriptions
|
|
19
|
+
@subscriptions ||= Set.new
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns whether subscriptions have been activated, via #subscribe!
|
|
23
|
+
def subscribed?
|
|
24
|
+
subscribed == true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
# Defines a callback for when subscribe! is called.
|
|
30
|
+
# Should contain subscription setup, defined by the inheriting class.
|
|
31
|
+
def on_subscribe(&block)
|
|
32
|
+
@on_subscribe_block = block
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Runs the on_subscribe callback once, to activate subscriptions.
|
|
36
|
+
# Should be triggered by the inheriting class.
|
|
37
|
+
def subscribe!
|
|
38
|
+
return subscribed? if subscribed? || on_subscribe_block.nil?
|
|
39
|
+
on_subscribe_block.call
|
|
40
|
+
@subscribed = true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Creates a subscription and immediately activates it.
|
|
44
|
+
def subscribe(pattern, span_name, options = {}, tracer = -> { Datadog.tracer }, &block)
|
|
45
|
+
subscription(span_name, options, tracer, &block).tap do |subscription|
|
|
46
|
+
subscription.subscribe(pattern)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Creates a subscription without activating it.
|
|
51
|
+
# Subscription is added to the inheriting class' list of subscriptions.
|
|
52
|
+
def subscription(span_name, options = {}, tracer = -> { Datadog.tracer }, &block)
|
|
53
|
+
Subscription.new(tracer, span_name, options, &block).tap do |subscription|
|
|
54
|
+
subscriptions << subscription
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
attr_reader :subscribed, :on_subscribe_block
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module ActiveSupport
|
|
4
|
+
module Notifications
|
|
5
|
+
# An ActiveSupport::Notification subscription that wraps events with tracing.
|
|
6
|
+
class Subscription
|
|
7
|
+
attr_accessor \
|
|
8
|
+
:span_name,
|
|
9
|
+
:options
|
|
10
|
+
|
|
11
|
+
def initialize(tracer, span_name, options, &block)
|
|
12
|
+
raise ArgumentError, 'Must be given a block!' unless block_given?
|
|
13
|
+
@tracer = tracer
|
|
14
|
+
@span_name = span_name
|
|
15
|
+
@options = options
|
|
16
|
+
@handler = Handler.new(&block)
|
|
17
|
+
@callbacks = Callbacks.new
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def tracer
|
|
21
|
+
@tracer.is_a?(Proc) ? @tracer.call : @tracer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# ActiveSupport 3.x calls this
|
|
25
|
+
def call(name, start, finish, id, payload)
|
|
26
|
+
start_span(name, id, payload, start)
|
|
27
|
+
finish_span(name, id, payload, finish)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# ActiveSupport 4+ calls this on start
|
|
31
|
+
def start(name, id, payload)
|
|
32
|
+
start_span(name, id, payload)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# ActiveSupport 4+ calls this on finish
|
|
36
|
+
def finish(name, id, payload)
|
|
37
|
+
finish_span(name, id, payload)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def before_trace(&block)
|
|
41
|
+
callbacks.add(:before_trace, &block) if block_given?
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def after_trace(&block)
|
|
45
|
+
callbacks.add(:after_trace, &block) if block_given?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def subscribe(pattern)
|
|
49
|
+
return false if subscribers.key?(pattern)
|
|
50
|
+
subscribers[pattern] = ::ActiveSupport::Notifications.subscribe(pattern, self)
|
|
51
|
+
true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def unsubscribe(pattern)
|
|
55
|
+
return false unless subscribers.key?(pattern)
|
|
56
|
+
::ActiveSupport::Notifications.unsubscribe(subscribers[pattern])
|
|
57
|
+
subscribers.delete(pattern)
|
|
58
|
+
true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def unsubscribe_all
|
|
62
|
+
return false if subscribers.empty?
|
|
63
|
+
subscribers.keys.each { |pattern| unsubscribe(pattern) }
|
|
64
|
+
true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
protected
|
|
68
|
+
|
|
69
|
+
attr_reader \
|
|
70
|
+
:handler,
|
|
71
|
+
:callbacks
|
|
72
|
+
|
|
73
|
+
def start_span(name, id, payload, start = nil)
|
|
74
|
+
# Run callbacks
|
|
75
|
+
callbacks.run(name, :before_trace, id, payload, start)
|
|
76
|
+
|
|
77
|
+
# Start a trace
|
|
78
|
+
tracer.trace(@span_name, @options.dup).tap do |span|
|
|
79
|
+
# Assign start time if provided
|
|
80
|
+
span.start_time = start unless start.nil?
|
|
81
|
+
payload[:datadog_span] = span
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def finish_span(name, id, payload, finish = nil)
|
|
86
|
+
payload[:datadog_span].tap do |span|
|
|
87
|
+
# If no active span, return.
|
|
88
|
+
return nil if span.nil?
|
|
89
|
+
|
|
90
|
+
# Run handler for event
|
|
91
|
+
handler.run(span, name, id, payload)
|
|
92
|
+
|
|
93
|
+
# Finish the span
|
|
94
|
+
span.finish(finish)
|
|
95
|
+
|
|
96
|
+
# Run callbacks
|
|
97
|
+
callbacks.run(name, :after_trace, span, id, payload, finish)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Pattern => ActiveSupport:Notifications::Subscribers
|
|
102
|
+
def subscribers
|
|
103
|
+
@subscribers ||= {}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Wrapper for subscription handler
|
|
107
|
+
class Handler
|
|
108
|
+
attr_reader :block
|
|
109
|
+
|
|
110
|
+
def initialize(&block)
|
|
111
|
+
@block = block
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def run(span, name, id, payload)
|
|
115
|
+
run!(span, name, id, payload)
|
|
116
|
+
rescue StandardError => e
|
|
117
|
+
Datadog.logger.debug("ActiveSupport::Notifications handler for '#{name}' failed: #{e.message}")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def run!(*args)
|
|
121
|
+
@block.call(*args)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Wrapper for subscription callbacks
|
|
126
|
+
class Callbacks
|
|
127
|
+
attr_reader :blocks
|
|
128
|
+
|
|
129
|
+
def initialize
|
|
130
|
+
@blocks = {}
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def add(key, &block)
|
|
134
|
+
blocks_for(key) << block if block_given?
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def run(event, key, *args)
|
|
138
|
+
blocks_for(key).each do |callback|
|
|
139
|
+
begin
|
|
140
|
+
callback.call(event, key, *args)
|
|
141
|
+
rescue StandardError => e
|
|
142
|
+
Datadog.logger.debug(
|
|
143
|
+
"ActiveSupport::Notifications '#{key}' callback for '#{event}' failed: #{e.message}"
|
|
144
|
+
)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
def blocks_for(key)
|
|
152
|
+
blocks[key] ||= []
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|