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,69 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module ContextFlush
|
|
3
|
+
# Consumes only completed traces (where all spans have finished)
|
|
4
|
+
class Finished
|
|
5
|
+
# Consumes and returns completed traces (where all spans have finished)
|
|
6
|
+
# from the provided +context+, if any.
|
|
7
|
+
#
|
|
8
|
+
# Any traces consumed are removed from +context+ as a side effect.
|
|
9
|
+
#
|
|
10
|
+
# @return [Array<Span>] trace to be flushed, or +nil+ if the trace is not finished
|
|
11
|
+
def consume!(context)
|
|
12
|
+
trace, sampled = context.get
|
|
13
|
+
trace if sampled
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Performs partial trace flushing to avoid large traces residing in memory for too long
|
|
18
|
+
class Partial
|
|
19
|
+
# Start flushing partial trace after this many active spans in one trace
|
|
20
|
+
DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH = 500
|
|
21
|
+
|
|
22
|
+
def initialize(options = {})
|
|
23
|
+
@min_spans_for_partial = options.fetch(:min_spans_before_partial_flush, DEFAULT_MIN_SPANS_FOR_PARTIAL_FLUSH)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Consumes and returns completed or partially completed
|
|
27
|
+
# traces from the provided +context+, if any.
|
|
28
|
+
#
|
|
29
|
+
# Partially completed traces, where not all spans have finished,
|
|
30
|
+
# will only be returned if there are at least
|
|
31
|
+
# +@min_spans_for_partial+ finished spans.
|
|
32
|
+
#
|
|
33
|
+
# Any spans consumed are removed from +context+ as a side effect.
|
|
34
|
+
#
|
|
35
|
+
# @return [Array<Span>] partial or complete trace to be flushed, or +nil+ if no spans are finished
|
|
36
|
+
def consume!(context)
|
|
37
|
+
trace, sampled = context.get
|
|
38
|
+
|
|
39
|
+
return nil unless sampled
|
|
40
|
+
return trace if trace && !trace.empty?
|
|
41
|
+
|
|
42
|
+
partial_trace(context)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def partial_trace(context)
|
|
48
|
+
return nil if context.finished_span_count < @min_spans_for_partial
|
|
49
|
+
|
|
50
|
+
finished_spans(context)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def finished_spans(context)
|
|
54
|
+
trace = context.delete_span_if(&:finished?)
|
|
55
|
+
|
|
56
|
+
# Ensure that the first span in a partial trace has
|
|
57
|
+
# sampling and origin information.
|
|
58
|
+
if trace[0]
|
|
59
|
+
context.annotate_for_flush!(trace[0])
|
|
60
|
+
else
|
|
61
|
+
Datadog.logger.debug('Tried to retrieve trace from context, but got nothing. ' \
|
|
62
|
+
"Is there another consumer for this context? #{context.trace_id}")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
trace unless trace.empty?
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
# DefaultContextProvider is a default context provider that retrieves
|
|
3
|
+
# all contexts from the current thread-local storage. It is suitable for
|
|
4
|
+
# synchronous programming.
|
|
5
|
+
class DefaultContextProvider
|
|
6
|
+
# Initializes the default context provider with a thread-bound context.
|
|
7
|
+
def initialize
|
|
8
|
+
@context = ThreadLocalContext.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Sets the current context.
|
|
12
|
+
def context=(ctx)
|
|
13
|
+
@context.local = ctx
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Return the current context.
|
|
17
|
+
def context
|
|
18
|
+
@context.local
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# ThreadLocalContext can be used as a tracer global reference to create
|
|
23
|
+
# a different \Context for each thread. In synchronous tracer, this
|
|
24
|
+
# is required to prevent multiple threads sharing the same \Context
|
|
25
|
+
# in different executions.
|
|
26
|
+
class ThreadLocalContext
|
|
27
|
+
# ThreadLocalContext can be used as a tracer global reference to create
|
|
28
|
+
# a different \Context for each thread. In synchronous tracer, this
|
|
29
|
+
# is required to prevent multiple threads sharing the same \Context
|
|
30
|
+
# in different executions.
|
|
31
|
+
#
|
|
32
|
+
# To support multiple tracers simultaneously, each \ThreadLocalContext
|
|
33
|
+
# instance has its own thread-local variable.
|
|
34
|
+
def initialize
|
|
35
|
+
@key = "datadog_context_#{object_id}".to_sym
|
|
36
|
+
|
|
37
|
+
self.local = Datadog::Context.new
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Override the thread-local context with a new context.
|
|
41
|
+
def local=(ctx)
|
|
42
|
+
Thread.current[@key] = ctx
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Return the thread-local context.
|
|
46
|
+
def local
|
|
47
|
+
Thread.current[@key] ||= Datadog::Context.new
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'ddtrace/contrib/configuration/settings'
|
|
2
|
+
require 'ddtrace/contrib/action_cable/ext'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActionCable
|
|
7
|
+
module Configuration
|
|
8
|
+
# Custom settings for the ActionCable 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 :service_name, default: Ext::SERVICE_NAME
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
2
|
+
require 'ddtrace/contrib/active_support/notifications/event'
|
|
3
|
+
require 'ddtrace/contrib/action_cable/ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Contrib
|
|
7
|
+
module ActionCable
|
|
8
|
+
# Defines basic behaviors for an event.
|
|
9
|
+
module Event
|
|
10
|
+
def self.included(base)
|
|
11
|
+
base.send(:include, ActiveSupport::Notifications::Event)
|
|
12
|
+
base.send(:extend, ClassMethods)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Class methods for events.
|
|
16
|
+
module ClassMethods
|
|
17
|
+
def span_options
|
|
18
|
+
{ service: configuration[:service_name] }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def tracer
|
|
22
|
+
-> { configuration[:tracer] }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def configuration
|
|
26
|
+
Datadog.configuration[:action_cable]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Defines behavior for the first event of a thread execution.
|
|
32
|
+
#
|
|
33
|
+
# This event is not expected to be nested with other event,
|
|
34
|
+
# but to start a fresh tracing context.
|
|
35
|
+
module RootContextEvent
|
|
36
|
+
def self.included(base)
|
|
37
|
+
base.send(:include, ActiveSupport::Notifications::Event)
|
|
38
|
+
base.send(:extend, ClassMethods)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Class methods for events.
|
|
42
|
+
module ClassMethods
|
|
43
|
+
include Contrib::ActionCable::Event::ClassMethods
|
|
44
|
+
|
|
45
|
+
def subscription(*args)
|
|
46
|
+
super.tap do |subscription|
|
|
47
|
+
subscription.before_trace { ensure_clean_context! }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
# Context objects are thread-bound.
|
|
54
|
+
# If an integration re-uses threads, context from a previous trace
|
|
55
|
+
# could leak into the new trace. This "cleans" current context,
|
|
56
|
+
# preventing such a leak.
|
|
57
|
+
def ensure_clean_context!
|
|
58
|
+
return unless configuration[:tracer].call_context.current_span
|
|
59
|
+
configuration[:tracer].provider.context = Context.new
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'ddtrace/contrib/action_cable/event'
|
|
2
|
+
require 'ddtrace/contrib/action_cable/events/broadcast'
|
|
3
|
+
require 'ddtrace/contrib/action_cable/events/perform_action'
|
|
4
|
+
require 'ddtrace/contrib/action_cable/events/transmit'
|
|
5
|
+
|
|
6
|
+
module Datadog
|
|
7
|
+
module Contrib
|
|
8
|
+
module ActionCable
|
|
9
|
+
# Defines collection of instrumented ActionCable events
|
|
10
|
+
module Events
|
|
11
|
+
ALL = [
|
|
12
|
+
Events::Broadcast,
|
|
13
|
+
Events::PerformAction,
|
|
14
|
+
Events::Transmit
|
|
15
|
+
].freeze
|
|
16
|
+
|
|
17
|
+
module_function
|
|
18
|
+
|
|
19
|
+
def all
|
|
20
|
+
self::ALL
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def subscriptions
|
|
24
|
+
all.collect(&:subscriptions).collect(&:to_a).flatten
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def subscribe!
|
|
28
|
+
all.each(&:subscribe!)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
2
|
+
require 'ddtrace/contrib/action_cable/event'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActionCable
|
|
7
|
+
module Events
|
|
8
|
+
# Defines instrumentation for 'broadcast.action_cable' event.
|
|
9
|
+
#
|
|
10
|
+
# A single 'broadcast' event will trigger as many 'transmit' events
|
|
11
|
+
# as there are clients subscribed to a channel.
|
|
12
|
+
module Broadcast
|
|
13
|
+
include ActionCable::Event
|
|
14
|
+
|
|
15
|
+
EVENT_NAME = 'broadcast.action_cable'.freeze
|
|
16
|
+
|
|
17
|
+
module_function
|
|
18
|
+
|
|
19
|
+
def event_name
|
|
20
|
+
self::EVENT_NAME
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def span_name
|
|
24
|
+
Ext::SPAN_BROADCAST
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def span_type
|
|
28
|
+
# Starts a broadcast of messages over WebSockets
|
|
29
|
+
Datadog::Ext::AppTypes::WEB
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def process(span, _event, _id, payload)
|
|
33
|
+
channel = payload[:broadcasting] # Channel has high cardinality
|
|
34
|
+
span.service = configuration[:service_name]
|
|
35
|
+
span.span_type = span_type
|
|
36
|
+
|
|
37
|
+
# Set analytics sample rate
|
|
38
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
39
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
span.set_tag(Ext::TAG_CHANNEL, channel)
|
|
43
|
+
span.set_tag(Ext::TAG_BROADCAST_CODER, payload[:coder])
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
2
|
+
require 'ddtrace/contrib/action_cable/event'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActionCable
|
|
7
|
+
module Events
|
|
8
|
+
# Defines instrumentation for 'perform_action.action_cable' event.
|
|
9
|
+
#
|
|
10
|
+
# An action, triggered by a WebSockets client, invokes a method
|
|
11
|
+
# in the server's channel instance.
|
|
12
|
+
module PerformAction
|
|
13
|
+
include ActionCable::RootContextEvent
|
|
14
|
+
|
|
15
|
+
EVENT_NAME = 'perform_action.action_cable'.freeze
|
|
16
|
+
|
|
17
|
+
module_function
|
|
18
|
+
|
|
19
|
+
def event_name
|
|
20
|
+
self::EVENT_NAME
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def span_name
|
|
24
|
+
Ext::SPAN_ACTION
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def span_type
|
|
28
|
+
# A request to perform_action comes from a WebSocket connection
|
|
29
|
+
Datadog::Ext::AppTypes::WEB
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def process(span, _event, _id, payload)
|
|
33
|
+
channel_class = payload[:channel_class]
|
|
34
|
+
action = payload[:action]
|
|
35
|
+
|
|
36
|
+
span.service = configuration[:service_name]
|
|
37
|
+
span.resource = "#{channel_class}##{action}"
|
|
38
|
+
span.span_type = span_type
|
|
39
|
+
|
|
40
|
+
# Set analytics sample rate
|
|
41
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
42
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Measure service stats
|
|
46
|
+
Contrib::Analytics.set_measured(span)
|
|
47
|
+
|
|
48
|
+
span.set_tag(Ext::TAG_CHANNEL_CLASS, channel_class)
|
|
49
|
+
span.set_tag(Ext::TAG_ACTION, action)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'ddtrace/contrib/analytics'
|
|
2
|
+
require 'ddtrace/contrib/action_cable/event'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Contrib
|
|
6
|
+
module ActionCable
|
|
7
|
+
module Events
|
|
8
|
+
# Defines instrumentation for 'transmit.action_cable' event.
|
|
9
|
+
#
|
|
10
|
+
# A 'transmit' event sends a message to a single client subscribed to a channel.
|
|
11
|
+
module Transmit
|
|
12
|
+
include ActionCable::Event
|
|
13
|
+
|
|
14
|
+
EVENT_NAME = 'transmit.action_cable'.freeze
|
|
15
|
+
|
|
16
|
+
module_function
|
|
17
|
+
|
|
18
|
+
def event_name
|
|
19
|
+
self::EVENT_NAME
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def span_name
|
|
23
|
+
Ext::SPAN_TRANSMIT
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def span_type
|
|
27
|
+
# ActionCable transmits data over WebSockets
|
|
28
|
+
Datadog::Ext::AppTypes::WEB
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def process(span, _event, _id, payload)
|
|
32
|
+
channel_class = payload[:channel_class]
|
|
33
|
+
|
|
34
|
+
span.service = configuration[:service_name]
|
|
35
|
+
span.resource = channel_class
|
|
36
|
+
span.span_type = span_type
|
|
37
|
+
|
|
38
|
+
# Set analytics sample rate
|
|
39
|
+
if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
|
|
40
|
+
Contrib::Analytics.set_sample_rate(span, configuration[:analytics_sample_rate])
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
span.set_tag(Ext::TAG_CHANNEL_CLASS, channel_class)
|
|
44
|
+
span.set_tag(Ext::TAG_TRANSMIT_VIA, payload[:via])
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module ActionCable
|
|
4
|
+
# ActionCable integration constants
|
|
5
|
+
module Ext
|
|
6
|
+
APP = 'action_cable'.freeze
|
|
7
|
+
ENV_ANALYTICS_ENABLED = 'DD_ACTION_CABLE_ANALYTICS_ENABLED'.freeze
|
|
8
|
+
ENV_ANALYTICS_SAMPLE_RATE = 'DD_ACTION_CABLE_ANALYTICS_SAMPLE_RATE'.freeze
|
|
9
|
+
SERVICE_NAME = 'action_cable'.freeze
|
|
10
|
+
SPAN_ACTION = 'action_cable.action'.freeze
|
|
11
|
+
SPAN_BROADCAST = 'action_cable.broadcast'.freeze
|
|
12
|
+
SPAN_ON_OPEN = 'action_cable.on_open'.freeze
|
|
13
|
+
SPAN_TRANSMIT = 'action_cable.transmit'.freeze
|
|
14
|
+
TAG_ACTION = 'action_cable.action'.freeze
|
|
15
|
+
TAG_BROADCAST_CODER = 'action_cable.broadcast.coder'.freeze
|
|
16
|
+
TAG_CHANNEL = 'action_cable.channel'.freeze
|
|
17
|
+
TAG_CHANNEL_CLASS = 'action_cable.channel_class'.freeze
|
|
18
|
+
TAG_CONNECTION = 'action_cable.connection'.freeze
|
|
19
|
+
TAG_TRANSMIT_VIA = 'action_cable.transmit.via'.freeze
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Contrib
|
|
3
|
+
module ActionCable
|
|
4
|
+
module Instrumentation
|
|
5
|
+
# When a new WebSocket is open, we receive a Rack request resource name "GET -1".
|
|
6
|
+
# This module overrides the current Rack resource name to provide a meaningful name.
|
|
7
|
+
module ActionCableConnection
|
|
8
|
+
def on_open
|
|
9
|
+
Datadog.tracer.trace(Ext::SPAN_ON_OPEN) do |span|
|
|
10
|
+
begin
|
|
11
|
+
span.resource = "#{self.class}#on_open"
|
|
12
|
+
span.span_type = Datadog::Ext::AppTypes::WEB
|
|
13
|
+
|
|
14
|
+
span.set_tag(Ext::TAG_ACTION, 'on_open')
|
|
15
|
+
span.set_tag(Ext::TAG_CONNECTION, self.class.to_s)
|
|
16
|
+
|
|
17
|
+
# Set the resource name of the Rack request span
|
|
18
|
+
rack_request_span = env[Datadog::Contrib::Rack::TraceMiddleware::RACK_REQUEST_SPAN]
|
|
19
|
+
rack_request_span.resource = span.resource if rack_request_span
|
|
20
|
+
rescue StandardError => e
|
|
21
|
+
Datadog.logger.error("Error preparing span for ActionCable::Connection: #{e}")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
super
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|