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,33 @@
|
|
|
1
|
+
require 'ddtrace/ext/diagnostics'
|
|
2
|
+
require 'ddtrace/metrics'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module Diagnostics
|
|
6
|
+
# Health-related diagnostics
|
|
7
|
+
module Health
|
|
8
|
+
# Health metrics for diagnostics
|
|
9
|
+
class Metrics < ::Datadog::Metrics
|
|
10
|
+
count :api_errors, Ext::Diagnostics::Health::Metrics::METRIC_API_ERRORS
|
|
11
|
+
count :api_requests, Ext::Diagnostics::Health::Metrics::METRIC_API_REQUESTS
|
|
12
|
+
count :api_responses, Ext::Diagnostics::Health::Metrics::METRIC_API_RESPONSES
|
|
13
|
+
count :error_context_overflow, Ext::Diagnostics::Health::Metrics::METRIC_ERROR_CONTEXT_OVERFLOW
|
|
14
|
+
count :error_instrumentation_patch, Ext::Diagnostics::Health::Metrics::METRIC_ERROR_INSTRUMENTATION_PATCH
|
|
15
|
+
count :error_span_finish, Ext::Diagnostics::Health::Metrics::METRIC_ERROR_SPAN_FINISH
|
|
16
|
+
count :error_unfinished_spans, Ext::Diagnostics::Health::Metrics::METRIC_ERROR_UNFINISHED_SPANS
|
|
17
|
+
count :instrumentation_patched, Ext::Diagnostics::Health::Metrics::METRIC_INSTRUMENTATION_PATCHED
|
|
18
|
+
count :queue_accepted, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_ACCEPTED
|
|
19
|
+
count :queue_accepted_lengths, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_ACCEPTED_LENGTHS
|
|
20
|
+
count :queue_dropped, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_DROPPED
|
|
21
|
+
count :traces_filtered, Ext::Diagnostics::Health::Metrics::METRIC_TRACES_FILTERED
|
|
22
|
+
count :transport_trace_too_large, Ext::Diagnostics::Health::Metrics::METRIC_TRANSPORT_TRACE_TOO_LARGE
|
|
23
|
+
count :transport_chunked, Ext::Diagnostics::Health::Metrics::METRIC_TRANSPORT_CHUNKED
|
|
24
|
+
count :writer_cpu_time, Ext::Diagnostics::Health::Metrics::METRIC_WRITER_CPU_TIME
|
|
25
|
+
|
|
26
|
+
gauge :queue_length, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_LENGTH
|
|
27
|
+
gauge :queue_max_length, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_MAX_LENGTH
|
|
28
|
+
gauge :queue_spans, Ext::Diagnostics::Health::Metrics::METRIC_QUEUE_SPANS
|
|
29
|
+
gauge :sampling_service_cache_length, Ext::Diagnostics::Health::Metrics::METRIC_SAMPLING_SERVICE_CACHE_LENGTH
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'ddtrace/ext/distributed'
|
|
2
|
+
require 'ddtrace/distributed_tracing/headers/headers'
|
|
3
|
+
require 'ddtrace/distributed_tracing/headers/helpers'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module DistributedTracing
|
|
7
|
+
module Headers
|
|
8
|
+
# B3 provides helpers to inject or extract headers for B3 style headers
|
|
9
|
+
module B3
|
|
10
|
+
include Ext::DistributedTracing
|
|
11
|
+
|
|
12
|
+
def self.inject!(context, env)
|
|
13
|
+
return if context.nil?
|
|
14
|
+
|
|
15
|
+
# DEV: We need these to be hex encoded
|
|
16
|
+
env[B3_HEADER_TRACE_ID] = context.trace_id.to_s(16)
|
|
17
|
+
env[B3_HEADER_SPAN_ID] = context.span_id.to_s(16)
|
|
18
|
+
|
|
19
|
+
unless context.sampling_priority.nil?
|
|
20
|
+
sampling_priority = DistributedTracing::Headers::Helpers.clamp_sampling_priority(context.sampling_priority)
|
|
21
|
+
env[B3_HEADER_SAMPLED] = sampling_priority.to_s
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.extract(env)
|
|
26
|
+
# Extract values from headers
|
|
27
|
+
# DEV: B3 doesn't have "origin"
|
|
28
|
+
headers = Headers.new(env)
|
|
29
|
+
trace_id = headers.id(B3_HEADER_TRACE_ID, 16)
|
|
30
|
+
span_id = headers.id(B3_HEADER_SPAN_ID, 16)
|
|
31
|
+
# We don't need to try and convert sampled since B3 supports 0/1 (AUTO_REJECT/AUTO_KEEP)
|
|
32
|
+
sampling_priority = headers.number(B3_HEADER_SAMPLED)
|
|
33
|
+
|
|
34
|
+
# Return early if this propagation is not valid
|
|
35
|
+
return unless trace_id && span_id
|
|
36
|
+
|
|
37
|
+
::Datadog::Context.new(trace_id: trace_id,
|
|
38
|
+
span_id: span_id,
|
|
39
|
+
sampling_priority: sampling_priority)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'ddtrace/ext/distributed'
|
|
2
|
+
require 'ddtrace/distributed_tracing/headers/headers'
|
|
3
|
+
require 'ddtrace/distributed_tracing/headers/helpers'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module DistributedTracing
|
|
7
|
+
module Headers
|
|
8
|
+
# B3Single provides helpers to inject or extract headers for B3 single header style headers
|
|
9
|
+
module B3Single
|
|
10
|
+
include Ext::DistributedTracing
|
|
11
|
+
|
|
12
|
+
def self.inject!(context, env)
|
|
13
|
+
return if context.nil?
|
|
14
|
+
|
|
15
|
+
# Header format:
|
|
16
|
+
# b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
|
|
17
|
+
# https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
|
|
18
|
+
# DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
|
|
19
|
+
|
|
20
|
+
# DEV: We need these to be hex encoded
|
|
21
|
+
header = "#{context.trace_id.to_s(16)}-#{context.span_id.to_s(16)}"
|
|
22
|
+
|
|
23
|
+
unless context.sampling_priority.nil?
|
|
24
|
+
sampling_priority = DistributedTracing::Headers::Helpers.clamp_sampling_priority(context.sampling_priority)
|
|
25
|
+
header += "-#{sampling_priority}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
env[B3_HEADER_SINGLE] = header
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.extract(env)
|
|
32
|
+
# Header format:
|
|
33
|
+
# b3: {TraceId}-{SpanId}-{SamplingState}-{ParentSpanId}
|
|
34
|
+
# https://github.com/apache/incubator-zipkin-b3-propagation/tree/7c6e9f14d6627832bd80baa87ac7dabee7be23cf#single-header
|
|
35
|
+
# DEV: `{SamplingState}` and `{ParentSpanId`}` are optional
|
|
36
|
+
|
|
37
|
+
headers = Headers.new(env)
|
|
38
|
+
value = headers.header(B3_HEADER_SINGLE)
|
|
39
|
+
return if value.nil?
|
|
40
|
+
|
|
41
|
+
parts = value.split('-')
|
|
42
|
+
trace_id = headers.value_to_id(parts[0], 16) unless parts.empty?
|
|
43
|
+
span_id = headers.value_to_id(parts[1], 16) if parts.length > 1
|
|
44
|
+
sampling_priority = headers.value_to_number(parts[2]) if parts.length > 2
|
|
45
|
+
|
|
46
|
+
# Return early if this propagation is not valid
|
|
47
|
+
return unless trace_id && span_id
|
|
48
|
+
|
|
49
|
+
::Datadog::Context.new(trace_id: trace_id,
|
|
50
|
+
span_id: span_id,
|
|
51
|
+
sampling_priority: sampling_priority)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'ddtrace/ext/distributed'
|
|
2
|
+
require 'ddtrace/distributed_tracing/headers/headers'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module DistributedTracing
|
|
6
|
+
module Headers
|
|
7
|
+
# Datadog provides helpers to inject or extract headers for Datadog style headers
|
|
8
|
+
module Datadog
|
|
9
|
+
include Ext::DistributedTracing
|
|
10
|
+
|
|
11
|
+
def self.inject!(context, env)
|
|
12
|
+
return if context.nil?
|
|
13
|
+
|
|
14
|
+
env[HTTP_HEADER_TRACE_ID] = context.trace_id.to_s
|
|
15
|
+
env[HTTP_HEADER_PARENT_ID] = context.span_id.to_s
|
|
16
|
+
env[HTTP_HEADER_SAMPLING_PRIORITY] = context.sampling_priority.to_s unless context.sampling_priority.nil?
|
|
17
|
+
env[HTTP_HEADER_ORIGIN] = context.origin.to_s unless context.origin.nil?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.extract(env)
|
|
21
|
+
# Extract values from headers
|
|
22
|
+
headers = Headers.new(env)
|
|
23
|
+
trace_id = headers.id(HTTP_HEADER_TRACE_ID)
|
|
24
|
+
parent_id = headers.id(HTTP_HEADER_PARENT_ID)
|
|
25
|
+
origin = headers.header(HTTP_HEADER_ORIGIN)
|
|
26
|
+
sampling_priority = headers.number(HTTP_HEADER_SAMPLING_PRIORITY)
|
|
27
|
+
|
|
28
|
+
# Return early if this propagation is not valid
|
|
29
|
+
# DEV: To be valid we need to have a trace id and a parent id or when it is a synthetics trace, just the trace id
|
|
30
|
+
# DEV: `DistributedHeaders#id` will not return 0
|
|
31
|
+
return unless (trace_id && parent_id) || (origin && trace_id)
|
|
32
|
+
|
|
33
|
+
# Return new context
|
|
34
|
+
::Datadog::Context.new(trace_id: trace_id,
|
|
35
|
+
span_id: parent_id,
|
|
36
|
+
origin: origin,
|
|
37
|
+
sampling_priority: sampling_priority)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'ddtrace/configuration'
|
|
2
|
+
require 'ddtrace/span'
|
|
3
|
+
require 'ddtrace/ext/distributed'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module DistributedTracing
|
|
7
|
+
module Headers
|
|
8
|
+
# Headers provides easy access and validation methods for Rack headers
|
|
9
|
+
class Headers
|
|
10
|
+
include Ext::DistributedTracing
|
|
11
|
+
|
|
12
|
+
def initialize(env)
|
|
13
|
+
@env = env
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# TODO: Don't assume Rack format.
|
|
17
|
+
# Make distributed tracing headers apathetic.
|
|
18
|
+
def header(name)
|
|
19
|
+
rack_header = "http-#{name}".upcase!.tr('-', '_')
|
|
20
|
+
|
|
21
|
+
hdr = @env[rack_header]
|
|
22
|
+
|
|
23
|
+
# Only return the value if it is not an empty string
|
|
24
|
+
hdr if hdr != ''
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def id(hdr, base = 10)
|
|
28
|
+
value_to_id(header(hdr), base)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def value_to_id(value, base = 10)
|
|
32
|
+
id = value_to_number(value, base)
|
|
33
|
+
|
|
34
|
+
# Return early if we could not parse a number
|
|
35
|
+
return if id.nil?
|
|
36
|
+
|
|
37
|
+
# Zero or greater than max allowed value of 2**64
|
|
38
|
+
return if id.zero? || id > Span::EXTERNAL_MAX_ID
|
|
39
|
+
id < 0 ? id + (2**64) : id
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def number(hdr, base = 10)
|
|
43
|
+
value_to_number(header(hdr), base)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def value_to_number(value, base = 10)
|
|
47
|
+
# It's important to make a difference between no header,
|
|
48
|
+
# and a header defined to zero.
|
|
49
|
+
return if value.nil?
|
|
50
|
+
|
|
51
|
+
# Be sure we have a string
|
|
52
|
+
value = value.to_s
|
|
53
|
+
|
|
54
|
+
# If we are parsing base16 number then truncate to 64-bit
|
|
55
|
+
value = DistributedTracing::Headers::Helpers.truncate_base16_number(value) if base == 16
|
|
56
|
+
|
|
57
|
+
# Convert header to an integer
|
|
58
|
+
# DEV: Ruby `.to_i` will return `0` if a number could not be parsed
|
|
59
|
+
num = value.to_i(base)
|
|
60
|
+
|
|
61
|
+
# Ensure the parsed number is the same as the original string value
|
|
62
|
+
# e.g. We want to make sure to throw away `'nan'.to_i == 0`
|
|
63
|
+
return unless num.to_s(base) == value
|
|
64
|
+
|
|
65
|
+
num
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'ddtrace/configuration'
|
|
2
|
+
require 'ddtrace/span'
|
|
3
|
+
require 'ddtrace/ext/priority'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module DistributedTracing
|
|
7
|
+
module Headers
|
|
8
|
+
# Helpers module provides common helper functions for distributed tracing headers
|
|
9
|
+
module Helpers
|
|
10
|
+
# Base provides common methods for distributed header helper classes
|
|
11
|
+
def self.clamp_sampling_priority(sampling_priority)
|
|
12
|
+
# B3 doesn't have our -1 (USER_REJECT) and 2 (USER_KEEP) priorities so convert to acceptable 0/1
|
|
13
|
+
if sampling_priority < 0
|
|
14
|
+
sampling_priority = Ext::Priority::AUTO_REJECT
|
|
15
|
+
elsif sampling_priority > 1
|
|
16
|
+
sampling_priority = Ext::Priority::AUTO_KEEP
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
sampling_priority
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.truncate_base16_number(value)
|
|
23
|
+
# Lowercase if we want to parse base16 e.g. 3E8 => 3e8
|
|
24
|
+
# DEV: Ruby will parse `3E8` just fine, but to test
|
|
25
|
+
# `num.to_s(base) == value` we need to lowercase
|
|
26
|
+
value = value.downcase
|
|
27
|
+
|
|
28
|
+
# Truncate to trailing 16 characters if length is greater than 16
|
|
29
|
+
# https://github.com/apache/incubator-zipkin/blob/21fe362899fef5c593370466bc5707d3837070c2/zipkin/src/main/java/zipkin2/storage/StorageComponent.java#L49-L53
|
|
30
|
+
# DEV: This ensures we truncate B3 128-bit trace and span ids to 64-bit
|
|
31
|
+
value = value[value.length - 16, 16] if value.length > 16
|
|
32
|
+
|
|
33
|
+
# Remove any leading zeros
|
|
34
|
+
# DEV: When we call `num.to_s(16)` later Ruby will not add leading zeros
|
|
35
|
+
# for us so we want to make sure the comparision will work as expected
|
|
36
|
+
# DEV: regex, remove all leading zeros up until we find the last 0 in the string
|
|
37
|
+
# or we find the first non-zero, this allows `'0000' -> '0'` and `'00001' -> '1'`
|
|
38
|
+
value = value.sub(/^0*(?=(0$)|[^0])/, '')
|
|
39
|
+
|
|
40
|
+
value
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'msgpack'
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
# Encoding module that encodes data for the AgentTransport
|
|
6
|
+
module Encoding
|
|
7
|
+
# Encoder interface that provides the logic to encode traces and service
|
|
8
|
+
module Encoder
|
|
9
|
+
def content_type
|
|
10
|
+
raise NotImplementedError
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Concatenates a list of elements previously encoded by +#encode+.
|
|
14
|
+
def join(encoded_elements)
|
|
15
|
+
raise NotImplementedError
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Serializes a single trace into a String suitable for network transmission.
|
|
19
|
+
def encode(_)
|
|
20
|
+
raise NotImplementedError
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Encoder for the JSON format
|
|
25
|
+
module JSONEncoder
|
|
26
|
+
extend Encoder
|
|
27
|
+
|
|
28
|
+
CONTENT_TYPE = 'application/json'.freeze
|
|
29
|
+
|
|
30
|
+
module_function
|
|
31
|
+
|
|
32
|
+
def content_type
|
|
33
|
+
CONTENT_TYPE
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def encode(obj)
|
|
37
|
+
JSON.dump(obj)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def join(encoded_data)
|
|
41
|
+
"[#{encoded_data.join(',')}]"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Encoder for the Msgpack format
|
|
46
|
+
module MsgpackEncoder
|
|
47
|
+
extend Encoder
|
|
48
|
+
|
|
49
|
+
module_function
|
|
50
|
+
|
|
51
|
+
CONTENT_TYPE = 'application/msgpack'.freeze
|
|
52
|
+
|
|
53
|
+
def content_type
|
|
54
|
+
CONTENT_TYPE
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def encode(obj)
|
|
58
|
+
MessagePack.pack(obj)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def join(encoded_data)
|
|
62
|
+
packer = MessagePack::Packer.new
|
|
63
|
+
packer.write_array_header(encoded_data.size)
|
|
64
|
+
|
|
65
|
+
(packer.buffer.to_a + encoded_data).join
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'ddtrace/ext/environment'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
# Namespace for handling application environment
|
|
5
|
+
module Environment
|
|
6
|
+
# Defines helper methods for environment
|
|
7
|
+
module Helpers
|
|
8
|
+
def env_to_bool(var, default = nil)
|
|
9
|
+
ENV.key?(var) ? ENV[var].to_s.strip.downcase == 'true' : default
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def env_to_int(var, default = nil)
|
|
13
|
+
ENV.key?(var) ? ENV[var].to_i : default
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def env_to_float(var, default = nil)
|
|
17
|
+
ENV.key?(var) ? ENV[var].to_f : default
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def env_to_list(var, default = [])
|
|
21
|
+
if ENV.key?(var)
|
|
22
|
+
ENV[var].split(',').map(&:strip)
|
|
23
|
+
else
|
|
24
|
+
default
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
extend Helpers
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Datadog global namespace
|
|
2
|
+
module Datadog
|
|
3
|
+
# Error is a value-object responsible for sanitizing/encapsulating error data
|
|
4
|
+
class Error
|
|
5
|
+
attr_reader :type, :message, :backtrace
|
|
6
|
+
|
|
7
|
+
def self.build_from(value)
|
|
8
|
+
case value
|
|
9
|
+
when Error then value
|
|
10
|
+
when Array then new(*value)
|
|
11
|
+
when Exception then new(value.class, value.message, value.backtrace)
|
|
12
|
+
when ContainsMessage then new(value.class, value.message)
|
|
13
|
+
else BlankError
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def initialize(type = nil, message = nil, backtrace = nil)
|
|
18
|
+
backtrace = Array(backtrace).join("\n")
|
|
19
|
+
@type = Utils.utf8_encode(type)
|
|
20
|
+
@message = Utils.utf8_encode(message)
|
|
21
|
+
@backtrace = Utils.utf8_encode(backtrace)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
BlankError = Error.new
|
|
25
|
+
ContainsMessage = ->(v) { v.respond_to?(:message) }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'ddtrace/logger'
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
# A simple pub-sub event model for components to exchange messages through.
|
|
5
|
+
class Event
|
|
6
|
+
attr_reader \
|
|
7
|
+
:name,
|
|
8
|
+
:subscriptions
|
|
9
|
+
|
|
10
|
+
def initialize(name)
|
|
11
|
+
@name = name
|
|
12
|
+
@subscriptions = {}
|
|
13
|
+
@mutex = Mutex.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def subscribe(key, &block)
|
|
17
|
+
raise ArgumentError, 'Must give a block to subscribe!' unless block
|
|
18
|
+
|
|
19
|
+
@mutex.synchronize do
|
|
20
|
+
subscriptions[key] = block
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def unsubscribe(key)
|
|
25
|
+
@mutex.synchronize do
|
|
26
|
+
subscriptions.delete(key)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def unsubscribe_all!
|
|
31
|
+
@mutex.synchronize do
|
|
32
|
+
subscriptions.clear
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def publish(*args)
|
|
39
|
+
@mutex.synchronize do
|
|
40
|
+
subscriptions.each do |key, block|
|
|
41
|
+
begin
|
|
42
|
+
block.call(*args)
|
|
43
|
+
rescue StandardError => e
|
|
44
|
+
Datadog.logger.debug("Error while handling '#{key}' for '#{name}' event: #{e.message}")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
true
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|