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
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
require_relative 'trace/span'
|
|
5
|
+
require_relative '../../tracing/trace_operation'
|
|
6
|
+
|
|
7
|
+
module Datadog
|
|
8
|
+
module OpenTelemetry
|
|
9
|
+
module API
|
|
10
|
+
# The OpenTelemetry Context contains a key-value store that can be attached
|
|
11
|
+
# to a trace.
|
|
12
|
+
#
|
|
13
|
+
# It loosely matches our `TraceOperations#tags`, except for the following:
|
|
14
|
+
# * Context can store arbitrary objects as values. One example is for the key
|
|
15
|
+
# `Context::Key.new('current-span')`, which is associated with a `Span` object.
|
|
16
|
+
# In contrast, `TraceOperations#tags` only stores string values.
|
|
17
|
+
# * Context is how spans know who their parent span is. The parenting operation happens on every
|
|
18
|
+
# span created. Parenting is not directly tied to the active Fiber or Thread.
|
|
19
|
+
# * Context is immutable: changing a value creates a copy of Context.
|
|
20
|
+
# * Context is not bound to a specific trace: it can be reused an arbitrary number of times.
|
|
21
|
+
module Context
|
|
22
|
+
CURRENT_SPAN_KEY = ::OpenTelemetry::Trace.const_get(:CURRENT_SPAN_KEY)
|
|
23
|
+
private_constant :CURRENT_SPAN_KEY
|
|
24
|
+
|
|
25
|
+
def initialize(entries, trace: nil)
|
|
26
|
+
@trace = trace || ::Datadog::Tracing.send(:tracer).send(:start_trace)
|
|
27
|
+
@trace.otel_values.merge!(entries) if entries
|
|
28
|
+
@trace.otel_context ||= self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Because Context can be reused, we have to make sure we have
|
|
32
|
+
# a valid `TraceOperation` on every invocation.
|
|
33
|
+
def ensure_trace
|
|
34
|
+
return nil unless @trace
|
|
35
|
+
|
|
36
|
+
# The Context can be reused after the root span has finished.
|
|
37
|
+
@trace.send(:reset) if @trace.finished?
|
|
38
|
+
@trace
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns the corresponding value (or nil) for key
|
|
42
|
+
#
|
|
43
|
+
# @param [Key] key The lookup key
|
|
44
|
+
# @return [Object]
|
|
45
|
+
def value(key)
|
|
46
|
+
return nil unless @trace
|
|
47
|
+
|
|
48
|
+
@trace.otel_value(key)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
alias [] value
|
|
52
|
+
|
|
53
|
+
# Returns a new Context where entries contains the newly added key and value
|
|
54
|
+
#
|
|
55
|
+
# @param [Key] key The key to store this value under
|
|
56
|
+
# @param [Object] value Object to be stored under key
|
|
57
|
+
# @return [Context]
|
|
58
|
+
def set_value(key, value)
|
|
59
|
+
set_values(key => value)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Returns a new Context with the current context's entries merged with the
|
|
63
|
+
# new entries
|
|
64
|
+
#
|
|
65
|
+
# @param [Hash] values The values to be merged with the current context's
|
|
66
|
+
# entries.
|
|
67
|
+
# @param [Object] value Object to be stored under key
|
|
68
|
+
# @return [Context]
|
|
69
|
+
def set_values(values)
|
|
70
|
+
trace = nil
|
|
71
|
+
if (current_span = values[CURRENT_SPAN_KEY])
|
|
72
|
+
trace = current_span.datadog_trace
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
existing_values = @trace && @trace.otel_values || {}
|
|
76
|
+
|
|
77
|
+
::OpenTelemetry::Context.new(existing_values.merge(values), trace: trace)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# The Datadog {TraceOperation} associated with this {Context}.
|
|
81
|
+
def trace
|
|
82
|
+
@trace
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Singleton class methods for {Context}
|
|
86
|
+
module SingletonClass
|
|
87
|
+
# Returns current context, which is never nil
|
|
88
|
+
#
|
|
89
|
+
# @return [Context]
|
|
90
|
+
def current
|
|
91
|
+
trace = Tracing.active_trace
|
|
92
|
+
return ::OpenTelemetry::Context::ROOT unless trace
|
|
93
|
+
|
|
94
|
+
trace.otel_context ||= ::OpenTelemetry::Context.from_trace(trace)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Associates a Context with the caller's current Fiber. Every call to
|
|
98
|
+
# this operation should be paired with a corresponding call to detach.
|
|
99
|
+
#
|
|
100
|
+
# Returns a token to be used with the matching call to detach
|
|
101
|
+
#
|
|
102
|
+
# @param [Context] context The new context
|
|
103
|
+
# @return [Object] A token to be used when detaching
|
|
104
|
+
def attach(context)
|
|
105
|
+
previous_trace = Tracing.active_trace
|
|
106
|
+
continue_trace!(context)
|
|
107
|
+
|
|
108
|
+
stack.push(previous_trace && previous_trace.otel_context || ::OpenTelemetry::Context::ROOT)
|
|
109
|
+
stack.size
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Restores the previous Context associated with the current Fiber.
|
|
113
|
+
# The supplied token is used to check if the call to detach is balanced
|
|
114
|
+
# with a corresponding attach call. A warning is logged if the
|
|
115
|
+
# calls are unbalanced.
|
|
116
|
+
#
|
|
117
|
+
# @param [Object] token The token provided by the matching call to attach
|
|
118
|
+
# @return [Boolean] True if the calls matched, false otherwise
|
|
119
|
+
def detach(token)
|
|
120
|
+
s = stack
|
|
121
|
+
calls_matched = (token == s.size)
|
|
122
|
+
unless calls_matched
|
|
123
|
+
::OpenTelemetry.handle_error(
|
|
124
|
+
exception: ::OpenTelemetry::Context::DetachError.new(
|
|
125
|
+
'calls to detach should match corresponding calls to attach.'
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
previous_context = s.pop
|
|
131
|
+
continue_trace!(previous_context)
|
|
132
|
+
calls_matched
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Part of the OpenTelemetry public API for {Context}.
|
|
136
|
+
def clear
|
|
137
|
+
super
|
|
138
|
+
tracer = Tracing.send(:tracer)
|
|
139
|
+
tracer.send(:call_context).activate!(nil)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Creates a new {Context} associated with a {TraceOperation}.
|
|
143
|
+
def from_trace(trace)
|
|
144
|
+
new({}, trace: trace)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
private
|
|
148
|
+
|
|
149
|
+
def continue_trace!(context, &block)
|
|
150
|
+
call_context = Tracing.send(:tracer).send(:call_context)
|
|
151
|
+
if context && context.trace
|
|
152
|
+
call_context.activate!(context.ensure_trace, &block)
|
|
153
|
+
else
|
|
154
|
+
call_context.activate!(nil)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def self.prepended(base)
|
|
160
|
+
base.singleton_class.prepend(SingletonClass)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
::OpenTelemetry::Context.prepend(self)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# OpenTelemetry-specific {TraceOperation} features.
|
|
167
|
+
#
|
|
168
|
+
# These extensions providing matching between {TraceOperation}
|
|
169
|
+
# and OpenTelemetry {Context}.
|
|
170
|
+
module TraceOperation
|
|
171
|
+
attr_accessor :otel_context
|
|
172
|
+
|
|
173
|
+
# Stores values from Context#entries
|
|
174
|
+
def otel_value(key)
|
|
175
|
+
otel_values[key]
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Retrieves values for Context#entries
|
|
179
|
+
def otel_values
|
|
180
|
+
@otel_values ||= {}
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
Tracing::TraceOperation.include(self)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module OpenTelemetry
|
|
6
|
+
module Trace
|
|
7
|
+
# Stores associated Datadog entities to the OpenTelemetry Span.
|
|
8
|
+
module Span
|
|
9
|
+
attr_accessor :datadog_trace, :datadog_span
|
|
10
|
+
|
|
11
|
+
::OpenTelemetry::Trace::Span.prepend(self)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
require_relative 'span_processor'
|
|
5
|
+
require_relative 'id_generator'
|
|
6
|
+
require_relative 'propagator'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module OpenTelemetry
|
|
10
|
+
module SDK
|
|
11
|
+
# The Configurator is responsible for setting wiring up
|
|
12
|
+
# different OpenTelemetry requirements together.
|
|
13
|
+
# Some of the requirements will be changed to Datadog versions.
|
|
14
|
+
module Configurator
|
|
15
|
+
def initialize
|
|
16
|
+
super
|
|
17
|
+
@id_generator = IdGenerator
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Ensure Datadog-configure propagation styles have are applied when configured.
|
|
21
|
+
#
|
|
22
|
+
# DEV: Support configuring propagation through the environment variable
|
|
23
|
+
# DEV: `OTEL_PROPAGATORS`, similar to `DD_TRACE_PROPAGATION*`?
|
|
24
|
+
def configure_propagation
|
|
25
|
+
@propagators = [Propagator.new(Tracing::Contrib::HTTP::Distributed::Propagation.new)]
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Ensure Datadog-configure trace writer is configured.
|
|
30
|
+
def wrapped_exporters_from_env
|
|
31
|
+
[SpanProcessor.new]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
::OpenTelemetry::SDK::Configurator.prepend(self)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module OpenTelemetry
|
|
6
|
+
module SDK
|
|
7
|
+
# Generates Datadog-compatible IDs for OpenTelemetry traces.
|
|
8
|
+
# OpenTelemetry traces already produce Datadog-compatible IDs.
|
|
9
|
+
class IdGenerator
|
|
10
|
+
class << self
|
|
11
|
+
include ::OpenTelemetry::Trace
|
|
12
|
+
|
|
13
|
+
# Generates a valid trace identifier, a 16-byte string with at least one
|
|
14
|
+
# non-zero byte.
|
|
15
|
+
#
|
|
16
|
+
# @return [String] a valid trace ID.
|
|
17
|
+
def generate_trace_id
|
|
18
|
+
loop do
|
|
19
|
+
id = Random.bytes(8) # DEV: Change to 16 (16*8-byte) when 128-bit trace_id is supported.
|
|
20
|
+
return id unless id == ::OpenTelemetry::Trace::INVALID_SPAN_ID
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module OpenTelemetry
|
|
6
|
+
module SDK
|
|
7
|
+
# Compatibility wrapper to allow Datadog propagators to fulfill the
|
|
8
|
+
# OpenTelemetry propagator API.
|
|
9
|
+
class Propagator
|
|
10
|
+
def initialize(datadog_propagator)
|
|
11
|
+
@datadog_propagator = datadog_propagator
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def inject(
|
|
15
|
+
carrier, context: ::OpenTelemetry::Context.current,
|
|
16
|
+
setter: ::OpenTelemetry::Context::Propagation.text_map_setter
|
|
17
|
+
)
|
|
18
|
+
unless setter == ::OpenTelemetry::Context::Propagation.text_map_setter
|
|
19
|
+
Datadog.logger.error(
|
|
20
|
+
'Custom setter is not supported. Please inform the `ddtrace` team at ' \
|
|
21
|
+
' https://github.com/DataDog/dd-trace-rb of your use case so we can best support you. Using the default ' \
|
|
22
|
+
'OpenTelemetry::Context::Propagation.text_map_setter as a fallback setter.'
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
@datadog_propagator.inject!(context.trace.to_digest, carrier)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def extract(
|
|
30
|
+
carrier, context: ::OpenTelemetry::Context.current,
|
|
31
|
+
getter: ::OpenTelemetry::Context::Propagation.text_map_getter
|
|
32
|
+
)
|
|
33
|
+
unless getter == ::OpenTelemetry::Context::Propagation.text_map_getter
|
|
34
|
+
Datadog.logger.error(
|
|
35
|
+
'Custom getter is not supported. Please inform the `ddtrace` team at ' \
|
|
36
|
+
' https://github.com/DataDog/dd-trace-rb of your use case so we can best support you. Using the default ' \
|
|
37
|
+
'OpenTelemetry::Context::Propagation.text_map_getter as a fallback getter.'
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
digest = @datadog_propagator.extract(carrier)
|
|
42
|
+
return context unless digest
|
|
43
|
+
|
|
44
|
+
trace_id = to_otel_id(digest.trace_id)
|
|
45
|
+
span_id = to_otel_id(digest.span_id)
|
|
46
|
+
|
|
47
|
+
if digest.trace_state || digest.trace_flags
|
|
48
|
+
trace_flags = ::OpenTelemetry::Trace::TraceFlags.from_byte(digest.trace_flags)
|
|
49
|
+
tracestate = Tracing::Distributed::TraceContext.new(fetcher: nil).send(:build_tracestate, digest)
|
|
50
|
+
else
|
|
51
|
+
trace_flags = if Tracing::Sampling::PrioritySampler.sampled?(digest.trace_sampling_priority)
|
|
52
|
+
::OpenTelemetry::Trace::TraceFlags::SAMPLED
|
|
53
|
+
else
|
|
54
|
+
::OpenTelemetry::Trace::TraceFlags::DEFAULT
|
|
55
|
+
end
|
|
56
|
+
tracestate = ::OpenTelemetry::Trace::Tracestate::DEFAULT
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
span_context = ::OpenTelemetry::Trace::SpanContext.new(
|
|
60
|
+
trace_id: trace_id,
|
|
61
|
+
span_id: span_id,
|
|
62
|
+
trace_flags: trace_flags,
|
|
63
|
+
tracestate: tracestate,
|
|
64
|
+
remote: true
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
span = ::OpenTelemetry::Trace.non_recording_span(span_context)
|
|
68
|
+
|
|
69
|
+
trace = Tracing.continue_trace!(digest)
|
|
70
|
+
|
|
71
|
+
span.datadog_trace = trace
|
|
72
|
+
|
|
73
|
+
::OpenTelemetry::Trace.context_with_span(span, parent_context: context)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Returns fields set by this propagator.
|
|
77
|
+
# DEV: Doesn't seem like it's used in production Otel code paths.
|
|
78
|
+
def fields
|
|
79
|
+
[]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
# Converts the {Numeric} Datadog id object to OpenTelemetry's byte array format.
|
|
85
|
+
def to_otel_id(dd_id)
|
|
86
|
+
Array(dd_id).pack('S')
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
module Datadog
|
|
5
|
+
module OpenTelemetry
|
|
6
|
+
module SDK
|
|
7
|
+
# Keeps OpenTelemetry spans in sync with the Datadog execution context.
|
|
8
|
+
# Also responsible for flushing spans when their are finished.
|
|
9
|
+
class SpanProcessor
|
|
10
|
+
# Called when a {Span} is started, if the {Span#recording?}
|
|
11
|
+
# returns true.
|
|
12
|
+
#
|
|
13
|
+
# This method is called synchronously on the execution thread, should
|
|
14
|
+
# not throw or block the execution thread.
|
|
15
|
+
#
|
|
16
|
+
# @param [Span] span the {Span} that just started.
|
|
17
|
+
# @param [Context] parent_context the parent {Context} of the newly
|
|
18
|
+
# started span.
|
|
19
|
+
def on_start(span, parent_context)
|
|
20
|
+
create_matching_datadog_span(span, parent_context)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Called when a {Span} is ended, if the {Span#recording?}
|
|
24
|
+
# returns true.
|
|
25
|
+
#
|
|
26
|
+
# This method is called synchronously on the execution thread, should
|
|
27
|
+
# not throw or block the execution thread.
|
|
28
|
+
#
|
|
29
|
+
# @param [Span] span the {Span} that just ended.
|
|
30
|
+
def on_finish(span)
|
|
31
|
+
span.datadog_span.finish
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Export all ended spans to the configured `Exporter` that have not yet
|
|
35
|
+
# been exported.
|
|
36
|
+
#
|
|
37
|
+
# This method should only be called in cases where it is absolutely
|
|
38
|
+
# necessary, such as when using some FaaS providers that may suspend
|
|
39
|
+
# the process after an invocation, but before the `Processor` exports
|
|
40
|
+
# the completed spans.
|
|
41
|
+
#
|
|
42
|
+
# @param [optional Numeric] timeout An optional timeout in seconds.
|
|
43
|
+
# @return [Integer] Export::SUCCESS if no error occurred, Export::FAILURE if
|
|
44
|
+
# a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.
|
|
45
|
+
def force_flush(timeout: nil)
|
|
46
|
+
writer.force_flush(timeout: timeout) if writer.respond_to? :force_flush
|
|
47
|
+
Export::SUCCESS
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Called when {TracerProvider#shutdown} is called.
|
|
51
|
+
#
|
|
52
|
+
# @param [optional Numeric] timeout An optional timeout in seconds.
|
|
53
|
+
# @return [Integer] Export::SUCCESS if no error occurred, Export::FAILURE if
|
|
54
|
+
# a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.
|
|
55
|
+
def shutdown(timeout: nil)
|
|
56
|
+
writer.stop
|
|
57
|
+
Export::SUCCESS
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
def writer
|
|
63
|
+
Datadog.configuration.tracing.writer
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def create_matching_datadog_span(span, parent_context)
|
|
67
|
+
if parent_context.trace
|
|
68
|
+
Tracing.send(:tracer).send(:call_context).activate!(parent_context.ensure_trace)
|
|
69
|
+
else
|
|
70
|
+
Tracing.continue_trace!(nil)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
datadog_span = start_datadog_span(span)
|
|
74
|
+
|
|
75
|
+
span.datadog_span = datadog_span
|
|
76
|
+
span.datadog_trace = Tracing.active_trace
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def start_datadog_span(span)
|
|
80
|
+
tags = span.resource.attribute_enumerator.to_h
|
|
81
|
+
|
|
82
|
+
kind = span.kind || 'internal'
|
|
83
|
+
tags[Tracing::Metadata::Ext::TAG_KIND] = kind
|
|
84
|
+
|
|
85
|
+
datadog_span = Tracing.trace(span.name, tags: tags)
|
|
86
|
+
datadog_span.set_error([nil, span.status.description]) unless span.status.ok?
|
|
87
|
+
datadog_span
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# typed: ignore
|
|
3
|
+
|
|
4
|
+
# Entrypoint file for OpenTelemetry integration.
|
|
5
|
+
#
|
|
6
|
+
# This file's path is part of the @public_api.
|
|
7
|
+
#
|
|
8
|
+
# OpenTelemetry includes metrics, tracing, logs, and profiling.
|
|
9
|
+
# This file activates the integrations of all OpenTelemetry
|
|
10
|
+
# components supported by Datadog.
|
|
11
|
+
|
|
12
|
+
require_relative 'tracing'
|
|
13
|
+
require_relative 'opentelemetry/api/context'
|
|
14
|
+
|
|
15
|
+
# DEV: Should this be a Contrib integration, that depends on the `opentelemetry-sdk`
|
|
16
|
+
# DEV: and checks for compatibility?
|
|
17
|
+
# DEV: This is different from our existing OpenTracer API, but there are many safety
|
|
18
|
+
# DEV: features built into Contrib instrumentation today.
|
|
19
|
+
require_relative 'opentelemetry/sdk/configurator' if defined?(OpenTelemetry::SDK)
|
|
20
|
+
|
|
21
|
+
module Datadog
|
|
22
|
+
# Datadog OpenTelemetry integration.
|
|
23
|
+
module OpenTelemetry
|
|
24
|
+
# Used by Telemetry to decide if OpenTelemetry instrumentation is enabled
|
|
25
|
+
LOADED = true
|
|
26
|
+
|
|
27
|
+
# Use `Datadog.logger` as the default logger
|
|
28
|
+
def logger
|
|
29
|
+
@logger ||= ::Datadog.logger
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
::OpenTelemetry.singleton_class.prepend(self)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# OpenTelemetry does not wait until the "root" span is finished to flush:
|
|
37
|
+
# the "root" span does not have special influence on flushing order.
|
|
38
|
+
#
|
|
39
|
+
# The "root" OpenTelemetry span might be a span that is never finished, but
|
|
40
|
+
# instead a placeholder for distributed tracing information, and ultimately gets discarded.
|
|
41
|
+
# Consumers of the OpenTelemetry SpanProcessor pipeline are free to flush spans whenever
|
|
42
|
+
# an individual span is finished.
|
|
43
|
+
# Currently, this closely translates to Datadog's partial flushing.
|
|
44
|
+
#
|
|
45
|
+
# @see OpenTelemetry::SDK::Trace::SpanProcessor#on_finish
|
|
46
|
+
Datadog.configure do |c|
|
|
47
|
+
c.tracing.partial_flush.enabled = true
|
|
48
|
+
end
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
require_relative '../tracing/distributed/datadog'
|
|
4
|
+
require_relative '../tracing/utils'
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module OpenTracer
|
|
8
8
|
# DistributedHeaders provides easy access and validation to headers
|
|
9
9
|
# @public_api
|
|
10
10
|
class DistributedHeaders
|
|
11
|
-
include Tracing::Distributed::Headers::Ext
|
|
12
|
-
|
|
13
11
|
def initialize(carrier)
|
|
14
12
|
@carrier = carrier
|
|
15
13
|
end
|
|
@@ -20,15 +18,15 @@ module Datadog
|
|
|
20
18
|
end
|
|
21
19
|
|
|
22
20
|
def trace_id
|
|
23
|
-
id
|
|
21
|
+
id Tracing::Distributed::Datadog::TRACE_ID_KEY
|
|
24
22
|
end
|
|
25
23
|
|
|
26
24
|
def parent_id
|
|
27
|
-
id
|
|
25
|
+
id Tracing::Distributed::Datadog::PARENT_ID_KEY
|
|
28
26
|
end
|
|
29
27
|
|
|
30
28
|
def sampling_priority
|
|
31
|
-
hdr = @carrier[
|
|
29
|
+
hdr = @carrier[Tracing::Distributed::Datadog::SAMPLING_PRIORITY_KEY]
|
|
32
30
|
# It's important to make a difference between no header,
|
|
33
31
|
# and a header defined to zero.
|
|
34
32
|
return unless hdr
|
|
@@ -40,7 +38,7 @@ module Datadog
|
|
|
40
38
|
end
|
|
41
39
|
|
|
42
40
|
def origin
|
|
43
|
-
hdr = @carrier[
|
|
41
|
+
hdr = @carrier[Tracing::Distributed::Datadog::ORIGIN_KEY]
|
|
44
42
|
# Only return the value if it is not an empty string
|
|
45
43
|
hdr if hdr != ''
|
|
46
44
|
end
|
|
@@ -49,7 +47,7 @@ module Datadog
|
|
|
49
47
|
|
|
50
48
|
def id(header)
|
|
51
49
|
value = @carrier[header].to_i
|
|
52
|
-
return if value.zero? || value >= Datadog::Tracing::
|
|
50
|
+
return if value.zero? || value >= Datadog::Tracing::Utils::EXTERNAL_MAX_ID
|
|
53
51
|
|
|
54
52
|
value < 0 ? value + 0x1_0000_0000_0000_0000 : value
|
|
55
53
|
end
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require 'datadog/opentracer/propagator'
|
|
3
|
+
require_relative '../tracing/context'
|
|
4
|
+
require_relative '../tracing/propagation/http'
|
|
5
|
+
require_relative '../tracing/trace_operation'
|
|
6
|
+
require_relative 'propagator'
|
|
8
7
|
|
|
9
8
|
module Datadog
|
|
10
9
|
module OpenTracer
|
|
11
10
|
# OpenTracing propagator for Datadog::OpenTracer::Tracer
|
|
12
11
|
module RackPropagator
|
|
13
12
|
extend Propagator
|
|
14
|
-
extend Tracing::Distributed::Headers::Ext
|
|
15
|
-
include Tracing::Distributed::Headers::Ext
|
|
16
13
|
|
|
17
14
|
BAGGAGE_PREFIX = 'ot-baggage-'.freeze
|
|
18
15
|
BAGGAGE_PREFIX_FORMATTED = 'HTTP_OT_BAGGAGE_'.freeze
|
|
@@ -23,10 +20,14 @@ module Datadog
|
|
|
23
20
|
# @param span_context [SpanContext]
|
|
24
21
|
# @param carrier [Carrier] A carrier object of Rack type
|
|
25
22
|
def inject(span_context, carrier)
|
|
26
|
-
|
|
23
|
+
digest = if span_context.datadog_context && span_context.datadog_context.active_trace
|
|
24
|
+
span_context.datadog_context.active_trace.to_digest
|
|
25
|
+
else
|
|
26
|
+
span_context.datadog_trace_digest
|
|
27
|
+
end
|
|
27
28
|
|
|
28
29
|
# Inject Datadog trace properties
|
|
29
|
-
Tracing::Propagation::HTTP.inject!(
|
|
30
|
+
Tracing::Propagation::HTTP.inject!(digest, carrier)
|
|
30
31
|
|
|
31
32
|
# Inject baggage
|
|
32
33
|
span_context.baggage.each do |key, value|
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
require_relative '../tracing/context'
|
|
4
|
+
require_relative '../tracing/distributed/datadog'
|
|
5
|
+
require_relative '../tracing/trace_operation'
|
|
6
|
+
require_relative 'propagator'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module OpenTracer
|
|
10
10
|
# OpenTracing propagator for Datadog::OpenTracer::Tracer
|
|
11
11
|
module TextMapPropagator
|
|
12
12
|
extend Propagator
|
|
13
|
-
extend Tracing::Distributed::Headers::Ext
|
|
14
|
-
include Tracing::Distributed::Headers::Ext
|
|
15
13
|
|
|
16
14
|
BAGGAGE_PREFIX = 'ot-baggage-'.freeze
|
|
17
15
|
|
|
@@ -27,14 +25,17 @@ module Datadog
|
|
|
27
25
|
end
|
|
28
26
|
|
|
29
27
|
# Inject Datadog trace properties
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
digest = if span_context.datadog_context && span_context.datadog_context.active_trace
|
|
29
|
+
span_context.datadog_context.active_trace.to_digest
|
|
30
|
+
else
|
|
31
|
+
span_context.datadog_trace_digest
|
|
32
|
+
end
|
|
32
33
|
return unless digest
|
|
33
34
|
|
|
34
|
-
carrier[
|
|
35
|
-
carrier[
|
|
36
|
-
carrier[
|
|
37
|
-
carrier[
|
|
35
|
+
carrier[Tracing::Distributed::Datadog::ORIGIN_KEY] = digest.trace_origin
|
|
36
|
+
carrier[Tracing::Distributed::Datadog::PARENT_ID_KEY] = digest.span_id
|
|
37
|
+
carrier[Tracing::Distributed::Datadog::SAMPLING_PRIORITY_KEY] = digest.trace_sampling_priority
|
|
38
|
+
carrier[Tracing::Distributed::Datadog::TRACE_ID_KEY] = digest.trace_id
|
|
38
39
|
|
|
39
40
|
nil
|
|
40
41
|
end
|