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
data/lib/ddtrace.rb
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'thread'
|
|
2
|
+
|
|
3
|
+
# During development, we load `ddtrace` by through `ddtrace.gemspec`,
|
|
4
|
+
# which in turn eager loads 'ddtrace/version'.
|
|
5
|
+
#
|
|
6
|
+
# Users load this gem by requiring this file.
|
|
7
|
+
# We need to ensure that any files loaded in our gemspec are also loaded here.
|
|
8
|
+
require 'ddtrace/version'
|
|
9
|
+
|
|
10
|
+
require 'ddtrace/pin'
|
|
11
|
+
require 'ddtrace/tracer'
|
|
12
|
+
require 'ddtrace/error'
|
|
13
|
+
require 'ddtrace/quantization/hash'
|
|
14
|
+
require 'ddtrace/quantization/http'
|
|
15
|
+
require 'ddtrace/pipeline'
|
|
16
|
+
require 'ddtrace/configuration'
|
|
17
|
+
require 'ddtrace/patcher'
|
|
18
|
+
require 'ddtrace/augmentation'
|
|
19
|
+
require 'ddtrace/metrics'
|
|
20
|
+
|
|
21
|
+
# \Datadog global namespace that includes all tracing functionality for Tracer and Span classes.
|
|
22
|
+
module Datadog
|
|
23
|
+
extend Augmentation
|
|
24
|
+
extend Configuration
|
|
25
|
+
|
|
26
|
+
# Load and extend Contrib by default
|
|
27
|
+
require 'ddtrace/contrib/extensions'
|
|
28
|
+
extend Contrib::Extensions
|
|
29
|
+
|
|
30
|
+
# Load and extend OpenTelemetry compatibility by default
|
|
31
|
+
require 'ddtrace/opentelemetry/extensions'
|
|
32
|
+
extend OpenTelemetry::Extensions
|
|
33
|
+
|
|
34
|
+
# Add shutdown hook:
|
|
35
|
+
# Ensures the tracer has an opportunity to flush traces
|
|
36
|
+
# and cleanup before terminating the process.
|
|
37
|
+
at_exit { Datadog.shutdown! }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
require 'ddtrace/contrib/action_cable/integration'
|
|
41
|
+
require 'ddtrace/contrib/action_pack/integration'
|
|
42
|
+
require 'ddtrace/contrib/action_view/integration'
|
|
43
|
+
require 'ddtrace/contrib/active_model_serializers/integration'
|
|
44
|
+
require 'ddtrace/contrib/active_record/integration'
|
|
45
|
+
require 'ddtrace/contrib/active_support/integration'
|
|
46
|
+
require 'ddtrace/contrib/aws/integration'
|
|
47
|
+
require 'ddtrace/contrib/concurrent_ruby/integration'
|
|
48
|
+
require 'ddtrace/contrib/dalli/integration'
|
|
49
|
+
require 'ddtrace/contrib/delayed_job/integration'
|
|
50
|
+
require 'ddtrace/contrib/elasticsearch/integration'
|
|
51
|
+
require 'ddtrace/contrib/ethon/integration'
|
|
52
|
+
require 'ddtrace/contrib/excon/integration'
|
|
53
|
+
require 'ddtrace/contrib/faraday/integration'
|
|
54
|
+
require 'ddtrace/contrib/grape/integration'
|
|
55
|
+
require 'ddtrace/contrib/graphql/integration'
|
|
56
|
+
require 'ddtrace/contrib/grpc/integration'
|
|
57
|
+
require 'ddtrace/contrib/http/integration'
|
|
58
|
+
require 'ddtrace/contrib/httprb/integration'
|
|
59
|
+
require 'ddtrace/contrib/integration'
|
|
60
|
+
require 'ddtrace/contrib/kafka/integration'
|
|
61
|
+
require 'ddtrace/contrib/presto/integration'
|
|
62
|
+
require 'ddtrace/contrib/mysql2/integration'
|
|
63
|
+
require 'ddtrace/contrib/mongodb/integration'
|
|
64
|
+
require 'ddtrace/contrib/racecar/integration'
|
|
65
|
+
require 'ddtrace/contrib/rack/integration'
|
|
66
|
+
require 'ddtrace/contrib/rails/integration'
|
|
67
|
+
require 'ddtrace/contrib/rake/integration'
|
|
68
|
+
require 'ddtrace/contrib/redis/integration'
|
|
69
|
+
require 'ddtrace/contrib/resque/integration'
|
|
70
|
+
require 'ddtrace/contrib/rest_client/integration'
|
|
71
|
+
require 'ddtrace/contrib/sequel/integration'
|
|
72
|
+
require 'ddtrace/contrib/shoryuken/integration'
|
|
73
|
+
require 'ddtrace/contrib/sidekiq/integration'
|
|
74
|
+
require 'ddtrace/contrib/sinatra/integration'
|
|
75
|
+
require 'ddtrace/contrib/sucker_punch/integration'
|
|
76
|
+
require 'ddtrace/monkey'
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'ddtrace/ext/analytics'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
# Defines analytics behavior
|
|
5
|
+
module Analytics
|
|
6
|
+
class << self
|
|
7
|
+
def set_sample_rate(span, sample_rate)
|
|
8
|
+
return if span.nil? || !sample_rate.is_a?(Numeric)
|
|
9
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_SAMPLE_RATE, sample_rate)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def set_measured(span, value = true)
|
|
13
|
+
return if span.nil?
|
|
14
|
+
# rubocop:disable Style/MultipleComparison
|
|
15
|
+
value = value == true || value == 1 ? 1 : 0
|
|
16
|
+
span.set_metric(Datadog::Ext::Analytics::TAG_MEASURED, value)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Extension for Datadog::Span
|
|
21
|
+
module Span
|
|
22
|
+
def set_tag(key, value)
|
|
23
|
+
case key
|
|
24
|
+
when Ext::Analytics::TAG_ENABLED
|
|
25
|
+
# If true, set rate to 1.0, otherwise set 0.0.
|
|
26
|
+
value = value == true ? Ext::Analytics::DEFAULT_SAMPLE_RATE : 0.0
|
|
27
|
+
Analytics.set_sample_rate(self, value)
|
|
28
|
+
when Ext::Analytics::TAG_SAMPLE_RATE
|
|
29
|
+
Analytics.set_sample_rate(self, value)
|
|
30
|
+
else
|
|
31
|
+
super if defined?(super)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'ddtrace/augmentation/method_wrapper'
|
|
2
|
+
require 'ddtrace/augmentation/method_wrapping'
|
|
3
|
+
require 'ddtrace/augmentation/shim'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
# Namespace for components that help modify
|
|
7
|
+
# existing code for instrumentation purposes.
|
|
8
|
+
module Augmentation
|
|
9
|
+
def shim(object, &block)
|
|
10
|
+
Shim.new(object, &block)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
# Represents an wrapped method, with a reference to the original block
|
|
3
|
+
# and the block that wraps around it.
|
|
4
|
+
class MethodWrapper
|
|
5
|
+
attr_reader \
|
|
6
|
+
:original,
|
|
7
|
+
:wrapper
|
|
8
|
+
|
|
9
|
+
DEFAULT_WRAPPER = proc { |original, *args, &block| original.call(*args, &block) }
|
|
10
|
+
|
|
11
|
+
def initialize(original, &block)
|
|
12
|
+
@original = original
|
|
13
|
+
@wrapper = block_given? ? block : DEFAULT_WRAPPER
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def call(*args, &block)
|
|
17
|
+
wrapper.call(original, *args, &block)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
require 'ddtrace/patcher'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Shorthands for wrapping methods
|
|
6
|
+
module MethodWrapping
|
|
7
|
+
include Datadog::Patcher
|
|
8
|
+
|
|
9
|
+
def wrapped_methods
|
|
10
|
+
@wrapped_methods ||= Set.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Adds method block directly to the object.
|
|
14
|
+
# Block is evaluated in the context of the object.
|
|
15
|
+
# Faster than #wrap_method!
|
|
16
|
+
def override_method!(method_name, &block)
|
|
17
|
+
return unless block_given?
|
|
18
|
+
|
|
19
|
+
without_warnings do
|
|
20
|
+
define_singleton_method(method_name, &block).tap do
|
|
21
|
+
wrapped_methods.add(method_name)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Adds method wrapper to the object.
|
|
27
|
+
# Block is evaluated in the original context of the block.
|
|
28
|
+
# Slower than #override_method!
|
|
29
|
+
def wrap_method!(original_method, &block)
|
|
30
|
+
return unless block_given?
|
|
31
|
+
original_method = original_method.is_a?(Symbol) ? method(original_method) : original_method
|
|
32
|
+
|
|
33
|
+
override_method!(original_method.name) do |*original_args, &original_block|
|
|
34
|
+
block.call(original_method, *original_args, &original_block)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require 'set'
|
|
2
|
+
require 'ddtrace/patcher'
|
|
3
|
+
require 'ddtrace/augmentation/method_wrapping'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
# A "stand-in" that intercepts calls to another object. i.e. man-in-the-middle.
|
|
7
|
+
# This shim forwards all methods to object, except those overriden.
|
|
8
|
+
# Useful if you want to intercept inbound behavior to an object without modifying
|
|
9
|
+
# the object in question, especially useful if the overridding behavior shouldn't be global.
|
|
10
|
+
class Shim
|
|
11
|
+
extend Forwardable
|
|
12
|
+
include Datadog::Patcher
|
|
13
|
+
include Datadog::MethodWrapping
|
|
14
|
+
|
|
15
|
+
METHODS = Set[
|
|
16
|
+
:override_method!,
|
|
17
|
+
:shim,
|
|
18
|
+
:shim?,
|
|
19
|
+
:shim_target,
|
|
20
|
+
:wrap_method!,
|
|
21
|
+
:wrapped_methods
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
EXCLUDED_METHODS = Set[
|
|
25
|
+
# For all objects
|
|
26
|
+
:__binding__,
|
|
27
|
+
:__id__,
|
|
28
|
+
:__send__,
|
|
29
|
+
:extend,
|
|
30
|
+
:itself,
|
|
31
|
+
:object_id,
|
|
32
|
+
:respond_to?,
|
|
33
|
+
:tap
|
|
34
|
+
].freeze
|
|
35
|
+
|
|
36
|
+
attr_reader :shim_target, :shim
|
|
37
|
+
|
|
38
|
+
def self.shim?(object)
|
|
39
|
+
# Check whether it responds to #shim? because otherwise the
|
|
40
|
+
# Shim forwards all method calls, including type checks to
|
|
41
|
+
# the wrapped object, to mimimize its intrusion.
|
|
42
|
+
object.respond_to?(:shim?)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Pass this a block to override methods
|
|
46
|
+
def initialize(shim_target)
|
|
47
|
+
@shim = self
|
|
48
|
+
@shim_target = shim_target
|
|
49
|
+
|
|
50
|
+
# Save a reference to the original :define_singleton_method
|
|
51
|
+
# so methods can be defined on the shim after forwarding is applied.
|
|
52
|
+
@definition_method = method(:define_singleton_method)
|
|
53
|
+
|
|
54
|
+
# Wrap any methods
|
|
55
|
+
yield(self) if block_given?
|
|
56
|
+
|
|
57
|
+
# Forward methods
|
|
58
|
+
forwarded_methods = (
|
|
59
|
+
shim_target.public_methods.to_set \
|
|
60
|
+
- METHODS \
|
|
61
|
+
- EXCLUDED_METHODS \
|
|
62
|
+
- wrapped_methods
|
|
63
|
+
)
|
|
64
|
+
forward_methods!(*forwarded_methods)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def override_method!(method_name, &block)
|
|
68
|
+
return unless block_given?
|
|
69
|
+
|
|
70
|
+
without_warnings do
|
|
71
|
+
@definition_method.call(method_name, &block).tap do
|
|
72
|
+
wrapped_methods.add(method_name)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def wrap_method!(method_name, &block)
|
|
78
|
+
super(shim_target.method(method_name), &block)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def shim?
|
|
82
|
+
true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def respond_to?(method_name)
|
|
86
|
+
return true if METHODS.include?(method_name)
|
|
87
|
+
shim_target.respond_to?(method_name)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
def forward_methods!(*forwarded_methods)
|
|
93
|
+
return if forwarded_methods.empty?
|
|
94
|
+
|
|
95
|
+
singleton_class.send(
|
|
96
|
+
:def_delegators,
|
|
97
|
+
:@shim_target,
|
|
98
|
+
*forwarded_methods
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require 'thread'
|
|
2
|
+
require 'ddtrace/diagnostics/health'
|
|
3
|
+
require 'ddtrace/runtime/object_space'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
# Trace buffer that stores application traces. The buffer has a maximum size and when
|
|
7
|
+
# the buffer is full, a random trace is discarded. This class is thread-safe and is used
|
|
8
|
+
# automatically by the ``Tracer`` instance when a ``Span`` is finished.
|
|
9
|
+
class TraceBuffer
|
|
10
|
+
def initialize(max_size)
|
|
11
|
+
@max_size = max_size
|
|
12
|
+
|
|
13
|
+
@mutex = Mutex.new()
|
|
14
|
+
@traces = []
|
|
15
|
+
@closed = false
|
|
16
|
+
|
|
17
|
+
# Initialize metric values
|
|
18
|
+
@buffer_accepted = 0
|
|
19
|
+
@buffer_accepted_lengths = 0
|
|
20
|
+
@buffer_dropped = 0
|
|
21
|
+
@buffer_spans = 0
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Add a new ``trace`` in the local queue. This method doesn't block the execution
|
|
25
|
+
# even if the buffer is full. In that case, a random trace is discarded.
|
|
26
|
+
def push(trace)
|
|
27
|
+
@mutex.synchronize do
|
|
28
|
+
return if @closed
|
|
29
|
+
len = @traces.length
|
|
30
|
+
if len < @max_size || @max_size <= 0
|
|
31
|
+
@traces << trace
|
|
32
|
+
else
|
|
33
|
+
# we should replace a random trace with the new one
|
|
34
|
+
replace_index = rand(len)
|
|
35
|
+
replaced_trace = @traces[replace_index]
|
|
36
|
+
@traces[replace_index] = trace
|
|
37
|
+
measure_drop(replaced_trace)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
measure_accept(trace)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Return the current number of stored traces.
|
|
45
|
+
def length
|
|
46
|
+
@mutex.synchronize do
|
|
47
|
+
return @traces.length
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Return if the buffer is empty.
|
|
52
|
+
def empty?
|
|
53
|
+
@mutex.synchronize do
|
|
54
|
+
return @traces.empty?
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Stored traces are returned and the local buffer is reset.
|
|
59
|
+
def pop
|
|
60
|
+
@mutex.synchronize do
|
|
61
|
+
traces = @traces
|
|
62
|
+
@traces = []
|
|
63
|
+
|
|
64
|
+
measure_pop(traces)
|
|
65
|
+
|
|
66
|
+
return traces
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def close
|
|
71
|
+
@mutex.synchronize do
|
|
72
|
+
@closed = true
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Aggregate metrics:
|
|
77
|
+
# They reflect buffer activity since last #pop.
|
|
78
|
+
# These may not be as accurate or as granular, but they
|
|
79
|
+
# don't use as much network traffic as live stats.
|
|
80
|
+
|
|
81
|
+
def measure_accept(trace)
|
|
82
|
+
@buffer_spans += trace.length
|
|
83
|
+
@buffer_accepted += 1
|
|
84
|
+
@buffer_accepted_lengths += trace.length
|
|
85
|
+
rescue StandardError => e
|
|
86
|
+
Datadog.logger.debug("Failed to measure queue accept. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def measure_drop(trace)
|
|
90
|
+
@buffer_dropped += 1
|
|
91
|
+
@buffer_spans -= trace.length
|
|
92
|
+
@buffer_accepted_lengths -= trace.length
|
|
93
|
+
rescue StandardError => e
|
|
94
|
+
Datadog.logger.debug("Failed to measure queue drop. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def measure_pop(traces)
|
|
98
|
+
# Accepted
|
|
99
|
+
Datadog.health_metrics.queue_accepted(@buffer_accepted)
|
|
100
|
+
Datadog.health_metrics.queue_accepted_lengths(@buffer_accepted_lengths)
|
|
101
|
+
|
|
102
|
+
# Dropped
|
|
103
|
+
Datadog.health_metrics.queue_dropped(@buffer_dropped)
|
|
104
|
+
|
|
105
|
+
# Queue gauges
|
|
106
|
+
Datadog.health_metrics.queue_max_length(@max_size)
|
|
107
|
+
Datadog.health_metrics.queue_spans(@buffer_spans)
|
|
108
|
+
Datadog.health_metrics.queue_length(traces.length)
|
|
109
|
+
|
|
110
|
+
# Reset aggregated metrics
|
|
111
|
+
@buffer_accepted = 0
|
|
112
|
+
@buffer_accepted_lengths = 0
|
|
113
|
+
@buffer_dropped = 0
|
|
114
|
+
@buffer_spans = 0
|
|
115
|
+
rescue StandardError => e
|
|
116
|
+
Datadog.logger.debug("Failed to measure queue. Cause: #{e.message} Source: #{e.backtrace.first}")
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'msgpack'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Chunks list of elements into batches
|
|
6
|
+
module Chunker
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
# Chunks a list into batches of at most +max_chunk_size+ elements each.
|
|
10
|
+
#
|
|
11
|
+
# An exception can occur if a single element is too large. That single
|
|
12
|
+
# element will be returned in its own chunk. You have to verify by yourself
|
|
13
|
+
# when such elements are returned.
|
|
14
|
+
#
|
|
15
|
+
# @param list [Enumerable] list of elements
|
|
16
|
+
# @param max_chunk_size [Numeric] maximum acceptable chunk size
|
|
17
|
+
# @return [Enumerable] lazy list of chunks
|
|
18
|
+
def chunk_by_size(list, max_chunk_size)
|
|
19
|
+
chunk_agg = 0
|
|
20
|
+
list.slice_before do |elem|
|
|
21
|
+
size = elem.size
|
|
22
|
+
chunk_agg += size
|
|
23
|
+
if chunk_agg > max_chunk_size
|
|
24
|
+
# Can't fit element in current chunk, start a new one.
|
|
25
|
+
chunk_agg = size
|
|
26
|
+
true
|
|
27
|
+
else
|
|
28
|
+
# Add to current chunk
|
|
29
|
+
false
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|