ddtrace 0.45.0 → 0.52.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +22 -0
- data/.gitignore +7 -1
- data/CHANGELOG.md +406 -1
- data/CONTRIBUTING.md +1 -5
- data/LICENSE-3rdparty.csv +2 -0
- data/bin/ddtracerb +15 -0
- data/ddtrace.gemspec +19 -38
- data/docs/DevelopmentGuide.md +43 -0
- data/docs/GettingStarted.md +164 -76
- data/docs/ProfilingDevelopment.md +107 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +28 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +17 -0
- data/lib/datadog/ci/configuration/components.rb +31 -0
- data/lib/datadog/ci/configuration/settings.rb +37 -0
- data/lib/datadog/ci/context_flush.rb +29 -0
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/cucumber/ext.rb +20 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +98 -0
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +27 -0
- data/lib/datadog/ci/contrib/cucumber/integration.rb +48 -0
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +26 -0
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +31 -0
- data/lib/datadog/ci/contrib/rspec/example.rb +74 -0
- data/lib/datadog/ci/contrib/rspec/ext.rb +19 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +49 -0
- data/lib/datadog/ci/contrib/rspec/patcher.rb +26 -0
- data/lib/datadog/ci/ext/app_types.rb +10 -0
- data/lib/datadog/ci/ext/environment.rb +443 -0
- data/lib/datadog/ci/ext/settings.rb +11 -0
- data/lib/datadog/ci/ext/test.rb +35 -0
- data/lib/datadog/ci/extensions.rb +18 -0
- data/lib/datadog/ci/test.rb +77 -0
- data/lib/datadog/ci.rb +17 -0
- data/lib/datadog/contrib.rb +69 -0
- data/lib/datadog/core/environment/cgroup.rb +52 -0
- data/lib/datadog/core/environment/class_count.rb +20 -0
- data/lib/datadog/core/environment/container.rb +91 -0
- data/lib/datadog/core/environment/ext.rb +27 -0
- data/lib/datadog/core/environment/gc.rb +19 -0
- data/lib/datadog/core/environment/identity.rb +51 -0
- data/lib/datadog/core/environment/socket.rb +17 -0
- data/lib/datadog/core/environment/thread_count.rb +19 -0
- data/lib/datadog/core/environment/variable_helpers.rb +42 -0
- data/lib/ddtrace/analytics.rb +3 -0
- data/lib/ddtrace/auto_instrument.rb +2 -0
- data/lib/ddtrace/auto_instrument_base.rb +1 -0
- data/lib/ddtrace/buffer.rb +10 -8
- data/lib/ddtrace/chunker.rb +1 -0
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +231 -0
- data/lib/ddtrace/configuration/base.rb +9 -11
- data/lib/ddtrace/configuration/components.rb +167 -26
- data/lib/ddtrace/configuration/dependency_resolver.rb +1 -0
- data/lib/ddtrace/configuration/option.rb +1 -0
- data/lib/ddtrace/configuration/option_definition.rb +2 -3
- data/lib/ddtrace/configuration/option_definition_set.rb +1 -0
- data/lib/ddtrace/configuration/option_set.rb +1 -0
- data/lib/ddtrace/configuration/options.rb +7 -9
- data/lib/ddtrace/configuration/pin_setup.rb +1 -0
- data/lib/ddtrace/configuration/settings.rb +128 -10
- data/lib/ddtrace/configuration.rb +118 -26
- data/lib/ddtrace/context.rb +23 -20
- data/lib/ddtrace/context_flush.rb +15 -2
- data/lib/ddtrace/context_provider.rb +1 -1
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +6 -4
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +1 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +22 -13
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +2 -1
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/integration.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/patcher.rb +1 -0
- data/lib/ddtrace/contrib/action_pack/utils.rb +2 -1
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/action_view/event.rb +4 -3
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +1 -0
- data/lib/ddtrace/contrib/action_view/events.rb +1 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +1 -0
- data/lib/ddtrace/contrib/action_view/integration.rb +1 -0
- data/lib/ddtrace/contrib/action_view/patcher.rb +5 -4
- data/lib/ddtrace/contrib/action_view/utils.rb +2 -1
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -2
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +31 -0
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +108 -18
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_record/event.rb +3 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -0
- data/lib/ddtrace/contrib/active_record/events.rb +1 -0
- data/lib/ddtrace/contrib/active_record/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_record/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_record/patcher.rb +1 -0
- data/lib/ddtrace/contrib/active_record/utils.rb +5 -3
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +1 -0
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +8 -7
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +2 -5
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/active_support/ext.rb +1 -0
- data/lib/ddtrace/contrib/active_support/integration.rb +1 -0
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +5 -3
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +10 -5
- data/lib/ddtrace/contrib/active_support/patcher.rb +1 -0
- data/lib/ddtrace/contrib/analytics.rb +1 -0
- data/lib/ddtrace/contrib/auto_instrument.rb +4 -3
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/aws/ext.rb +1 -0
- data/lib/ddtrace/contrib/aws/instrumentation.rb +30 -0
- data/lib/ddtrace/contrib/aws/integration.rb +1 -0
- data/lib/ddtrace/contrib/aws/parsed_context.rb +1 -0
- data/lib/ddtrace/contrib/aws/patcher.rb +6 -0
- data/lib/ddtrace/contrib/aws/services.rb +3 -0
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +3 -1
- data/lib/ddtrace/contrib/configurable.rb +65 -40
- data/lib/ddtrace/contrib/configuration/resolver.rb +71 -5
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +20 -20
- data/lib/ddtrace/contrib/configuration/settings.rb +8 -6
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/dalli/ext.rb +1 -0
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/dalli/integration.rb +1 -0
- data/lib/ddtrace/contrib/dalli/patcher.rb +2 -39
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/ext.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/integration.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +1 -0
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +1 -1
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +1 -0
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +2 -0
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +6 -2
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +7 -6
- data/lib/ddtrace/contrib/ethon/ext.rb +1 -0
- data/lib/ddtrace/contrib/ethon/integration.rb +1 -0
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +2 -1
- data/lib/ddtrace/contrib/ethon/patcher.rb +4 -2
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/excon/ext.rb +1 -0
- data/lib/ddtrace/contrib/excon/integration.rb +1 -0
- data/lib/ddtrace/contrib/excon/middleware.rb +3 -6
- data/lib/ddtrace/contrib/excon/patcher.rb +1 -0
- data/lib/ddtrace/contrib/extensions.rb +64 -14
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/faraday/connection.rb +1 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +1 -0
- data/lib/ddtrace/contrib/faraday/integration.rb +1 -0
- data/lib/ddtrace/contrib/faraday/middleware.rb +2 -3
- data/lib/ddtrace/contrib/faraday/patcher.rb +3 -38
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +1 -0
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/grape/endpoint.rb +34 -31
- data/lib/ddtrace/contrib/grape/ext.rb +1 -0
- data/lib/ddtrace/contrib/grape/instrumentation.rb +4 -3
- data/lib/ddtrace/contrib/grape/integration.rb +1 -0
- data/lib/ddtrace/contrib/grape/patcher.rb +2 -43
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/graphql/ext.rb +1 -0
- data/lib/ddtrace/contrib/graphql/integration.rb +1 -0
- data/lib/ddtrace/contrib/graphql/patcher.rb +1 -0
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +1 -0
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +4 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +13 -8
- data/lib/ddtrace/contrib/grpc/ext.rb +1 -0
- data/lib/ddtrace/contrib/grpc/integration.rb +1 -0
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +1 -0
- data/lib/ddtrace/contrib/grpc/patcher.rb +3 -37
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +2 -3
- data/lib/ddtrace/contrib/http/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/http/ext.rb +1 -0
- data/lib/ddtrace/contrib/http/instrumentation.rb +7 -6
- data/lib/ddtrace/contrib/http/integration.rb +1 -0
- data/lib/ddtrace/contrib/http/patcher.rb +2 -1
- data/lib/ddtrace/contrib/http_annotation_helper.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/ext.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +16 -20
- data/lib/ddtrace/contrib/httpclient/integration.rb +1 -0
- data/lib/ddtrace/contrib/httpclient/patcher.rb +8 -4
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +1 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +16 -21
- data/lib/ddtrace/contrib/httprb/integration.rb +1 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +8 -4
- data/lib/ddtrace/contrib/integration.rb +4 -3
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +1 -0
- data/lib/ddtrace/contrib/kafka/event.rb +3 -2
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +1 -0
- data/lib/ddtrace/contrib/kafka/events.rb +1 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +1 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +1 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +1 -0
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/lograge/ext.rb +11 -0
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +39 -0
- data/lib/ddtrace/contrib/lograge/integration.rb +46 -0
- data/lib/ddtrace/contrib/{cucumber → lograge}/patcher.rb +7 -4
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/ext.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/parsers.rb +1 -0
- data/lib/ddtrace/contrib/mongodb/patcher.rb +3 -2
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +3 -3
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/ext.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +1 -0
- data/lib/ddtrace/contrib/mysql2/patcher.rb +2 -1
- data/lib/ddtrace/contrib/patchable.rb +3 -2
- data/lib/ddtrace/contrib/patcher.rb +12 -8
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/presto/ext.rb +1 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +2 -1
- data/lib/ddtrace/contrib/presto/integration.rb +1 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +7 -3
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/qless/ext.rb +1 -0
- data/lib/ddtrace/contrib/qless/integration.rb +1 -0
- data/lib/ddtrace/contrib/qless/patcher.rb +5 -5
- data/lib/ddtrace/contrib/qless/qless_job.rb +2 -0
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +2 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/que/ext.rb +20 -19
- data/lib/ddtrace/contrib/que/integration.rb +1 -0
- data/lib/ddtrace/contrib/que/patcher.rb +1 -0
- data/lib/ddtrace/contrib/que/tracer.rb +2 -1
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/racecar/event.rb +4 -2
- data/lib/ddtrace/contrib/racecar/events/batch.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events/message.rb +1 -0
- data/lib/ddtrace/contrib/racecar/events.rb +1 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +1 -0
- data/lib/ddtrace/contrib/racecar/integration.rb +1 -0
- data/lib/ddtrace/contrib/racecar/patcher.rb +1 -0
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +4 -3
- data/lib/ddtrace/contrib/rack/ext.rb +1 -0
- data/lib/ddtrace/contrib/rack/integration.rb +1 -0
- data/lib/ddtrace/contrib/rack/middlewares.rb +7 -11
- data/lib/ddtrace/contrib/rack/patcher.rb +2 -3
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -0
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rails/ext.rb +1 -0
- data/lib/ddtrace/contrib/rails/framework.rb +26 -1
- data/lib/ddtrace/contrib/rails/integration.rb +1 -0
- data/lib/ddtrace/contrib/rails/log_injection.rb +1 -40
- data/lib/ddtrace/contrib/rails/middlewares.rb +1 -0
- data/lib/ddtrace/contrib/rails/patcher.rb +18 -11
- data/lib/ddtrace/contrib/rails/railtie.rb +1 -0
- data/lib/ddtrace/contrib/rails/utils.rb +1 -0
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rake/ext.rb +1 -0
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -3
- data/lib/ddtrace/contrib/rake/integration.rb +1 -0
- data/lib/ddtrace/contrib/rake/patcher.rb +2 -1
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +12 -4
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/redis/ext.rb +1 -0
- data/lib/ddtrace/contrib/redis/integration.rb +1 -0
- data/lib/ddtrace/contrib/redis/patcher.rb +1 -0
- data/lib/ddtrace/contrib/redis/quantize.rb +2 -0
- data/lib/ddtrace/contrib/redis/tags.rb +1 -0
- data/lib/ddtrace/contrib/redis/vendor/LICENSE +20 -0
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +7 -7
- data/lib/ddtrace/contrib/registerable.rb +5 -4
- data/lib/ddtrace/contrib/registry.rb +3 -2
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +18 -1
- data/lib/ddtrace/contrib/resque/ext.rb +1 -0
- data/lib/ddtrace/contrib/resque/integration.rb +2 -1
- data/lib/ddtrace/contrib/resque/patcher.rb +5 -4
- data/lib/ddtrace/contrib/resque/resque_job.rb +25 -1
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/ext.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/integration.rb +1 -0
- data/lib/ddtrace/contrib/rest_client/patcher.rb +3 -1
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +3 -4
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +19 -0
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +11 -0
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +43 -0
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +48 -0
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +26 -0
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sequel/database.rb +2 -1
- data/lib/ddtrace/contrib/sequel/dataset.rb +2 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +1 -0
- data/lib/ddtrace/contrib/sequel/integration.rb +1 -0
- data/lib/ddtrace/contrib/sequel/patcher.rb +3 -2
- data/lib/ddtrace/contrib/sequel/utils.rb +6 -6
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +2 -0
- data/lib/ddtrace/contrib/shoryuken/ext.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/integration.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +1 -0
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +8 -4
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/ext.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/integration.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +3 -7
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +1 -1
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/env.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/ext.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/headers.rb +2 -3
- data/lib/ddtrace/contrib/sinatra/integration.rb +1 -0
- data/lib/ddtrace/contrib/sinatra/patcher.rb +3 -1
- data/lib/ddtrace/contrib/sinatra/tracer.rb +14 -6
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +11 -4
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +12 -11
- data/lib/ddtrace/contrib/sneakers/integration.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +1 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +3 -4
- data/lib/ddtrace/contrib/status_code_matcher.rb +6 -3
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +5 -6
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +5 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +1 -0
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +2 -0
- data/lib/ddtrace/correlation.rb +3 -1
- data/lib/ddtrace/diagnostics/environment_logger.rb +9 -7
- data/lib/ddtrace/diagnostics/health.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +1 -0
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +2 -0
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +2 -3
- data/lib/ddtrace/encoding.rb +3 -0
- data/lib/ddtrace/error.rb +78 -8
- data/lib/ddtrace/event.rb +1 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/app_types.rb +1 -1
- data/lib/ddtrace/ext/correlation.rb +1 -0
- data/lib/ddtrace/ext/diagnostics.rb +1 -0
- data/lib/ddtrace/ext/distributed.rb +2 -1
- data/lib/ddtrace/ext/environment.rb +8 -0
- data/lib/ddtrace/ext/errors.rb +1 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -0
- data/lib/ddtrace/ext/git.rb +10 -1
- data/lib/ddtrace/ext/http.rb +2 -1
- data/lib/ddtrace/ext/integration.rb +1 -0
- data/lib/ddtrace/ext/manual_tracing.rb +1 -0
- data/lib/ddtrace/ext/metrics.rb +1 -0
- data/lib/ddtrace/ext/net.rb +1 -0
- data/lib/ddtrace/ext/priority.rb +1 -0
- data/lib/ddtrace/ext/profiling.rb +56 -0
- data/lib/ddtrace/ext/runtime.rb +1 -7
- data/lib/ddtrace/ext/sampling.rb +1 -0
- data/lib/ddtrace/ext/sql.rb +1 -0
- data/lib/ddtrace/ext/test.rb +3 -18
- data/lib/ddtrace/ext/transport.rb +3 -0
- data/lib/ddtrace/forced_tracing.rb +3 -0
- data/lib/ddtrace/logger.rb +2 -1
- data/lib/ddtrace/metrics.rb +84 -24
- data/lib/ddtrace/opentelemetry/extensions.rb +2 -1
- data/lib/ddtrace/opentelemetry/span.rb +1 -0
- data/lib/ddtrace/opentracer/binary_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/carrier.rb +1 -0
- data/lib/ddtrace/opentracer/distributed_headers.rb +4 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -0
- data/lib/ddtrace/opentracer/propagator.rb +1 -0
- data/lib/ddtrace/opentracer/rack_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/scope.rb +1 -0
- data/lib/ddtrace/opentracer/scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/span.rb +3 -6
- data/lib/ddtrace/opentracer/span_context.rb +1 -0
- data/lib/ddtrace/opentracer/span_context_factory.rb +1 -0
- data/lib/ddtrace/opentracer/text_map_propagator.rb +1 -0
- data/lib/ddtrace/opentracer/thread_local_scope.rb +2 -0
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +1 -0
- data/lib/ddtrace/opentracer/tracer.rb +1 -0
- data/lib/ddtrace/opentracer.rb +21 -39
- data/lib/ddtrace/patcher.rb +28 -6
- data/lib/ddtrace/pin.rb +9 -61
- data/lib/ddtrace/pipeline/span_filter.rb +2 -1
- data/lib/ddtrace/pipeline/span_processor.rb +1 -0
- data/lib/ddtrace/pipeline.rb +1 -0
- data/lib/ddtrace/profiling/backtrace_location.rb +33 -0
- data/lib/ddtrace/profiling/buffer.rb +42 -0
- data/lib/ddtrace/profiling/collectors/stack.rb +257 -0
- data/lib/ddtrace/profiling/encoding/profile.rb +38 -0
- data/lib/ddtrace/profiling/event.rb +14 -0
- data/lib/ddtrace/profiling/events/stack.rb +81 -0
- data/lib/ddtrace/profiling/exporter.rb +24 -0
- data/lib/ddtrace/profiling/ext/cpu.rb +67 -0
- data/lib/ddtrace/profiling/ext/cthread.rb +156 -0
- data/lib/ddtrace/profiling/ext/forking.rb +98 -0
- data/lib/ddtrace/profiling/flush.rb +44 -0
- data/lib/ddtrace/profiling/native_extension.rb +18 -0
- data/lib/ddtrace/profiling/pprof/builder.rb +120 -0
- data/lib/ddtrace/profiling/pprof/converter.rb +90 -0
- data/lib/ddtrace/profiling/pprof/message_set.rb +15 -0
- data/lib/ddtrace/profiling/pprof/payload.rb +19 -0
- data/lib/ddtrace/profiling/pprof/pprof.proto +212 -0
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +82 -0
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +117 -0
- data/lib/ddtrace/profiling/pprof/string_table.rb +11 -0
- data/lib/ddtrace/profiling/pprof/template.rb +119 -0
- data/lib/ddtrace/profiling/preload.rb +4 -0
- data/lib/ddtrace/profiling/profiler.rb +31 -0
- data/lib/ddtrace/profiling/recorder.rb +96 -0
- data/lib/ddtrace/profiling/scheduler.rb +134 -0
- data/lib/ddtrace/profiling/tasks/setup.rb +82 -0
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +41 -0
- data/lib/ddtrace/profiling/trace_identifiers/helper.rb +46 -0
- data/lib/ddtrace/profiling/transport/client.rb +15 -0
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +101 -0
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +37 -0
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +41 -0
- data/lib/ddtrace/profiling/transport/http/api.rb +44 -0
- data/lib/ddtrace/profiling/transport/http/builder.rb +29 -0
- data/lib/ddtrace/profiling/transport/http/client.rb +34 -0
- data/lib/ddtrace/profiling/transport/http/response.rb +22 -0
- data/lib/ddtrace/profiling/transport/http.rb +120 -0
- data/lib/ddtrace/profiling/transport/io/client.rb +28 -0
- data/lib/ddtrace/profiling/transport/io/response.rb +17 -0
- data/lib/ddtrace/profiling/transport/io.rb +31 -0
- data/lib/ddtrace/profiling/transport/parcel.rb +18 -0
- data/lib/ddtrace/profiling/transport/request.rb +16 -0
- data/lib/ddtrace/profiling/transport/response.rb +9 -0
- data/lib/ddtrace/profiling.rb +151 -0
- data/lib/ddtrace/propagation/grpc_propagator.rb +2 -0
- data/lib/ddtrace/propagation/http_propagator.rb +3 -2
- data/lib/ddtrace/quantization/hash.rb +1 -0
- data/lib/ddtrace/quantization/http.rb +4 -0
- data/lib/ddtrace/runtime/metrics.rb +21 -14
- data/lib/ddtrace/sampler.rb +2 -1
- data/lib/ddtrace/sampling/matcher.rb +1 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +1 -0
- data/lib/ddtrace/sampling/rule.rb +2 -1
- data/lib/ddtrace/sampling/rule_sampler.rb +6 -10
- data/lib/ddtrace/sampling.rb +1 -0
- data/lib/ddtrace/span.rb +44 -19
- data/lib/ddtrace/sync_writer.rb +17 -15
- data/lib/ddtrace/tasks/exec.rb +47 -0
- data/lib/ddtrace/tasks/help.rb +15 -0
- data/lib/ddtrace/tracer.rb +48 -50
- data/lib/ddtrace/transport/http/adapters/net.rb +28 -8
- data/lib/ddtrace/transport/http/adapters/registry.rb +2 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +3 -4
- data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +1 -0
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/api.rb +1 -0
- data/lib/ddtrace/transport/http/builder.rb +8 -1
- data/lib/ddtrace/transport/http/client.rb +3 -1
- data/lib/ddtrace/transport/http/env.rb +9 -0
- data/lib/ddtrace/transport/http/response.rb +1 -0
- data/lib/ddtrace/transport/http/statistics.rb +3 -2
- data/lib/ddtrace/transport/http/traces.rb +6 -6
- data/lib/ddtrace/transport/http.rb +51 -38
- data/lib/ddtrace/transport/io/client.rb +17 -9
- data/lib/ddtrace/transport/io/response.rb +2 -3
- data/lib/ddtrace/transport/io/traces.rb +10 -1
- data/lib/ddtrace/transport/io.rb +2 -1
- data/lib/ddtrace/transport/parcel.rb +7 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/statistics.rb +1 -0
- data/lib/ddtrace/transport/traces.rb +21 -3
- data/lib/ddtrace/utils/compression.rb +28 -0
- data/lib/ddtrace/utils/database.rb +1 -0
- data/lib/ddtrace/utils/forking.rb +2 -1
- data/lib/ddtrace/utils/object_set.rb +40 -0
- data/lib/ddtrace/utils/only_once.rb +41 -0
- data/lib/ddtrace/utils/sequence.rb +18 -0
- data/lib/ddtrace/utils/string_table.rb +46 -0
- data/lib/ddtrace/utils/time.rb +34 -2
- data/lib/ddtrace/utils.rb +14 -2
- data/lib/ddtrace/vendor/active_record/MIT-LICENSE +20 -0
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +1 -0
- data/lib/ddtrace/vendor/multipart-post/LICENSE +11 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +117 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +58 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +136 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +10 -0
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +9 -0
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +13 -0
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +33 -0
- data/lib/ddtrace/version.rb +15 -2
- data/lib/ddtrace/worker.rb +1 -0
- data/lib/ddtrace/workers/async.rb +15 -5
- data/lib/ddtrace/workers/loop.rb +32 -5
- data/lib/ddtrace/workers/polling.rb +13 -5
- data/lib/ddtrace/workers/queue.rb +3 -1
- data/lib/ddtrace/workers/runtime_metrics.rb +15 -1
- data/lib/ddtrace/workers/trace_writer.rb +14 -16
- data/lib/ddtrace/workers.rb +8 -2
- data/lib/ddtrace/writer.rb +14 -7
- data/lib/ddtrace.rb +20 -56
- metadata +130 -446
- data/.circleci/config.yml +0 -566
- data/.circleci/images/primary/Dockerfile-2.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-2.1.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.2.10 +0 -73
- data/.circleci/images/primary/Dockerfile-2.3.8 +0 -75
- data/.circleci/images/primary/Dockerfile-2.4.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.5.6 +0 -73
- data/.circleci/images/primary/Dockerfile-2.6.4 +0 -73
- data/.circleci/images/primary/Dockerfile-2.7.0 +0 -73
- data/.circleci/images/primary/Dockerfile-3.0.0 +0 -73
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +0 -77
- data/.dockerignore +0 -1
- data/.env +0 -26
- data/.github/CODEOWNERS +0 -1
- data/.github/workflows/add-milestone-to-pull-requests.yml +0 -42
- data/.github/workflows/create-next-milestone.yml +0 -20
- data/.gitlab-ci.yml +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -85
- data/.simplecov +0 -41
- data/Appraisals +0 -1350
- data/Gemfile +0 -9
- data/Rakefile +0 -993
- data/benchmarks/postgres_database.yml +0 -9
- data/benchmarks/sidekiq_test.rb +0 -154
- data/docker-compose.yml +0 -400
- data/lib/ddtrace/augmentation/method_wrapper.rb +0 -20
- data/lib/ddtrace/augmentation/method_wrapping.rb +0 -38
- data/lib/ddtrace/augmentation/shim.rb +0 -102
- data/lib/ddtrace/augmentation.rb +0 -13
- data/lib/ddtrace/contrib/cucumber/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/cucumber/ext.rb +0 -19
- data/lib/ddtrace/contrib/cucumber/formatter.rb +0 -104
- data/lib/ddtrace/contrib/cucumber/instrumentation.rb +0 -24
- data/lib/ddtrace/contrib/cucumber/integration.rb +0 -45
- data/lib/ddtrace/contrib/rspec/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/rspec/example.rb +0 -61
- data/lib/ddtrace/contrib/rspec/example_group.rb +0 -61
- data/lib/ddtrace/contrib/rspec/ext.rb +0 -19
- data/lib/ddtrace/contrib/rspec/integration.rb +0 -46
- data/lib/ddtrace/contrib/rspec/patcher.rb +0 -25
- data/lib/ddtrace/environment.rb +0 -41
- data/lib/ddtrace/ext/ci.rb +0 -297
- data/lib/ddtrace/monkey.rb +0 -58
- data/lib/ddtrace/runtime/cgroup.rb +0 -44
- data/lib/ddtrace/runtime/class_count.rb +0 -17
- data/lib/ddtrace/runtime/container.rb +0 -73
- data/lib/ddtrace/runtime/gc.rb +0 -16
- data/lib/ddtrace/runtime/identity.rb +0 -40
- data/lib/ddtrace/runtime/object_space.rb +0 -19
- data/lib/ddtrace/runtime/socket.rb +0 -14
- data/lib/ddtrace/runtime/thread_count.rb +0 -16
- data/tasks/release_gem.rake +0 -28
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2005-2018 David Heinemeier Hansson
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Released under the MIT license.
|
2
|
+
|
3
|
+
Copyright, 2007-2013, by Nick Sieger.
|
4
|
+
Copyright, 2017, by Samuel G. D. Williams.
|
5
|
+
Copyright, 2019, by Patrick Davey.
|
6
|
+
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
8
|
+
|
9
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
10
|
+
|
11
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# typed: false
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
4
|
+
# See the file README.txt included with the distribution for
|
5
|
+
# software license details.
|
6
|
+
#++
|
7
|
+
|
8
|
+
# Concatenate together multiple IO objects into a single, composite IO object
|
9
|
+
# for purposes of reading as a single stream.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# crio = CompositeReadIO.new(StringIO.new('one'),
|
13
|
+
# StringIO.new('two'),
|
14
|
+
# StringIO.new('three'))
|
15
|
+
# puts crio.read # => "onetwothree"
|
16
|
+
module Datadog
|
17
|
+
module Vendor
|
18
|
+
module Multipart
|
19
|
+
module Post
|
20
|
+
class CompositeReadIO
|
21
|
+
# Create a new composite-read IO from the arguments, all of which should
|
22
|
+
# respond to #read in a manner consistent with IO.
|
23
|
+
def initialize(*ios)
|
24
|
+
@ios = ios.flatten
|
25
|
+
@index = 0
|
26
|
+
end
|
27
|
+
|
28
|
+
# Read from IOs in order until `length` bytes have been received.
|
29
|
+
def read(length = nil, outbuf = nil)
|
30
|
+
got_result = false
|
31
|
+
outbuf = outbuf ? outbuf.replace("") : ""
|
32
|
+
|
33
|
+
while io = current_io
|
34
|
+
if result = io.read(length)
|
35
|
+
got_result ||= !result.nil?
|
36
|
+
result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
|
37
|
+
outbuf << result
|
38
|
+
length -= result.length if length
|
39
|
+
break if length == 0
|
40
|
+
end
|
41
|
+
advance_io
|
42
|
+
end
|
43
|
+
(!got_result && length) ? nil : outbuf
|
44
|
+
end
|
45
|
+
|
46
|
+
def rewind
|
47
|
+
@ios.each { |io| io.rewind }
|
48
|
+
@index = 0
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def current_io
|
54
|
+
@ios[@index]
|
55
|
+
end
|
56
|
+
|
57
|
+
def advance_io
|
58
|
+
@index += 1
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Convenience methods for dealing with files and IO that are to be uploaded.
|
63
|
+
class UploadIO
|
64
|
+
attr_reader :content_type, :original_filename, :local_path, :io, :opts
|
65
|
+
|
66
|
+
# Create an upload IO suitable for including in the params hash of a
|
67
|
+
# Net::HTTP::Post::Multipart.
|
68
|
+
#
|
69
|
+
# Can take two forms. The first accepts a filename and content type, and
|
70
|
+
# opens the file for reading (to be closed by finalizer).
|
71
|
+
#
|
72
|
+
# The second accepts an already-open IO, but also requires a third argument,
|
73
|
+
# the filename from which it was opened (particularly useful/recommended if
|
74
|
+
# uploading directly from a form in a framework, which often save the file to
|
75
|
+
# an arbitrarily named RackMultipart file in /tmp).
|
76
|
+
#
|
77
|
+
# @example
|
78
|
+
# UploadIO.new("file.txt", "text/plain")
|
79
|
+
# UploadIO.new(file_io, "text/plain", "file.txt")
|
80
|
+
def initialize(filename_or_io, content_type, filename = nil, opts = {})
|
81
|
+
io = filename_or_io
|
82
|
+
local_path = ""
|
83
|
+
if io.respond_to? :read
|
84
|
+
# in Ruby 1.9.2, StringIOs no longer respond to path
|
85
|
+
# (since they respond to :length, so we don't need their local path, see parts.rb:41)
|
86
|
+
local_path = filename_or_io.respond_to?(:path) ? filename_or_io.path : "local.path"
|
87
|
+
else
|
88
|
+
io = File.open(filename_or_io)
|
89
|
+
local_path = filename_or_io
|
90
|
+
end
|
91
|
+
filename ||= local_path
|
92
|
+
|
93
|
+
@content_type = content_type
|
94
|
+
@original_filename = File.basename(filename)
|
95
|
+
@local_path = local_path
|
96
|
+
@io = io
|
97
|
+
@opts = opts
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.convert!(io, content_type, original_filename, local_path)
|
101
|
+
raise ArgumentError, "convert! has been removed. You must now wrap IOs " \
|
102
|
+
"using:\nUploadIO.new(filename_or_io, content_type, " \
|
103
|
+
"filename=nil)\nPlease update your code."
|
104
|
+
end
|
105
|
+
|
106
|
+
def method_missing(*args)
|
107
|
+
@io.send(*args)
|
108
|
+
end
|
109
|
+
|
110
|
+
def respond_to?(meth, include_all = false)
|
111
|
+
@io.respond_to?(meth, include_all) || super(meth, include_all)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# typed: false
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2007-2013 Nick Sieger.
|
4
|
+
# See the file README.txt included with the distribution for
|
5
|
+
# software license details.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/parts'
|
9
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
|
10
|
+
require 'securerandom'
|
11
|
+
|
12
|
+
module Datadog
|
13
|
+
module Vendor
|
14
|
+
module Multipart
|
15
|
+
module Post
|
16
|
+
module Multipartable
|
17
|
+
def self.secure_boundary
|
18
|
+
# https://tools.ietf.org/html/rfc7230
|
19
|
+
# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
|
20
|
+
# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
|
21
|
+
# / DIGIT / ALPHA
|
22
|
+
|
23
|
+
# https://tools.ietf.org/html/rfc2046
|
24
|
+
# bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
|
25
|
+
# "+" / "_" / "," / "-" / "." /
|
26
|
+
# "/" / ":" / "=" / "?"
|
27
|
+
|
28
|
+
"--#{SecureRandom.uuid}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(path, params, headers={}, boundary = Multipartable.secure_boundary)
|
32
|
+
headers = headers.clone # don't want to modify the original variable
|
33
|
+
parts_headers = headers.delete(:parts) || {}
|
34
|
+
super(path, headers)
|
35
|
+
parts = params.map do |k,v|
|
36
|
+
case v
|
37
|
+
when Array
|
38
|
+
v.map {|item| Parts::Part.new(boundary, "#{k}[]", item, parts_headers[k]) }
|
39
|
+
else
|
40
|
+
Parts::Part.new(boundary, k, v, parts_headers[k])
|
41
|
+
end
|
42
|
+
end.flatten
|
43
|
+
parts << Parts::EpiloguePart.new(boundary)
|
44
|
+
ios = parts.map {|p| p.to_io }
|
45
|
+
self.set_content_type(headers["Content-Type"] || "multipart/form-data",
|
46
|
+
{ "boundary" => boundary })
|
47
|
+
self.content_length = parts.inject(0) {|sum,i| sum + i.length }
|
48
|
+
self.body_stream = CompositeReadIO.new(*ios)
|
49
|
+
|
50
|
+
@boundary = boundary
|
51
|
+
end
|
52
|
+
|
53
|
+
attr :boundary
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# typed: true
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2007-2013 Nick Sieger.
|
4
|
+
# See the file README.txt included with the distribution for
|
5
|
+
# software license details.
|
6
|
+
#++
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module Vendor
|
10
|
+
module Multipart
|
11
|
+
module Post
|
12
|
+
module Parts
|
13
|
+
module Part
|
14
|
+
def self.new(boundary, name, value, headers = {})
|
15
|
+
headers ||= {} # avoid nil values
|
16
|
+
if file?(value)
|
17
|
+
FilePart.new(boundary, name, value, headers)
|
18
|
+
else
|
19
|
+
ParamPart.new(boundary, name, value, headers)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.file?(value)
|
24
|
+
value.respond_to?(:content_type) && value.respond_to?(:original_filename)
|
25
|
+
end
|
26
|
+
|
27
|
+
def length
|
28
|
+
@part.length
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_io
|
32
|
+
@io
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Represents a parametric part to be filled with given value.
|
37
|
+
class ParamPart
|
38
|
+
include Part
|
39
|
+
|
40
|
+
# @param boundary [String]
|
41
|
+
# @param name [#to_s]
|
42
|
+
# @param value [String]
|
43
|
+
# @param headers [Hash] Content-Type and Content-ID are used, if present.
|
44
|
+
def initialize(boundary, name, value, headers = {})
|
45
|
+
@part = build_part(boundary, name, value, headers)
|
46
|
+
@io = StringIO.new(@part)
|
47
|
+
end
|
48
|
+
|
49
|
+
def length
|
50
|
+
@part.bytesize
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param boundary [String]
|
54
|
+
# @param name [#to_s]
|
55
|
+
# @param value [String]
|
56
|
+
# @param headers [Hash] Content-Type is used, if present.
|
57
|
+
def build_part(boundary, name, value, headers = {})
|
58
|
+
part = ''
|
59
|
+
part << "--#{boundary}\r\n"
|
60
|
+
part << "Content-ID: #{headers["Content-ID"]}\r\n" if headers["Content-ID"]
|
61
|
+
part << "Content-Disposition: form-data; name=\"#{name.to_s}\"\r\n"
|
62
|
+
part << "Content-Type: #{headers["Content-Type"]}\r\n" if headers["Content-Type"]
|
63
|
+
part << "\r\n"
|
64
|
+
part << "#{value}\r\n"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Represents a part to be filled from file IO.
|
69
|
+
class FilePart
|
70
|
+
include Part
|
71
|
+
|
72
|
+
attr_reader :length
|
73
|
+
|
74
|
+
# @param boundary [String]
|
75
|
+
# @param name [#to_s]
|
76
|
+
# @param io [IO]
|
77
|
+
# @param headers [Hash]
|
78
|
+
def initialize(boundary, name, io, headers = {})
|
79
|
+
file_length = io.respond_to?(:length) ? io.length : File.size(io.local_path)
|
80
|
+
@head = build_head(boundary, name, io.original_filename, io.content_type, file_length,
|
81
|
+
io.respond_to?(:opts) ? io.opts.merge(headers) : headers)
|
82
|
+
@foot = "\r\n"
|
83
|
+
@length = @head.bytesize + file_length + @foot.length
|
84
|
+
@io = CompositeReadIO.new(StringIO.new(@head), io, StringIO.new(@foot))
|
85
|
+
end
|
86
|
+
|
87
|
+
# @param boundary [String]
|
88
|
+
# @param name [#to_s]
|
89
|
+
# @param filename [String]
|
90
|
+
# @param type [String]
|
91
|
+
# @param content_len [Integer]
|
92
|
+
# @param opts [Hash]
|
93
|
+
def build_head(boundary, name, filename, type, content_len, opts = {})
|
94
|
+
opts = opts.clone
|
95
|
+
|
96
|
+
trans_encoding = opts.delete("Content-Transfer-Encoding") || "binary"
|
97
|
+
content_disposition = opts.delete("Content-Disposition") || "form-data"
|
98
|
+
|
99
|
+
part = ''
|
100
|
+
part << "--#{boundary}\r\n"
|
101
|
+
part << "Content-Disposition: #{content_disposition}; name=\"#{name.to_s}\"; filename=\"#{filename}\"\r\n"
|
102
|
+
part << "Content-Length: #{content_len}\r\n"
|
103
|
+
if content_id = opts.delete("Content-ID")
|
104
|
+
part << "Content-ID: #{content_id}\r\n"
|
105
|
+
end
|
106
|
+
|
107
|
+
if opts["Content-Type"] != nil
|
108
|
+
part << "Content-Type: " + opts["Content-Type"] + "\r\n"
|
109
|
+
else
|
110
|
+
part << "Content-Type: #{type}\r\n"
|
111
|
+
end
|
112
|
+
|
113
|
+
part << "Content-Transfer-Encoding: #{trans_encoding}\r\n"
|
114
|
+
|
115
|
+
opts.each do |k, v|
|
116
|
+
part << "#{k}: #{v}\r\n"
|
117
|
+
end
|
118
|
+
|
119
|
+
part << "\r\n"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Represents the epilogue or closing boundary.
|
124
|
+
class EpiloguePart
|
125
|
+
include Part
|
126
|
+
|
127
|
+
def initialize(boundary)
|
128
|
+
@part = "--#{boundary}--\r\n"
|
129
|
+
@io = StringIO.new(@part)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# typed: strict
|
2
|
+
#--
|
3
|
+
# Copyright (c) 2007-2012 Nick Sieger.
|
4
|
+
# See the file README.txt included with the distribution for
|
5
|
+
# software license details.
|
6
|
+
#++
|
7
|
+
|
8
|
+
require 'net/http'
|
9
|
+
require 'stringio'
|
10
|
+
require 'cgi'
|
11
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/parts'
|
12
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/composite_read_io'
|
13
|
+
require 'ddtrace/vendor/multipart-post/multipart/post/multipartable'
|
14
|
+
|
15
|
+
module Datadog
|
16
|
+
module Vendor
|
17
|
+
module Net
|
18
|
+
class HTTP
|
19
|
+
class Put
|
20
|
+
class Multipart < ::Net::HTTP::Put
|
21
|
+
include ::Datadog::Vendor::Multipart::Post::Multipartable
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Post
|
26
|
+
class Multipart < ::Net::HTTP::Post
|
27
|
+
include ::Datadog::Vendor::Multipart::Post::Multipartable
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/ddtrace/version.rb
CHANGED
@@ -1,12 +1,25 @@
|
|
1
|
+
# typed: true
|
1
2
|
module Datadog
|
2
3
|
module VERSION
|
3
4
|
MAJOR = 0
|
4
|
-
MINOR =
|
5
|
+
MINOR = 52
|
5
6
|
PATCH = 0
|
6
7
|
PRE = nil
|
7
8
|
|
8
9
|
STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
|
9
10
|
|
10
|
-
MINIMUM_RUBY_VERSION = '2.
|
11
|
+
MINIMUM_RUBY_VERSION = '2.1.0'.freeze
|
12
|
+
|
13
|
+
# Ruby 3.2 is not supported: Ruby 3.x support as implemented using *args
|
14
|
+
# needs ruby2_keywords to continue working, yet the scheduled removal of
|
15
|
+
# ruby2_keywords when Ruby 2.6 is EOL'd (i.e on Ruby 3.2 release) would
|
16
|
+
# leave the code with no option, other than to move to *args, **kwargs.
|
17
|
+
#
|
18
|
+
# See https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/
|
19
|
+
#
|
20
|
+
# This constraint can only be removed when the dependency on ruby2_keywords is
|
21
|
+
# dropped. An allowance is nonetheless made to test prerelease versions.
|
22
|
+
# The version constraint may be bumped if the removal is postponed.
|
23
|
+
MAXIMUM_RUBY_VERSION = '3.2'.freeze
|
11
24
|
end
|
12
25
|
end
|
data/lib/ddtrace/worker.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: false
|
1
2
|
require 'ddtrace/logger'
|
2
3
|
|
3
4
|
module Datadog
|
@@ -12,13 +13,13 @@ module Datadog
|
|
12
13
|
SHUTDOWN_TIMEOUT = 1
|
13
14
|
|
14
15
|
def self.included(base)
|
15
|
-
base.
|
16
|
+
base.prepend(PrependedMethods)
|
16
17
|
end
|
17
18
|
|
18
19
|
# Methods that must be prepended
|
19
20
|
module PrependedMethods
|
20
21
|
def perform(*args)
|
21
|
-
|
22
|
+
start_async { self.result = super(*args) } unless started?
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
@@ -31,18 +32,22 @@ module Datadog
|
|
31
32
|
|
32
33
|
def join(timeout = nil)
|
33
34
|
return true unless running?
|
35
|
+
|
34
36
|
!worker.join(timeout).nil?
|
35
37
|
end
|
36
38
|
|
37
39
|
def terminate
|
38
40
|
return false unless running?
|
41
|
+
|
39
42
|
@run_async = false
|
43
|
+
Datadog.logger.debug { "Forcibly terminating worker thread for: #{self}" }
|
40
44
|
worker.terminate
|
41
45
|
true
|
42
46
|
end
|
43
47
|
|
44
48
|
def run_async?
|
45
49
|
return false unless instance_variable_defined?(:@run_async)
|
50
|
+
|
46
51
|
@run_async == true
|
47
52
|
end
|
48
53
|
|
@@ -56,6 +61,7 @@ module Datadog
|
|
56
61
|
|
57
62
|
def error?
|
58
63
|
return false unless instance_variable_defined?(:@error)
|
64
|
+
|
59
65
|
!@error.nil?
|
60
66
|
end
|
61
67
|
|
@@ -101,9 +107,10 @@ module Datadog
|
|
101
107
|
@worker ||= nil
|
102
108
|
end
|
103
109
|
|
104
|
-
def
|
110
|
+
def start_async(&block)
|
105
111
|
mutex.synchronize do
|
106
112
|
return if running?
|
113
|
+
|
107
114
|
if forked?
|
108
115
|
case fork_policy
|
109
116
|
when FORK_POLICY_STOP
|
@@ -121,7 +128,7 @@ module Datadog
|
|
121
128
|
@run_async = true
|
122
129
|
@pid = Process.pid
|
123
130
|
@error = nil
|
124
|
-
Datadog.logger.debug
|
131
|
+
Datadog.logger.debug { "Starting thread for: #{self}" }
|
125
132
|
|
126
133
|
@worker = ::Thread.new do
|
127
134
|
begin
|
@@ -129,10 +136,13 @@ module Datadog
|
|
129
136
|
# rubocop:disable Lint/RescueException
|
130
137
|
rescue Exception => e
|
131
138
|
@error = e
|
132
|
-
Datadog.logger.debug("Worker thread error. Cause #{e.message} Location: #{e.backtrace.first}")
|
139
|
+
Datadog.logger.debug("Worker thread error. Cause #{e.message} Location: #{Array(e.backtrace).first}")
|
133
140
|
raise
|
134
141
|
end
|
135
142
|
end
|
143
|
+
@worker.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
|
144
|
+
|
145
|
+
nil
|
136
146
|
end
|
137
147
|
|
138
148
|
def stop_fork
|
data/lib/ddtrace/workers/loop.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: false
|
1
2
|
module Datadog
|
2
3
|
module Workers
|
3
4
|
# Adds looping behavior to workers, with a sleep
|
@@ -8,7 +9,7 @@ module Datadog
|
|
8
9
|
BASE_INTERVAL = 1
|
9
10
|
|
10
11
|
def self.included(base)
|
11
|
-
base.
|
12
|
+
base.prepend(PrependedMethods)
|
12
13
|
end
|
13
14
|
|
14
15
|
# Methods that must be prepended
|
@@ -21,6 +22,7 @@ module Datadog
|
|
21
22
|
def stop_loop
|
22
23
|
mutex.synchronize do
|
23
24
|
return false unless run_loop?
|
25
|
+
|
24
26
|
@run_loop = false
|
25
27
|
shutdown.signal
|
26
28
|
end
|
@@ -34,6 +36,7 @@ module Datadog
|
|
34
36
|
|
35
37
|
def run_loop?
|
36
38
|
return false unless instance_variable_defined?(:@run_loop)
|
39
|
+
|
37
40
|
@run_loop == true
|
38
41
|
end
|
39
42
|
|
@@ -53,12 +56,29 @@ module Datadog
|
|
53
56
|
@loop_wait_time ||= loop_base_interval
|
54
57
|
end
|
55
58
|
|
59
|
+
def loop_wait_time=(value)
|
60
|
+
@loop_wait_time = value
|
61
|
+
end
|
62
|
+
|
63
|
+
def reset_loop_wait_time
|
64
|
+
self.loop_wait_time = loop_base_interval
|
65
|
+
end
|
66
|
+
|
67
|
+
# Should the loop "back off" when there's no work?
|
56
68
|
def loop_back_off?
|
57
69
|
false
|
58
70
|
end
|
59
71
|
|
60
|
-
def loop_back_off!
|
61
|
-
|
72
|
+
def loop_back_off!
|
73
|
+
self.loop_wait_time = [loop_wait_time * BACK_OFF_RATIO, BACK_OFF_MAX].min
|
74
|
+
end
|
75
|
+
|
76
|
+
# Should perform_loop just straight into work, or start by waiting?
|
77
|
+
#
|
78
|
+
# The use case is if we want to report some information (like profiles) from time to time, we may not want to
|
79
|
+
# report empty/zero/some residual value immediately when the worker starts.
|
80
|
+
def loop_wait_before_first_iteration?
|
81
|
+
false
|
62
82
|
end
|
63
83
|
|
64
84
|
protected
|
@@ -75,16 +95,22 @@ module Datadog
|
|
75
95
|
private
|
76
96
|
|
77
97
|
def perform_loop
|
78
|
-
|
98
|
+
mutex.synchronize do
|
99
|
+
@run_loop = true
|
100
|
+
|
101
|
+
shutdown.wait(mutex, loop_wait_time) if loop_wait_before_first_iteration?
|
102
|
+
end
|
79
103
|
|
80
104
|
loop do
|
81
105
|
if work_pending?
|
106
|
+
# There's work to do...
|
82
107
|
# Run the task
|
83
108
|
yield
|
84
109
|
|
85
110
|
# Reset the wait interval
|
86
|
-
loop_back_off
|
111
|
+
reset_loop_wait_time if loop_back_off?
|
87
112
|
elsif loop_back_off?
|
113
|
+
# There's no work to do...
|
88
114
|
# Back off the wait interval a bit
|
89
115
|
loop_back_off!
|
90
116
|
end
|
@@ -92,6 +118,7 @@ module Datadog
|
|
92
118
|
# Wait for an interval, unless shutdown has been signaled.
|
93
119
|
mutex.synchronize do
|
94
120
|
return unless run_loop? || work_pending?
|
121
|
+
|
95
122
|
shutdown.wait(mutex, loop_wait_time) if run_loop?
|
96
123
|
end
|
97
124
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: false
|
1
2
|
require 'ddtrace/workers/async'
|
2
3
|
require 'ddtrace/workers/loop'
|
3
4
|
|
@@ -8,9 +9,9 @@ module Datadog
|
|
8
9
|
SHUTDOWN_TIMEOUT = 1
|
9
10
|
|
10
11
|
def self.included(base)
|
11
|
-
base.
|
12
|
-
base.
|
13
|
-
base.
|
12
|
+
base.include(Workers::IntervalLoop)
|
13
|
+
base.include(Workers::Async::Thread)
|
14
|
+
base.prepend(PrependedMethods)
|
14
15
|
end
|
15
16
|
|
16
17
|
# Methods that must be prepended
|
@@ -26,8 +27,14 @@ module Datadog
|
|
26
27
|
stop_loop
|
27
28
|
graceful = join(timeout)
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
if !graceful && force_stop
|
31
|
+
Datadog.logger.debug do
|
32
|
+
"Timeout while waiting for worker to finish gracefully, forcing termination for: #{self}"
|
33
|
+
end
|
34
|
+
terminate
|
35
|
+
else
|
36
|
+
graceful
|
37
|
+
end
|
31
38
|
else
|
32
39
|
false
|
33
40
|
end
|
@@ -35,6 +42,7 @@ module Datadog
|
|
35
42
|
|
36
43
|
def enabled?
|
37
44
|
return true unless instance_variable_defined?(:@enabled)
|
45
|
+
|
38
46
|
@enabled
|
39
47
|
end
|
40
48
|
|