ddtrace 1.1.0 → 1.9.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 +4 -4
- data/CHANGELOG.md +423 -1
- data/LICENSE-3rdparty.csv +3 -0
- data/README.md +9 -4
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +21 -5
- data/ext/ddtrace_profiling_loader/extconf.rb +22 -1
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +52 -8
- data/ext/ddtrace_profiling_native_extension/clock_id.h +22 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +34 -3
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +11 -2
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +899 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +9 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +776 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.c +142 -0
- data/ext/ddtrace_profiling_native_extension/collectors_dynamic_sampling_rate.h +14 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.c +241 -0
- data/ext/ddtrace_profiling_native_extension/collectors_idle_sampling_helper.h +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +175 -63
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +18 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +90 -18
- data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +354 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +18 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +154 -21
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +256 -17
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +17 -5
- data/ext/ddtrace_profiling_native_extension/profiling.c +223 -3
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +89 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.c +115 -0
- data/ext/ddtrace_profiling_native_extension/setup_signal_handler.h +11 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +392 -44
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +25 -14
- data/ext/ddtrace_profiling_native_extension/time_helpers.c +17 -0
- data/ext/ddtrace_profiling_native_extension/time_helpers.h +10 -0
- data/lib/datadog/appsec/assets/blocked.html +98 -3
- data/lib/datadog/appsec/assets/blocked.json +1 -0
- data/lib/datadog/appsec/assets/blocked.text +5 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +1250 -300
- data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -78
- data/lib/datadog/appsec/assets/waf_rules/strict.json +308 -73
- data/lib/datadog/appsec/assets.rb +3 -3
- data/lib/datadog/appsec/autoload.rb +4 -2
- data/lib/datadog/appsec/configuration/settings.rb +40 -23
- data/lib/datadog/appsec/configuration.rb +9 -3
- data/lib/datadog/appsec/contrib/auto_instrument.rb +1 -3
- data/lib/datadog/appsec/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/appsec/contrib/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/patcher.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +32 -27
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +17 -21
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +13 -13
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +13 -13
- data/lib/datadog/appsec/contrib/rack/request.rb +21 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +3 -3
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +50 -23
- data/lib/datadog/appsec/contrib/rack/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/rails/ext.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/framework.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +12 -11
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/patcher.rb +14 -13
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +13 -13
- data/lib/datadog/appsec/contrib/rails/request.rb +4 -1
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +3 -3
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +2 -1
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +21 -19
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +22 -15
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +12 -12
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
- data/lib/datadog/appsec/event.rb +10 -14
- data/lib/datadog/appsec/extensions.rb +43 -23
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -3
- data/lib/datadog/appsec/processor.rb +51 -21
- data/lib/datadog/appsec/rate_limiter.rb +1 -1
- data/lib/datadog/appsec/reactive/address_hash.rb +1 -1
- data/lib/datadog/appsec/reactive/engine.rb +3 -3
- data/lib/datadog/appsec/reactive/operation.rb +5 -5
- data/lib/datadog/appsec/reactive/subscriber.rb +1 -1
- data/lib/datadog/appsec/response.rb +63 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +201 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +87 -0
- data/lib/datadog/appsec/utils/http.rb +9 -0
- data/lib/datadog/appsec/utils.rb +7 -0
- data/lib/datadog/appsec.rb +6 -6
- data/lib/datadog/ci/configuration/components.rb +1 -1
- data/lib/datadog/ci/configuration/settings.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -4
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
- data/lib/datadog/ci/contrib/rspec/integration.rb +4 -4
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
- data/lib/datadog/ci/ext/environment.rb +78 -20
- data/lib/datadog/ci/extensions.rb +4 -4
- data/lib/datadog/ci/flush.rb +2 -2
- data/lib/datadog/ci/test.rb +3 -3
- data/lib/datadog/ci.rb +6 -6
- data/lib/datadog/core/buffer/cruby.rb +1 -1
- data/lib/datadog/core/buffer/thread_safe.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -11
- data/lib/datadog/core/configuration/base.rb +14 -2
- data/lib/datadog/core/configuration/components.rb +103 -52
- data/lib/datadog/core/configuration/ext.rb +26 -0
- data/lib/datadog/core/configuration/option_definition.rb +12 -3
- data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +78 -250
- data/lib/datadog/core/configuration.rb +9 -6
- data/lib/datadog/core/diagnostics/environment_logger.rb +10 -5
- data/lib/datadog/core/diagnostics/health.rb +5 -23
- data/lib/datadog/core/environment/cgroup.rb +1 -1
- data/lib/datadog/core/environment/container.rb +1 -1
- data/lib/datadog/core/environment/ext.rb +1 -1
- data/lib/datadog/core/environment/identity.rb +2 -2
- data/lib/datadog/core/environment/platform.rb +40 -0
- data/lib/datadog/core/environment/socket.rb +1 -1
- data/lib/datadog/core/environment/variable_helpers.rb +58 -10
- data/lib/datadog/core/error.rb +1 -1
- data/lib/datadog/core/extensions.rb +1 -1
- data/lib/datadog/core/header_collection.rb +41 -0
- data/lib/datadog/core/metrics/client.rb +10 -9
- data/lib/datadog/core/metrics/ext.rb +0 -2
- data/lib/datadog/core/metrics/options.rb +3 -3
- data/lib/datadog/core/runtime/ext.rb +1 -1
- data/lib/datadog/core/runtime/metrics.rb +6 -6
- data/lib/datadog/core/telemetry/client.rb +79 -0
- data/lib/datadog/core/telemetry/collector.rb +233 -0
- data/lib/datadog/core/telemetry/emitter.rb +48 -0
- data/lib/datadog/core/telemetry/event.rb +71 -0
- data/lib/datadog/core/telemetry/ext.rb +11 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +37 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +113 -0
- data/lib/datadog/core/telemetry/http/env.rb +20 -0
- data/lib/datadog/core/telemetry/http/ext.rb +20 -0
- data/lib/datadog/core/telemetry/http/response.rb +68 -0
- data/lib/datadog/core/telemetry/http/transport.rb +53 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +52 -0
- data/lib/datadog/core/telemetry/v1/application.rb +86 -0
- data/lib/datadog/core/telemetry/v1/configuration.rb +25 -0
- data/lib/datadog/core/telemetry/v1/dependency.rb +36 -0
- data/lib/datadog/core/telemetry/v1/host.rb +51 -0
- data/lib/datadog/core/telemetry/v1/integration.rb +58 -0
- data/lib/datadog/core/telemetry/v1/product.rb +28 -0
- data/lib/datadog/core/telemetry/v1/telemetry_request.rb +100 -0
- data/lib/datadog/core/utils/compression.rb +5 -1
- data/lib/datadog/core/utils/object_set.rb +1 -1
- data/lib/datadog/core/utils/sequence.rb +5 -0
- data/lib/datadog/core/utils/string_table.rb +1 -1
- data/lib/datadog/core/utils/time.rb +3 -3
- data/lib/datadog/core/utils.rb +1 -22
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
- data/lib/datadog/core/workers/async.rb +1 -3
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
- data/lib/datadog/core.rb +22 -56
- data/lib/datadog/kit/appsec/events.rb +75 -0
- data/lib/datadog/kit/enable_core_dumps.rb +1 -0
- data/lib/datadog/kit/identity.rb +8 -7
- data/lib/datadog/kit.rb +1 -1
- data/lib/datadog/opentelemetry/api/context.rb +187 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +15 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +38 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +27 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +91 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +92 -0
- data/lib/datadog/opentelemetry.rb +48 -0
- data/lib/datadog/opentracer/distributed_headers.rb +7 -9
- data/lib/datadog/opentracer/rack_propagator.rb +10 -9
- data/lib/datadog/opentracer/span.rb +1 -1
- data/lib/datadog/opentracer/text_map_propagator.rb +13 -12
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +26 -3
- data/lib/datadog/opentracer/tracer.rb +23 -21
- data/lib/datadog/opentracer.rb +16 -16
- data/lib/datadog/profiling/buffer.rb +3 -3
- data/lib/datadog/profiling/collectors/code_provenance.rb +1 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +43 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +91 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +14 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +68 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +15 -8
- data/lib/datadog/profiling/collectors/stack.rb +3 -6
- data/lib/datadog/profiling/encoding/profile.rb +8 -12
- data/lib/datadog/profiling/events/stack.rb +1 -1
- data/lib/datadog/profiling/exporter.rb +69 -9
- data/lib/datadog/profiling/ext/forking.rb +41 -42
- data/lib/datadog/profiling/ext.rb +3 -15
- data/lib/datadog/profiling/flush.rb +25 -56
- data/lib/datadog/profiling/http_transport.rb +132 -0
- data/lib/datadog/profiling/old_recorder.rb +109 -0
- data/lib/datadog/profiling/pprof/builder.rb +4 -4
- data/lib/datadog/profiling/pprof/converter.rb +1 -1
- data/lib/datadog/profiling/pprof/message_set.rb +1 -1
- data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
- data/lib/datadog/profiling/pprof/string_table.rb +1 -1
- data/lib/datadog/profiling/pprof/template.rb +5 -5
- data/lib/datadog/profiling/preload.rb +1 -1
- data/lib/datadog/profiling/profiler.rb +7 -0
- data/lib/datadog/profiling/scheduler.rb +28 -49
- data/lib/datadog/profiling/stack_recorder.rb +50 -4
- data/lib/datadog/profiling/tag_builder.rb +6 -1
- data/lib/datadog/profiling/tasks/setup.rb +2 -9
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
- data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
- data/lib/datadog/profiling.rb +24 -21
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +5 -5
- data/lib/datadog/tracing/client_ip.rb +164 -0
- data/lib/datadog/tracing/configuration/ext.rb +47 -4
- data/lib/datadog/tracing/configuration/settings.rb +433 -0
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +18 -2
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +10 -6
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -7
- data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
- data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/analytics.rb +1 -1
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -4
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/aws/services.rb +0 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/configurable.rb +2 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +8 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -2
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +7 -4
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +9 -7
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -3
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -4
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -7
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/extensions.rb +5 -3
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -8
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -7
- data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +10 -4
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -5
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -17
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +7 -4
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +27 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +43 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +22 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +39 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +38 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -10
- data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -9
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -3
- data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -9
- data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -2
- data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -3
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -4
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +18 -3
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -5
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/patcher.rb +16 -4
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +50 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +168 -0
- data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/presto/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +43 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +47 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +3 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -3
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -3
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +129 -61
- data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +4 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +18 -22
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -7
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -3
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -26
- data/lib/datadog/tracing/contrib/redis/integration.rb +37 -4
- data/lib/datadog/tracing/contrib/redis/patcher.rb +57 -13
- data/lib/datadog/tracing/contrib/redis/quantize.rb +12 -9
- data/lib/datadog/tracing/contrib/redis/tags.rb +12 -10
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +72 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +5 -4
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +9 -3
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +7 -6
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -2
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +3 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +9 -5
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +10 -6
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -25
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -3
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +7 -7
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -88
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -16
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +4 -3
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
- data/lib/datadog/tracing/contrib/stripe/configuration/settings.rb +33 -0
- data/lib/datadog/tracing/contrib/stripe/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/stripe/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/stripe/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -5
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -10
- data/lib/datadog/tracing/contrib.rb +50 -47
- data/lib/datadog/tracing/correlation.rb +1 -1
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -6
- data/lib/datadog/tracing/diagnostics/health.rb +40 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +66 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +66 -0
- data/lib/datadog/tracing/distributed/datadog.rb +153 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +85 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +30 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +19 -15
- data/lib/datadog/tracing/distributed/helpers.rb +40 -4
- data/lib/datadog/tracing/distributed/none.rb +19 -0
- data/lib/datadog/tracing/distributed/propagation.rb +127 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +378 -0
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/flush.rb +57 -35
- data/lib/datadog/tracing/metadata/analytics.rb +2 -2
- data/lib/datadog/tracing/metadata/errors.rb +2 -2
- data/lib/datadog/tracing/metadata/ext.rb +28 -1
- data/lib/datadog/tracing/metadata/tagging.rb +23 -2
- data/lib/datadog/tracing/metadata.rb +3 -3
- data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
- data/lib/datadog/tracing/pipeline.rb +3 -3
- data/lib/datadog/tracing/propagation/http.rb +3 -98
- data/lib/datadog/tracing/runtime/metrics.rb +1 -1
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/ext.rb +31 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +62 -9
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -11
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -8
- data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -1
- data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -10
- data/lib/datadog/tracing/sampling/rule.rb +3 -3
- data/lib/datadog/tracing/sampling/rule_sampler.rb +8 -7
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +89 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +75 -0
- data/lib/datadog/tracing/span.rb +24 -20
- data/lib/datadog/tracing/span_operation.rb +13 -13
- data/lib/datadog/tracing/sync_writer.rb +5 -5
- data/lib/datadog/tracing/trace_digest.rb +88 -2
- data/lib/datadog/tracing/trace_operation.rb +60 -15
- data/lib/datadog/tracing/trace_segment.rb +13 -8
- data/lib/datadog/tracing/tracer.rb +49 -21
- data/lib/datadog/tracing/utils.rb +50 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
- data/lib/datadog/tracing/workers.rb +3 -3
- data/lib/datadog/tracing/writer.rb +12 -5
- data/lib/datadog/tracing.rb +8 -8
- data/lib/ddtrace/auto_instrument.rb +9 -2
- data/lib/ddtrace/transport/ext.rb +7 -1
- data/lib/ddtrace/transport/http/adapters/net.rb +3 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
- data/lib/ddtrace/transport/http/api/map.rb +1 -1
- data/lib/ddtrace/transport/http/api.rb +4 -4
- data/lib/ddtrace/transport/http/builder.rb +5 -5
- data/lib/ddtrace/transport/http/client.rb +2 -2
- data/lib/ddtrace/transport/http/response.rb +1 -1
- data/lib/ddtrace/transport/http/statistics.rb +1 -1
- data/lib/ddtrace/transport/http/traces.rb +5 -5
- data/lib/ddtrace/transport/http.rb +12 -9
- data/lib/ddtrace/transport/io/client.rb +2 -2
- data/lib/ddtrace/transport/io/response.rb +1 -1
- data/lib/ddtrace/transport/io/traces.rb +3 -3
- data/lib/ddtrace/transport/io.rb +3 -3
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/trace_formatter.rb +14 -10
- data/lib/ddtrace/transport/traces.rb +8 -6
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace.rb +6 -6
- metadata +127 -48
- data/.editorconfig +0 -22
- data/.gitignore +0 -58
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -68
- data/docs/0.x-trace.png +0 -0
- data/docs/1.0-trace.png +0 -0
- data/docs/AutoInstrumentation.md +0 -36
- data/docs/Deprecation.md +0 -8
- data/docs/DevelopmentGuide.md +0 -259
- data/docs/GettingStarted.md +0 -2688
- data/docs/ProfilingDevelopment.md +0 -110
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
- data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +0 -13
- data/lib/datadog/profiling/recorder.rb +0 -117
- data/lib/datadog/profiling/transport/client.rb +0 -16
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -107
- data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
- data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
- data/lib/datadog/profiling/transport/http/api.rb +0 -45
- data/lib/datadog/profiling/transport/http/builder.rb +0 -30
- data/lib/datadog/profiling/transport/http/client.rb +0 -35
- data/lib/datadog/profiling/transport/http/response.rb +0 -23
- data/lib/datadog/profiling/transport/http.rb +0 -112
- data/lib/datadog/profiling/transport/io/client.rb +0 -29
- data/lib/datadog/profiling/transport/io/response.rb +0 -18
- data/lib/datadog/profiling/transport/io.rb +0 -32
- data/lib/datadog/profiling/transport/parcel.rb +0 -19
- data/lib/datadog/profiling/transport/request.rb +0 -17
- data/lib/datadog/profiling/transport/response.rb +0 -10
- data/lib/datadog/tracing/distributed/headers/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +0 -67
- data/lib/datadog/tracing/distributed/headers/datadog.rb +0 -52
- data/lib/datadog/tracing/distributed/parser.rb +0 -70
- data/lib/datadog/tracing/propagation/grpc.rb +0 -88
|
@@ -1,42 +1,41 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core/utils/time'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative '../core/worker'
|
|
6
|
+
require_relative '../core/workers/polling'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Profiling
|
|
10
|
-
# Periodically (every DEFAULT_INTERVAL_SECONDS) takes
|
|
11
|
-
#
|
|
10
|
+
# Periodically (every DEFAULT_INTERVAL_SECONDS) takes a profile from the `Exporter` and reports it using the
|
|
11
|
+
# configured transport. Runs on its own background thread.
|
|
12
12
|
class Scheduler < Core::Worker
|
|
13
13
|
include Core::Workers::Polling
|
|
14
14
|
|
|
15
15
|
DEFAULT_INTERVAL_SECONDS = 60
|
|
16
16
|
MINIMUM_INTERVAL_SECONDS = 0
|
|
17
17
|
|
|
18
|
-
# Profiles with duration less than this will not be reported
|
|
19
|
-
PROFILE_DURATION_THRESHOLD_SECONDS = 1
|
|
20
|
-
|
|
21
18
|
# We sleep for at most this duration seconds before reporting data to avoid multi-process applications all
|
|
22
19
|
# reporting profiles at the exact same time
|
|
23
20
|
DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS = 3
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
private
|
|
26
23
|
|
|
27
24
|
attr_reader \
|
|
28
|
-
:
|
|
29
|
-
:
|
|
25
|
+
:exporter,
|
|
26
|
+
:transport
|
|
27
|
+
|
|
28
|
+
public
|
|
30
29
|
|
|
31
30
|
def initialize(
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
exporter:,
|
|
32
|
+
transport:,
|
|
34
33
|
fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default
|
|
35
34
|
interval: DEFAULT_INTERVAL_SECONDS,
|
|
36
35
|
enabled: true
|
|
37
36
|
)
|
|
38
|
-
@
|
|
39
|
-
@
|
|
37
|
+
@exporter = exporter
|
|
38
|
+
@transport = transport
|
|
40
39
|
|
|
41
40
|
# Workers::Async::Thread settings
|
|
42
41
|
self.fork_policy = fork_policy
|
|
@@ -67,24 +66,21 @@ module Datadog
|
|
|
67
66
|
end
|
|
68
67
|
end
|
|
69
68
|
|
|
70
|
-
def after_fork
|
|
71
|
-
# Clear recorder's buffers by flushing events.
|
|
72
|
-
# Objects from parent process will copy-on-write,
|
|
73
|
-
# and we don't want to send events for the wrong process.
|
|
74
|
-
recorder.flush
|
|
75
|
-
end
|
|
76
|
-
|
|
77
69
|
# Configure Workers::IntervalLoop to not report immediately when scheduler starts
|
|
78
70
|
#
|
|
79
71
|
# When a scheduler gets created (or reset), we don't want it to immediately try to flush; we want it to wait for
|
|
80
72
|
# the loop wait time first. This avoids an issue where the scheduler reported a mostly-empty profile if the
|
|
81
|
-
# application just started but this thread took a bit longer so there's already
|
|
73
|
+
# application just started but this thread took a bit longer so there's already profiling data in the exporter.
|
|
82
74
|
def loop_wait_before_first_iteration?
|
|
83
75
|
true
|
|
84
76
|
end
|
|
85
77
|
|
|
86
78
|
def work_pending?
|
|
87
|
-
|
|
79
|
+
exporter.can_flush?
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def reset_after_fork
|
|
83
|
+
exporter.reset_after_fork
|
|
88
84
|
end
|
|
89
85
|
|
|
90
86
|
private
|
|
@@ -100,16 +96,10 @@ module Datadog
|
|
|
100
96
|
end
|
|
101
97
|
|
|
102
98
|
def flush_events
|
|
103
|
-
#
|
|
104
|
-
flush =
|
|
99
|
+
# Collect data to be exported
|
|
100
|
+
flush = exporter.flush
|
|
105
101
|
|
|
106
|
-
|
|
107
|
-
Datadog.logger.debug do
|
|
108
|
-
"Skipped exporting profiling events as profile duration is below minimum (#{flush.event_count} events skipped)"
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
return flush
|
|
112
|
-
end
|
|
102
|
+
return false unless flush
|
|
113
103
|
|
|
114
104
|
# Sleep for a bit to cause misalignment between profilers in multi-process applications
|
|
115
105
|
#
|
|
@@ -127,24 +117,13 @@ module Datadog
|
|
|
127
117
|
sleep(jitter_seconds)
|
|
128
118
|
end
|
|
129
119
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
exporter.export(flush)
|
|
135
|
-
rescue StandardError => e
|
|
136
|
-
Datadog.logger.error(
|
|
137
|
-
"Unable to export #{flush.event_count} profiling events. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
138
|
-
)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
120
|
+
begin
|
|
121
|
+
transport.export(flush)
|
|
122
|
+
rescue StandardError => e
|
|
123
|
+
Datadog.logger.error("Unable to report profile. Cause: #{e} Location: #{Array(e.backtrace).first}")
|
|
141
124
|
end
|
|
142
125
|
|
|
143
|
-
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def duration_below_threshold?(flush)
|
|
147
|
-
(flush.finish - flush.start) < PROFILE_DURATION_THRESHOLD_SECONDS
|
|
126
|
+
true
|
|
148
127
|
end
|
|
149
128
|
end
|
|
150
129
|
end
|
|
@@ -2,11 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
5
|
-
#
|
|
5
|
+
# Stores stack samples in a native libdatadog data structure and expose Ruby-level serialization APIs
|
|
6
|
+
# Note that `record_sample` is only accessible from native code.
|
|
6
7
|
# Methods prefixed with _native_ are implemented in `stack_recorder.c`
|
|
7
8
|
class StackRecorder
|
|
9
|
+
def initialize
|
|
10
|
+
# This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
|
|
11
|
+
# It prevents multiple Ruby threads calling serialize at the same time -- something like
|
|
12
|
+
# `10.times { Thread.new { stack_recorder.serialize } }`.
|
|
13
|
+
# This isn't something we expect to happen normally, but because it would break the assumptions of the
|
|
14
|
+
# C-level mutexes (that there is a single serializer thread), we add it here as an extra safeguard against it
|
|
15
|
+
# accidentally happening.
|
|
16
|
+
@no_concurrent_synchronize_mutex = Mutex.new
|
|
17
|
+
end
|
|
18
|
+
|
|
8
19
|
def serialize
|
|
9
|
-
status, result = self.class._native_serialize(self)
|
|
20
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
10
21
|
|
|
11
22
|
if status == :ok
|
|
12
23
|
start, finish, encoded_pprof = result
|
|
@@ -23,11 +34,46 @@ module Datadog
|
|
|
23
34
|
end
|
|
24
35
|
end
|
|
25
36
|
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
def serialize!
|
|
38
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
39
|
+
|
|
40
|
+
if status == :ok
|
|
41
|
+
_start, _finish, encoded_pprof = result
|
|
42
|
+
|
|
43
|
+
encoded_pprof
|
|
44
|
+
else
|
|
45
|
+
error_message = result
|
|
46
|
+
|
|
47
|
+
raise("Failed to serialize profiling data: #{error_message}")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def clear
|
|
52
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_clear(self) }
|
|
53
|
+
|
|
54
|
+
if status == :ok
|
|
55
|
+
finish_timestamp = result
|
|
56
|
+
|
|
57
|
+
Datadog.logger.debug { "Cleared profile at #{finish_timestamp}" }
|
|
58
|
+
|
|
59
|
+
finish_timestamp
|
|
60
|
+
else
|
|
61
|
+
error_message = result
|
|
62
|
+
|
|
63
|
+
Datadog.logger.error("Failed to clear profiling data: #{error_message}")
|
|
64
|
+
|
|
65
|
+
nil
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Used only for Ruby 2.2 which doesn't have the native `rb_time_timespec_new` API; called from native code
|
|
28
70
|
def self.ruby_time_from(timespec_seconds, timespec_nanoseconds)
|
|
29
71
|
Time.at(0).utc + timespec_seconds + (timespec_nanoseconds.to_r / 1_000_000_000)
|
|
30
72
|
end
|
|
73
|
+
|
|
74
|
+
def reset_after_fork
|
|
75
|
+
self.class._native_reset_after_fork(self)
|
|
76
|
+
end
|
|
31
77
|
end
|
|
32
78
|
end
|
|
33
79
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
+
require_relative '../core/utils'
|
|
4
|
+
|
|
3
5
|
module Datadog
|
|
4
6
|
module Profiling
|
|
5
7
|
# Builds a hash of default plus user tags to be included in a profile
|
|
@@ -41,7 +43,10 @@ module Datadog
|
|
|
41
43
|
tags[FORM_FIELD_TAG_SERVICE] = service if service
|
|
42
44
|
tags[FORM_FIELD_TAG_VERSION] = version if version
|
|
43
45
|
|
|
44
|
-
|
|
46
|
+
# Make sure everything is an utf-8 string, to avoid encoding issues in native code/libddprof/further downstream
|
|
47
|
+
user_tags.merge(tags).map do |key, value|
|
|
48
|
+
[Datadog::Core::Utils.utf8_encode(key), Datadog::Core::Utils.utf8_encode(value)]
|
|
49
|
+
end.to_h
|
|
45
50
|
end
|
|
46
51
|
end
|
|
47
52
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
require_relative '../../core/utils/only_once'
|
|
4
|
+
require_relative '../ext/forking'
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module Profiling
|
|
@@ -55,13 +55,6 @@ module Datadog
|
|
|
55
55
|
if Process.respond_to?(:at_fork)
|
|
56
56
|
Process.at_fork(:child) do
|
|
57
57
|
begin
|
|
58
|
-
# When Ruby forks, clock IDs for each of the threads
|
|
59
|
-
# will change. We can only update these IDs from the
|
|
60
|
-
# execution context of the thread that owns it.
|
|
61
|
-
# This hook will update the IDs for the main thread
|
|
62
|
-
# after a fork occurs.
|
|
63
|
-
Thread.current.send(:update_native_ids) if Thread.current.respond_to?(:update_native_ids, true)
|
|
64
|
-
|
|
65
58
|
# Restart profiler, if enabled
|
|
66
59
|
Profiling.start_if_enabled
|
|
67
60
|
rescue StandardError => e
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'core'
|
|
4
|
+
require_relative 'core/environment/variable_helpers'
|
|
5
|
+
require_relative 'core/utils/only_once'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Contains profiler for generating stack profiles, etc.
|
|
9
|
-
module Profiling
|
|
9
|
+
module Profiling
|
|
10
10
|
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
11
11
|
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
12
12
|
|
|
@@ -132,7 +132,7 @@ module Datadog
|
|
|
132
132
|
|
|
133
133
|
private_class_method def self.try_loading_native_library
|
|
134
134
|
begin
|
|
135
|
-
|
|
135
|
+
require_relative 'profiling/load_native_extension'
|
|
136
136
|
|
|
137
137
|
success =
|
|
138
138
|
defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
|
|
@@ -145,22 +145,25 @@ module Datadog
|
|
|
145
145
|
private_class_method def self.load_profiling
|
|
146
146
|
return false unless supported?
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
148
|
+
require_relative 'profiling/ext/forking'
|
|
149
|
+
require_relative 'profiling/collectors/code_provenance'
|
|
150
|
+
require_relative 'profiling/collectors/cpu_and_wall_time'
|
|
151
|
+
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
152
|
+
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
153
|
+
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
154
|
+
require_relative 'profiling/collectors/old_stack'
|
|
155
|
+
require_relative 'profiling/collectors/stack'
|
|
156
|
+
require_relative 'profiling/stack_recorder'
|
|
157
|
+
require_relative 'profiling/old_recorder'
|
|
158
|
+
require_relative 'profiling/exporter'
|
|
159
|
+
require_relative 'profiling/scheduler'
|
|
160
|
+
require_relative 'profiling/tasks/setup'
|
|
161
|
+
require_relative 'profiling/profiler'
|
|
162
|
+
require_relative 'profiling/native_extension'
|
|
163
|
+
require_relative 'profiling/trace_identifiers/helper'
|
|
164
|
+
require_relative 'profiling/pprof/pprof_pb'
|
|
165
|
+
require_relative 'profiling/tag_builder'
|
|
166
|
+
require_relative 'profiling/http_transport'
|
|
164
167
|
|
|
165
168
|
true
|
|
166
169
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
require_relative '../core'
|
|
4
|
+
require_relative '../core/environment/ext'
|
|
5
|
+
require_relative '../core/buffer/thread_safe'
|
|
6
|
+
require_relative '../core/buffer/cruby'
|
|
7
|
+
require_relative '../core/diagnostics/health'
|
|
8
8
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/configuration'
|
|
4
|
+
require_relative 'metadata/ext'
|
|
5
|
+
require_relative 'span'
|
|
6
|
+
|
|
7
|
+
require 'ipaddr'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Tracing
|
|
11
|
+
# Common functions for supporting the `http.client_ip` span attribute.
|
|
12
|
+
module ClientIp
|
|
13
|
+
DEFAULT_IP_HEADERS_NAMES = %w[
|
|
14
|
+
x-forwarded-for
|
|
15
|
+
x-real-ip
|
|
16
|
+
x-client-ip
|
|
17
|
+
x-forwarded
|
|
18
|
+
x-cluster-client-ip
|
|
19
|
+
forwarded-for
|
|
20
|
+
forwarded
|
|
21
|
+
via
|
|
22
|
+
true-client-ip
|
|
23
|
+
].freeze
|
|
24
|
+
|
|
25
|
+
TAG_MULTIPLE_IP_HEADERS = '_dd.multiple-ip-headers'.freeze
|
|
26
|
+
|
|
27
|
+
# Sets the `http.client_ip` tag on the given span.
|
|
28
|
+
#
|
|
29
|
+
# This function respects the user's settings: if they disable the client IP tagging,
|
|
30
|
+
# or provide a different IP header name.
|
|
31
|
+
#
|
|
32
|
+
# If multiple IP headers are present in the request, this function will instead set
|
|
33
|
+
# the `_dd.multiple-ip-headers` tag with the names of the present headers,
|
|
34
|
+
# and **NOT** set the `http.client_ip` tag.
|
|
35
|
+
#
|
|
36
|
+
# @param [Span] span The span that's associated with the request.
|
|
37
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
38
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
39
|
+
def self.set_client_ip_tag(span, headers: nil, remote_ip: nil)
|
|
40
|
+
return unless configuration.enabled
|
|
41
|
+
|
|
42
|
+
set_client_ip_tag!(span, headers: headers, remote_ip: remote_ip)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Forcefully sets the `http.client_ip` tag on the given span.
|
|
46
|
+
#
|
|
47
|
+
# This function ignores the user's `enabled` setting.
|
|
48
|
+
#
|
|
49
|
+
# @param [Span] span The span that's associated with the request.
|
|
50
|
+
# @param [HeaderCollection, #get, nil] headers A collection with the request headers.
|
|
51
|
+
# @param [String, nil] remote_ip The remote IP the request associated with the span is sent to.
|
|
52
|
+
def self.set_client_ip_tag!(span, headers: nil, remote_ip: nil)
|
|
53
|
+
result = raw_ip_from_request(headers, remote_ip)
|
|
54
|
+
|
|
55
|
+
if result.raw_ip
|
|
56
|
+
ip = strip_decorations(result.raw_ip)
|
|
57
|
+
return unless valid_ip?(ip)
|
|
58
|
+
|
|
59
|
+
span.set_tag(Tracing::Metadata::Ext::HTTP::TAG_CLIENT_IP, ip)
|
|
60
|
+
elsif result.multiple_ip_headers
|
|
61
|
+
span.set_tag(TAG_MULTIPLE_IP_HEADERS, result.multiple_ip_headers.keys.join(','))
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
IpExtractionResult = Struct.new(:raw_ip, :multiple_ip_headers)
|
|
66
|
+
|
|
67
|
+
# Returns a result struct that holds the raw client IP associated with the request if it was
|
|
68
|
+
# retrieved successfully.
|
|
69
|
+
#
|
|
70
|
+
# The client IP is looked up by the following logic:
|
|
71
|
+
# * If the user has configured a header name, return that header's value.
|
|
72
|
+
# * If exactly one of the known IP headers is present, return that header's value.
|
|
73
|
+
# * If none of the known IP headers are present, return the remote IP from the request.
|
|
74
|
+
#
|
|
75
|
+
# If more than one of the known IP headers is present, the result will have a `multiple_ip_headers`
|
|
76
|
+
# field with the name of the present IP headers.
|
|
77
|
+
#
|
|
78
|
+
# @param [Datadog::Core::HeaderCollection, #get, nil] headers The request headers
|
|
79
|
+
# @param [String] remote_ip The remote IP of the request.
|
|
80
|
+
# @return [IpExtractionResult] A struct that holds the unprocessed IP value,
|
|
81
|
+
# or `nil` if it wasn't found. Additionally, the `multiple_ip_headers` fields will hold the
|
|
82
|
+
# name of known IP headers present in the request if more than one of these were found.
|
|
83
|
+
def self.raw_ip_from_request(headers, remote_ip)
|
|
84
|
+
return IpExtractionResult.new(headers && headers.get(configuration.header_name), nil) if configuration.header_name
|
|
85
|
+
|
|
86
|
+
headers_present = ip_headers(headers)
|
|
87
|
+
|
|
88
|
+
case headers_present.size
|
|
89
|
+
when 0
|
|
90
|
+
IpExtractionResult.new(remote_ip, nil)
|
|
91
|
+
when 1
|
|
92
|
+
IpExtractionResult.new(headers_present.values.first, nil)
|
|
93
|
+
else
|
|
94
|
+
IpExtractionResult.new(nil, headers_present)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Removes any port notations or zone specifiers from the IP address without
|
|
99
|
+
# verifying its validity.
|
|
100
|
+
def self.strip_decorations(address)
|
|
101
|
+
return strip_ipv4_port(address) if likely_ipv4?(address)
|
|
102
|
+
|
|
103
|
+
address = strip_ipv6_port(address)
|
|
104
|
+
|
|
105
|
+
strip_zone_specifier(address)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def self.strip_zone_specifier(ipv6)
|
|
109
|
+
ipv6.gsub(/%.*/, '')
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def self.strip_ipv4_port(ip)
|
|
113
|
+
ip.gsub(/:\d+\z/, '')
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def self.strip_ipv6_port(ip)
|
|
117
|
+
if /\[(.*)\](?::\d+)?/ =~ ip
|
|
118
|
+
Regexp.last_match(1)
|
|
119
|
+
else
|
|
120
|
+
ip
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Returns whether the given value is more likely to be an IPv4 than an IPv6 address.
|
|
125
|
+
#
|
|
126
|
+
# This is done by checking if a dot (`'.'`) character appears before a colon (`':'`) in the value.
|
|
127
|
+
# The rationale is that in valid IPv6 addresses, colons will always preced dots,
|
|
128
|
+
# and in valid IPv4 addresses dots will always preced colons.
|
|
129
|
+
def self.likely_ipv4?(value)
|
|
130
|
+
dot_index = value.index('.') || value.size
|
|
131
|
+
colon_index = value.index(':') || value.size
|
|
132
|
+
|
|
133
|
+
dot_index < colon_index
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Determines whether the given string is a valid IPv4 or IPv6 address.
|
|
137
|
+
def self.valid_ip?(ip)
|
|
138
|
+
# Client IPs should not have subnet masks even though IPAddr can parse them.
|
|
139
|
+
return false if ip.include?('/')
|
|
140
|
+
|
|
141
|
+
begin
|
|
142
|
+
IPAddr.new(ip)
|
|
143
|
+
|
|
144
|
+
true
|
|
145
|
+
rescue IPAddr::Error
|
|
146
|
+
false
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def self.ip_headers(headers)
|
|
151
|
+
return {} unless headers
|
|
152
|
+
|
|
153
|
+
DEFAULT_IP_HEADERS_NAMES.each_with_object({}) do |name, result|
|
|
154
|
+
value = headers.get(name)
|
|
155
|
+
result[name] = value unless value.nil?
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def self.configuration
|
|
160
|
+
Datadog.configuration.tracing.client_ip
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Tracing
|
|
5
5
|
module Configuration
|
|
6
|
+
# Constants for configuration settings
|
|
7
|
+
# e.g. Env vars, default values, enums, etc...
|
|
6
8
|
module Ext
|
|
9
|
+
ENV_ENABLED = 'DD_TRACE_ENABLED'.freeze
|
|
10
|
+
|
|
7
11
|
# @public_api
|
|
8
12
|
module Analytics
|
|
9
13
|
ENV_TRACE_ANALYTICS_ENABLED = 'DD_TRACE_ANALYTICS_ENABLED'.freeze
|
|
@@ -16,11 +20,38 @@ module Datadog
|
|
|
16
20
|
|
|
17
21
|
# @public_api
|
|
18
22
|
module Distributed
|
|
23
|
+
# Custom Datadog format
|
|
19
24
|
PROPAGATION_STYLE_DATADOG = 'Datadog'.freeze
|
|
25
|
+
|
|
26
|
+
PROPAGATION_STYLE_B3_MULTI_HEADER = 'b3multi'.freeze
|
|
27
|
+
# @deprecated Use `b3multi` instead.
|
|
20
28
|
PROPAGATION_STYLE_B3 = 'B3'.freeze
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
29
|
+
|
|
30
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER = 'b3'.freeze
|
|
31
|
+
# @deprecated Use `b3` instead.
|
|
32
|
+
PROPAGATION_STYLE_B3_SINGLE_HEADER_OLD = 'B3 single header'.freeze
|
|
33
|
+
|
|
34
|
+
# W3C Trace Context
|
|
35
|
+
PROPAGATION_STYLE_TRACE_CONTEXT = 'tracecontext'.freeze
|
|
36
|
+
|
|
37
|
+
# Sets both extract and inject propagation style tho the provided value.
|
|
38
|
+
# Has lower precedence than `DD_TRACE_PROPAGATION_STYLE_INJECT` or
|
|
39
|
+
# `DD_TRACE_PROPAGATION_STYLE_EXTRACT`.
|
|
40
|
+
ENV_PROPAGATION_STYLE = 'DD_TRACE_PROPAGATION_STYLE'.freeze
|
|
41
|
+
|
|
42
|
+
ENV_PROPAGATION_STYLE_INJECT = 'DD_TRACE_PROPAGATION_STYLE_INJECT'.freeze
|
|
43
|
+
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_INJECT` instead.
|
|
44
|
+
ENV_PROPAGATION_STYLE_INJECT_OLD = 'DD_PROPAGATION_STYLE_INJECT'.freeze
|
|
45
|
+
|
|
46
|
+
ENV_PROPAGATION_STYLE_EXTRACT = 'DD_TRACE_PROPAGATION_STYLE_EXTRACT'.freeze
|
|
47
|
+
# @deprecated Use `DD_TRACE_PROPAGATION_STYLE_EXTRACT` instead.
|
|
48
|
+
ENV_PROPAGATION_STYLE_EXTRACT_OLD = 'DD_PROPAGATION_STYLE_EXTRACT'.freeze
|
|
49
|
+
|
|
50
|
+
# A no-op propagator. Compatible with OpenTelemetry's `none` propagator.
|
|
51
|
+
# @see https://opentelemetry.io/docs/concepts/sdk-configuration/general-sdk-configuration/#get_otel__propagators
|
|
52
|
+
PROPAGATION_STYLE_NONE = 'none'.freeze
|
|
53
|
+
|
|
54
|
+
ENV_X_DATADOG_TAGS_MAX_LENGTH = 'DD_TRACE_X_DATADOG_TAGS_MAX_LENGTH'.freeze
|
|
24
55
|
end
|
|
25
56
|
|
|
26
57
|
# @public_api
|
|
@@ -32,6 +63,12 @@ module Datadog
|
|
|
32
63
|
module Sampling
|
|
33
64
|
ENV_SAMPLE_RATE = 'DD_TRACE_SAMPLE_RATE'.freeze
|
|
34
65
|
ENV_RATE_LIMIT = 'DD_TRACE_RATE_LIMIT'.freeze
|
|
66
|
+
|
|
67
|
+
# @public_api
|
|
68
|
+
module Span
|
|
69
|
+
ENV_SPAN_SAMPLING_RULES = 'DD_SPAN_SAMPLING_RULES'.freeze
|
|
70
|
+
ENV_SPAN_SAMPLING_RULES_FILE = 'DD_SPAN_SAMPLING_RULES_FILE'.freeze
|
|
71
|
+
end
|
|
35
72
|
end
|
|
36
73
|
|
|
37
74
|
# @public_api
|
|
@@ -41,10 +78,16 @@ module Datadog
|
|
|
41
78
|
|
|
42
79
|
# @public_api
|
|
43
80
|
module Transport
|
|
44
|
-
ENV_DEFAULT_HOST = 'DD_AGENT_HOST'.freeze
|
|
45
81
|
ENV_DEFAULT_PORT = 'DD_TRACE_AGENT_PORT'.freeze
|
|
46
82
|
ENV_DEFAULT_URL = 'DD_TRACE_AGENT_URL'.freeze
|
|
47
83
|
end
|
|
84
|
+
|
|
85
|
+
# @public_api
|
|
86
|
+
module ClientIp
|
|
87
|
+
ENV_ENABLED = 'DD_TRACE_CLIENT_IP_ENABLED'.freeze
|
|
88
|
+
ENV_DISABLED = 'DD_TRACE_CLIENT_IP_HEADER_DISABLED'.freeze # TODO: deprecated, remove later
|
|
89
|
+
ENV_HEADER_NAME = 'DD_TRACE_CLIENT_IP_HEADER'.freeze
|
|
90
|
+
end
|
|
48
91
|
end
|
|
49
92
|
end
|
|
50
93
|
end
|