ddtrace 1.0.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 +453 -2
- data/LICENSE-3rdparty.csv +6 -2
- data/README.md +10 -5
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +134 -0
- data/ext/ddtrace_profiling_loader/extconf.rb +74 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +79 -9
- data/ext/ddtrace_profiling_native_extension/clock_id.h +22 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +33 -10
- 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 +390 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +18 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +156 -114
- 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 +319 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +820 -9
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +42 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +230 -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 +487 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +39 -0
- 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 +6 -4
- data/lib/datadog/appsec/configuration/settings.rb +55 -19
- data/lib/datadog/appsec/configuration.rb +17 -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 +95 -47
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -4
- data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -3
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +17 -21
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +13 -13
- data/lib/datadog/appsec/contrib/rack/request.rb +27 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +92 -10
- 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 +82 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rails/patcher.rb +42 -8
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +36 -0
- 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 +126 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +84 -10
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +1 -1
- data/lib/datadog/appsec/event.rb +38 -27
- data/lib/datadog/appsec/extensions.rb +43 -26
- data/lib/datadog/appsec/instrumentation/gateway.rb +17 -3
- data/lib/datadog/appsec/processor.rb +86 -13
- data/lib/datadog/appsec/rate_limiter.rb +6 -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 -6
- 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 +99 -27
- 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 +9 -12
- data/lib/datadog/core/configuration/base.rb +14 -2
- data/lib/datadog/core/configuration/components.rb +123 -54
- 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 +79 -251
- data/lib/datadog/core/configuration.rb +16 -11
- 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 +4 -2
- data/lib/datadog/core/environment/container.rb +3 -2
- 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 +83 -11
- 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/logging/ext.rb +11 -0
- data/lib/datadog/core/metrics/client.rb +25 -14
- 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 +7 -7
- 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 +4 -4
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -7
- data/lib/datadog/core.rb +28 -56
- data/lib/datadog/kit/appsec/events.rb +75 -0
- data/lib/datadog/kit/enable_core_dumps.rb +51 -0
- data/lib/datadog/kit/identity.rb +64 -0
- data/lib/datadog/kit.rb +11 -0
- 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 -23
- 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 +305 -0
- data/lib/datadog/profiling/collectors/stack.rb +4 -288
- data/lib/datadog/profiling/encoding/profile.rb +8 -13
- 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 +4 -16
- data/lib/datadog/profiling/flush.rb +25 -56
- data/lib/datadog/profiling/http_transport.rb +132 -0
- data/lib/datadog/profiling/load_native_extension.rb +22 -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 +29 -50
- data/lib/datadog/profiling/stack_recorder.rb +79 -0
- data/lib/datadog/profiling/tag_builder.rb +53 -0
- data/lib/datadog/profiling/tasks/exec.rb +2 -2
- data/lib/datadog/profiling/tasks/setup.rb +8 -13
- 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 +49 -44
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +14 -8
- 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 -8
- 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 +4 -4
- 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 +3 -3
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +1 -1
- 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/notifications/subscription.rb +4 -2
- 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/context_composite_executor_service.rb +10 -3
- 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 -4
- 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 -3
- 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 +12 -6
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +47 -9
- 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 -4
- 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 -5
- 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 -6
- 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 -5
- 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 -4
- 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 -6
- 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 -4
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +2 -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 -3
- 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 -2
- 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 -4
- 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 +3 -18
- 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 +14 -9
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -5
- 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 -14
- 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 -3
- 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 -3
- 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 +2 -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 +4 -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 +29 -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 +11 -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 -8
- 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 -3
- 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 -6
- 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 +3 -2
- 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 +64 -12
- 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 +15 -9
- data/lib/datadog/tracing/sampling/rule_sampler.rb +11 -12
- 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 +15 -16
- 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 -16
- 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 +4 -3
- data/lib/ddtrace/transport/http/response.rb +35 -5
- 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 +5 -3
- 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 -5
- metadata +160 -44
- data/.editorconfig +0 -22
- data/.gitignore +0 -70
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -59
- 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 -2671
- data/docs/ProfilingDevelopment.md +0 -110
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
- 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,75 @@
|
|
|
1
|
+
module Datadog
|
|
2
|
+
module Tracing
|
|
3
|
+
module Sampling
|
|
4
|
+
module Span
|
|
5
|
+
# Applies Single Span Sampling rules to spans.
|
|
6
|
+
# When matching the configured rules, a span is ensured to
|
|
7
|
+
# be processed Datadog App. In other words, a single sampled span
|
|
8
|
+
# will never be dropped by the tracer or Datadog agent.
|
|
9
|
+
#
|
|
10
|
+
# All spans in a trace are subject to the single sampling rules, if
|
|
11
|
+
# any rules are configured.
|
|
12
|
+
#
|
|
13
|
+
# Single Span Sampling is distinct from trace-level sampling:
|
|
14
|
+
# Single Span Sampling can ensure a span is kept, even if its
|
|
15
|
+
# enclosing trace is rejected by trace-level sampling.
|
|
16
|
+
#
|
|
17
|
+
# This class only applies operations to spans that are part
|
|
18
|
+
# of traces that was rejected by trace sampling.
|
|
19
|
+
# A trace is rejected if either of the following conditions is true:
|
|
20
|
+
# * The priority sampling for a trace is set to either {USER_REJECT} or {AUTO_REJECT}.
|
|
21
|
+
# * The trace was rejected by internal sampling, thus never flushed.
|
|
22
|
+
#
|
|
23
|
+
# Single-sampled spans are tagged and the tracer ensures they will
|
|
24
|
+
# reach the Datadog App, regardless of their enclosing trace sampling decision.
|
|
25
|
+
#
|
|
26
|
+
# Single Span Sampling does not inspect spans that are part of a trace
|
|
27
|
+
# that has been accepted by trace-level sampling rules: all spans from such
|
|
28
|
+
# trace are guaranteed to reach the Datadog App.
|
|
29
|
+
class Sampler
|
|
30
|
+
attr_reader :rules
|
|
31
|
+
|
|
32
|
+
# Receives sampling rules to apply to individual spans.
|
|
33
|
+
#
|
|
34
|
+
# @param [Array<Datadog::Tracing::Sampling::Span::Rule>] rules list of rules to apply to spans
|
|
35
|
+
def initialize(rules = [])
|
|
36
|
+
@rules = rules
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Applies Single Span Sampling rules to the span if the trace has been rejected.
|
|
40
|
+
#
|
|
41
|
+
# The trace can be outright rejected, and never reach the transport,
|
|
42
|
+
# or be set as rejected by priority sampling. In both cases, the trace
|
|
43
|
+
# is considered rejected for Single Span Sampling purposes.
|
|
44
|
+
#
|
|
45
|
+
# If multiple rules match, only the first one is applied.
|
|
46
|
+
#
|
|
47
|
+
# @param [Datadog::Tracing::TraceOperation] trace_op trace for the provided span
|
|
48
|
+
# @param [Datadog::Tracing::SpanOperation] span_op Span to apply sampling rules
|
|
49
|
+
# @return [void]
|
|
50
|
+
def sample!(trace_op, span_op)
|
|
51
|
+
return if trace_op.sampled? && trace_op.priority_sampled?
|
|
52
|
+
|
|
53
|
+
# Applies the first matching rule
|
|
54
|
+
@rules.each do |rule|
|
|
55
|
+
decision = rule.sample!(span_op)
|
|
56
|
+
|
|
57
|
+
next if decision == :not_matched # Iterate until we find a matching decision
|
|
58
|
+
|
|
59
|
+
if decision == :kept
|
|
60
|
+
trace_op.set_tag(
|
|
61
|
+
Metadata::Ext::Distributed::TAG_DECISION_MAKER,
|
|
62
|
+
Sampling::Ext::Decision::SPAN_SAMPLING_RATE
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
break # Found either a `kept` or `rejected` decision
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
nil
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
data/lib/datadog/tracing/span.rb
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# typed: true
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative '../core/utils/safe_dup'
|
|
6
|
+
require_relative 'utils'
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
require_relative 'metadata/ext'
|
|
9
|
+
require_relative 'metadata'
|
|
10
10
|
|
|
11
11
|
module Datadog
|
|
12
12
|
module Tracing
|
|
@@ -19,19 +19,6 @@ module Datadog
|
|
|
19
19
|
class Span
|
|
20
20
|
include Metadata
|
|
21
21
|
|
|
22
|
-
# The max value for a {Datadog::Tracing::Span} identifier.
|
|
23
|
-
# Span and trace identifiers should be strictly positive and strictly inferior to this limit.
|
|
24
|
-
#
|
|
25
|
-
# Limited to +2<<62-1+ positive integers, as Ruby is able to represent such numbers "inline",
|
|
26
|
-
# inside a +VALUE+ scalar, thus not requiring memory allocation.
|
|
27
|
-
#
|
|
28
|
-
# The range of IDs also has to consider portability across different languages and platforms.
|
|
29
|
-
RUBY_MAX_ID = (1 << 62) - 1
|
|
30
|
-
|
|
31
|
-
# While we only generate 63-bit integers due to limitations in other languages, we support
|
|
32
|
-
# parsing 64-bit integers for distributed tracing since an upstream system may generate one
|
|
33
|
-
EXTERNAL_MAX_ID = 1 << 64
|
|
34
|
-
|
|
35
22
|
attr_accessor \
|
|
36
23
|
:end_time,
|
|
37
24
|
:id,
|
|
@@ -63,6 +50,7 @@ module Datadog
|
|
|
63
50
|
# * +type+: the type of the span (such as +http+, +db+ and so on)
|
|
64
51
|
# * +parent_id+: the identifier of the parent span
|
|
65
52
|
# * +trace_id+: the identifier of the root span for this trace
|
|
53
|
+
# * +service_entry+: whether it is a service entry span.
|
|
66
54
|
# TODO: Remove span_type
|
|
67
55
|
def initialize(
|
|
68
56
|
name,
|
|
@@ -78,16 +66,17 @@ module Datadog
|
|
|
78
66
|
start_time: nil,
|
|
79
67
|
status: 0,
|
|
80
68
|
type: span_type,
|
|
81
|
-
trace_id: nil
|
|
69
|
+
trace_id: nil,
|
|
70
|
+
service_entry: nil
|
|
82
71
|
)
|
|
83
72
|
@name = Core::Utils::SafeDup.frozen_or_dup(name)
|
|
84
73
|
@service = Core::Utils::SafeDup.frozen_or_dup(service)
|
|
85
74
|
@resource = Core::Utils::SafeDup.frozen_or_dup(resource)
|
|
86
75
|
@type = Core::Utils::SafeDup.frozen_or_dup(type)
|
|
87
76
|
|
|
88
|
-
@id = id ||
|
|
77
|
+
@id = id || Tracing::Utils.next_id
|
|
89
78
|
@parent_id = parent_id || 0
|
|
90
|
-
@trace_id = trace_id ||
|
|
79
|
+
@trace_id = trace_id || Tracing::Utils.next_id
|
|
91
80
|
|
|
92
81
|
@meta = meta || {}
|
|
93
82
|
@metrics = metrics || {}
|
|
@@ -103,6 +92,11 @@ module Datadog
|
|
|
103
92
|
# duration_start and duration_end track monotonic clock, and may remain nil in cases where it
|
|
104
93
|
# is known that we have to use wall clock to measure duration.
|
|
105
94
|
@duration = duration
|
|
95
|
+
|
|
96
|
+
@service_entry = service_entry
|
|
97
|
+
|
|
98
|
+
# Mark with the service entry span metric, if applicable
|
|
99
|
+
set_metric(Metadata::Ext::TAG_TOP_LEVEL, 1.0) if service_entry
|
|
106
100
|
end
|
|
107
101
|
|
|
108
102
|
# Return whether the duration is started or not
|
|
@@ -207,6 +201,16 @@ module Datadog
|
|
|
207
201
|
def duration_nano
|
|
208
202
|
(duration * 1e9).to_i
|
|
209
203
|
end
|
|
204
|
+
|
|
205
|
+
# https://docs.datadoghq.com/tracing/visualization/#service-entry-span
|
|
206
|
+
# A span is a service entry span when it is the entrypoint method for a request to a service.
|
|
207
|
+
# You can visualize this within Datadog APM when the color of the immediate parent on a flame graph is a different
|
|
208
|
+
# color. Services are also listed on the right when viewing a flame graph.
|
|
209
|
+
#
|
|
210
|
+
# @return [Boolean] `true` if the span is a serivce entry span
|
|
211
|
+
def service_entry?
|
|
212
|
+
@service_entry == true
|
|
213
|
+
end
|
|
210
214
|
end
|
|
211
215
|
end
|
|
212
216
|
end
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
require 'forwardable'
|
|
4
3
|
require 'time'
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
require_relative '../core'
|
|
6
|
+
require_relative '../core/environment/identity'
|
|
7
|
+
require_relative '../core/utils'
|
|
8
|
+
require_relative '../core/utils/time'
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
require_relative 'event'
|
|
11
|
+
require_relative 'metadata'
|
|
12
|
+
require_relative 'metadata/ext'
|
|
13
|
+
require_relative 'span'
|
|
14
|
+
require_relative 'utils'
|
|
15
15
|
|
|
16
16
|
module Datadog
|
|
17
17
|
module Tracing
|
|
@@ -19,7 +19,6 @@ module Datadog
|
|
|
19
19
|
# It gives a Span a context which can be used to
|
|
20
20
|
# build a Span. When completed, it yields the Span.
|
|
21
21
|
#
|
|
22
|
-
# rubocop:disable Metrics/ClassLength
|
|
23
22
|
# @public_api
|
|
24
23
|
class SpanOperation
|
|
25
24
|
include Metadata
|
|
@@ -63,9 +62,9 @@ module Datadog
|
|
|
63
62
|
self.type = type
|
|
64
63
|
self.resource = resource
|
|
65
64
|
|
|
66
|
-
@id =
|
|
65
|
+
@id = Tracing::Utils.next_id
|
|
67
66
|
@parent_id = parent_id || 0
|
|
68
|
-
@trace_id = trace_id ||
|
|
67
|
+
@trace_id = trace_id || Tracing::Utils.next_id
|
|
69
68
|
|
|
70
69
|
@status = 0
|
|
71
70
|
|
|
@@ -399,7 +398,7 @@ module Datadog
|
|
|
399
398
|
rescue StandardError => e
|
|
400
399
|
Datadog.logger.debug do
|
|
401
400
|
"Custom on_error handler #{@handler} failed, using fallback behavior. \
|
|
402
|
-
|
|
401
|
+
Cause: #{e.class.name} #{e.message} Location: #{Array(e.backtrace).first}"
|
|
403
402
|
end
|
|
404
403
|
|
|
405
404
|
original.call(op, error) if original
|
|
@@ -412,7 +411,7 @@ module Datadog
|
|
|
412
411
|
@handler.call(*args)
|
|
413
412
|
rescue StandardError => e
|
|
414
413
|
Datadog.logger.debug do
|
|
415
|
-
"Error in on_error handler '#{@default}': #{e.message} at #{Array(e.backtrace).first}"
|
|
414
|
+
"Error in on_error handler '#{@default}': #{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
|
416
415
|
end
|
|
417
416
|
end
|
|
418
417
|
|
|
@@ -469,7 +468,8 @@ module Datadog
|
|
|
469
468
|
start_time: @start_time,
|
|
470
469
|
status: @status,
|
|
471
470
|
type: @type,
|
|
472
|
-
trace_id: @trace_id
|
|
471
|
+
trace_id: @trace_id,
|
|
472
|
+
service_entry: parent.nil? || (service && parent.service != service)
|
|
473
473
|
)
|
|
474
474
|
end
|
|
475
475
|
|
|
@@ -516,6 +516,5 @@ module Datadog
|
|
|
516
516
|
alias :span_type :type
|
|
517
517
|
alias :span_type= :type=
|
|
518
518
|
end
|
|
519
|
-
# rubocop:enable Metrics/ClassLength
|
|
520
519
|
end
|
|
521
520
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
require_relative 'pipeline'
|
|
6
|
+
require_relative 'runtime/metrics'
|
|
7
|
+
require_relative 'writer'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
require_relative '../../ddtrace/transport/http'
|
|
10
10
|
|
|
11
11
|
module Datadog
|
|
12
12
|
module Tracing
|
|
@@ -6,12 +6,84 @@ module Datadog
|
|
|
6
6
|
# Used to propagate context and continue traces across execution boundaries.
|
|
7
7
|
# @public_api
|
|
8
8
|
class TraceDigest
|
|
9
|
+
# @!attribute [r] span_id
|
|
10
|
+
# Datadog id for the currently active span.
|
|
11
|
+
# @return [Integer]
|
|
12
|
+
# @!attribute [r] span_name
|
|
13
|
+
# The operation name of the currently active span.
|
|
14
|
+
# @return [String]
|
|
15
|
+
# @!attribute [r] span_resource
|
|
16
|
+
# The resource name of the currently active span.
|
|
17
|
+
# @return [String]
|
|
18
|
+
# @!attribute [r] span_service
|
|
19
|
+
# The service of the currently active span.
|
|
20
|
+
# @return [String]
|
|
21
|
+
# @!attribute [r] span_type
|
|
22
|
+
# The type of the currently active span.
|
|
23
|
+
# @return [String]
|
|
24
|
+
# @!attribute [r] trace_distributed_tags
|
|
25
|
+
# Datadog-specific tags that support richer distributed tracing association.
|
|
26
|
+
# @return [Hash<String,String>]
|
|
27
|
+
# @!attribute [r] trace_hostname
|
|
28
|
+
# The hostname of the currently active trace. Use to attribute traces to hosts.
|
|
29
|
+
# @return [String]
|
|
30
|
+
# @!attribute [r] trace_id
|
|
31
|
+
# Datadog id for the currently active trace.
|
|
32
|
+
# @return [Integer]
|
|
33
|
+
# @!attribute [r] trace_name
|
|
34
|
+
# Operation name for the currently active trace.
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
# @!attribute [r] trace_origin
|
|
37
|
+
# Datadog-specific attribution of this trace's creation.
|
|
38
|
+
# @return [String]
|
|
39
|
+
# @!attribute [r] trace_process_id
|
|
40
|
+
# The OS-specific process id.
|
|
41
|
+
# @return [Integer]
|
|
42
|
+
# @!attribute [r] trace_resource
|
|
43
|
+
# The resource name of the currently active trace.
|
|
44
|
+
# @return [String]
|
|
45
|
+
# @!attribute [r] trace_runtime_id
|
|
46
|
+
# Unique id to this Ruby process. Used to differentiate traces coming from
|
|
47
|
+
# child processes forked from same parent process.
|
|
48
|
+
# @return [String]
|
|
49
|
+
# @!attribute [r] trace_sampling_priority
|
|
50
|
+
# Datadog-specific sampling decision for the currently active trace.
|
|
51
|
+
# @return [Integer]
|
|
52
|
+
# @!attribute [r] trace_service
|
|
53
|
+
# The service of the currently active trace.
|
|
54
|
+
# @return [String]
|
|
55
|
+
# @!attribute [r] trace_distributed_id
|
|
56
|
+
# The trace id extracted from a distributed context, if different from `trace_id`.
|
|
57
|
+
#
|
|
58
|
+
# The current use case is when the distributed context has a trace id integer larger than 64-bit:
|
|
59
|
+
# This attribute will preserve the original id, while `trace_id` will only contain the lower 64 bits.
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
# @see https://www.w3.org/TR/trace-context/#trace-id
|
|
62
|
+
# @!attribute [r] trace_flags
|
|
63
|
+
# The W3C "trace-flags" extracted from a distributed context. This field is an 8-bit unsigned integer.
|
|
64
|
+
# @return [Integer]
|
|
65
|
+
# @see https://www.w3.org/TR/trace-context/#trace-flags
|
|
66
|
+
# @!attribute [r] trace_state
|
|
67
|
+
# The W3C "tracestate" extracted from a distributed context.
|
|
68
|
+
# This field is a string representing vendor-specific distribution data.
|
|
69
|
+
# The `dd=` entry is removed from `trace_state` as its value is dynamically calculated
|
|
70
|
+
# on every propagation injection.
|
|
71
|
+
# @return [String]
|
|
72
|
+
# @see https://www.w3.org/TR/trace-context/#tracestate-header
|
|
73
|
+
# @!attribute [r] trace_state_unknown_fields
|
|
74
|
+
# From W3C "tracestate"'s `dd=` entry, when keys are not recognized they are stored here long with their values.
|
|
75
|
+
# This allows later propagation to include those unknown fields, as they can represent future versions of the spec
|
|
76
|
+
# sending data through this service. This value ends in a trailing `;` to facilitate serialization.
|
|
77
|
+
# @return [String]
|
|
78
|
+
# TODO: The documentation for the last attribute above won't be rendered.
|
|
79
|
+
# TODO: This might be a YARD bug as adding an attribute, making it now second-last attribute, renders correctly.
|
|
9
80
|
attr_reader \
|
|
10
81
|
:span_id,
|
|
11
82
|
:span_name,
|
|
12
83
|
:span_resource,
|
|
13
84
|
:span_service,
|
|
14
85
|
:span_type,
|
|
86
|
+
:trace_distributed_tags,
|
|
15
87
|
:trace_hostname,
|
|
16
88
|
:trace_id,
|
|
17
89
|
:trace_name,
|
|
@@ -20,7 +92,11 @@ module Datadog
|
|
|
20
92
|
:trace_resource,
|
|
21
93
|
:trace_runtime_id,
|
|
22
94
|
:trace_sampling_priority,
|
|
23
|
-
:trace_service
|
|
95
|
+
:trace_service,
|
|
96
|
+
:trace_distributed_id,
|
|
97
|
+
:trace_flags,
|
|
98
|
+
:trace_state,
|
|
99
|
+
:trace_state_unknown_fields
|
|
24
100
|
|
|
25
101
|
def initialize(
|
|
26
102
|
span_id: nil,
|
|
@@ -28,6 +104,7 @@ module Datadog
|
|
|
28
104
|
span_resource: nil,
|
|
29
105
|
span_service: nil,
|
|
30
106
|
span_type: nil,
|
|
107
|
+
trace_distributed_tags: nil,
|
|
31
108
|
trace_hostname: nil,
|
|
32
109
|
trace_id: nil,
|
|
33
110
|
trace_name: nil,
|
|
@@ -36,13 +113,18 @@ module Datadog
|
|
|
36
113
|
trace_resource: nil,
|
|
37
114
|
trace_runtime_id: nil,
|
|
38
115
|
trace_sampling_priority: nil,
|
|
39
|
-
trace_service: nil
|
|
116
|
+
trace_service: nil,
|
|
117
|
+
trace_distributed_id: nil,
|
|
118
|
+
trace_flags: nil,
|
|
119
|
+
trace_state: nil,
|
|
120
|
+
trace_state_unknown_fields: nil
|
|
40
121
|
)
|
|
41
122
|
@span_id = span_id
|
|
42
123
|
@span_name = span_name && span_name.dup.freeze
|
|
43
124
|
@span_resource = span_resource && span_resource.dup.freeze
|
|
44
125
|
@span_service = span_service && span_service.dup.freeze
|
|
45
126
|
@span_type = span_type && span_type.dup.freeze
|
|
127
|
+
@trace_distributed_tags = trace_distributed_tags && trace_distributed_tags.dup.freeze
|
|
46
128
|
@trace_hostname = trace_hostname && trace_hostname.dup.freeze
|
|
47
129
|
@trace_id = trace_id
|
|
48
130
|
@trace_name = trace_name && trace_name.dup.freeze
|
|
@@ -52,6 +134,10 @@ module Datadog
|
|
|
52
134
|
@trace_runtime_id = trace_runtime_id && trace_runtime_id.dup.freeze
|
|
53
135
|
@trace_sampling_priority = trace_sampling_priority
|
|
54
136
|
@trace_service = trace_service && trace_service.dup.freeze
|
|
137
|
+
@trace_distributed_id = trace_distributed_id
|
|
138
|
+
@trace_flags = trace_flags
|
|
139
|
+
@trace_state = trace_state && trace_state.dup.freeze
|
|
140
|
+
@trace_state_unknown_fields = trace_state_unknown_fields && trace_state_unknown_fields.dup.freeze
|
|
55
141
|
|
|
56
142
|
freeze
|
|
57
143
|
end
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
require_relative '../core'
|
|
4
|
+
require_relative '../core/environment/identity'
|
|
5
|
+
require_relative '../core/utils'
|
|
6
|
+
|
|
7
|
+
require_relative 'event'
|
|
8
|
+
require_relative 'metadata/tagging'
|
|
9
|
+
require_relative 'sampling/ext'
|
|
10
|
+
require_relative 'span_operation'
|
|
11
|
+
require_relative 'trace_digest'
|
|
12
|
+
require_relative 'trace_segment'
|
|
13
|
+
require_relative 'utils'
|
|
13
14
|
|
|
14
15
|
module Datadog
|
|
15
16
|
module Tracing
|
|
@@ -22,7 +23,6 @@ module Datadog
|
|
|
22
23
|
# For async support, a {Datadog::Tracing::TraceOperation} should be employed
|
|
23
24
|
# per execution context (e.g. Thread, etc.)
|
|
24
25
|
#
|
|
25
|
-
# rubocop:disable Metrics/ClassLength
|
|
26
26
|
# @public_api
|
|
27
27
|
class TraceOperation
|
|
28
28
|
include Metadata::Tagging
|
|
@@ -71,11 +71,10 @@ module Datadog
|
|
|
71
71
|
metrics: nil
|
|
72
72
|
)
|
|
73
73
|
# Attributes
|
|
74
|
-
@
|
|
75
|
-
@id = id || Core::Utils.next_id
|
|
74
|
+
@id = id || Tracing::Utils.next_id
|
|
76
75
|
@max_length = max_length || DEFAULT_MAX_LENGTH
|
|
77
76
|
@parent_span_id = parent_span_id
|
|
78
|
-
@sampled = sampled.nil? ?
|
|
77
|
+
@sampled = sampled.nil? ? true : sampled
|
|
79
78
|
|
|
80
79
|
# Tags
|
|
81
80
|
@agent_sample_rate = agent_sample_rate
|
|
@@ -114,18 +113,34 @@ module Datadog
|
|
|
114
113
|
@finished == true
|
|
115
114
|
end
|
|
116
115
|
|
|
116
|
+
# Will this trace be flushed by the tracer transport?
|
|
117
|
+
# This includes cases where the span is kept solely due to priority sampling.
|
|
118
|
+
#
|
|
119
|
+
# This is not the ultimate Datadog App sampling decision. Downstream systems
|
|
120
|
+
# can decide to reject this trace, especially for cases where priority
|
|
121
|
+
# sampling is set to AUTO_KEEP.
|
|
122
|
+
#
|
|
123
|
+
# @return [Boolean]
|
|
117
124
|
def sampled?
|
|
118
|
-
@sampled == true ||
|
|
125
|
+
@sampled == true || priority_sampled?
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Has the priority sampling chosen to keep this span?
|
|
129
|
+
# @return [Boolean]
|
|
130
|
+
def priority_sampled?
|
|
131
|
+
!@sampling_priority.nil? && @sampling_priority > 0
|
|
119
132
|
end
|
|
120
133
|
|
|
121
134
|
def keep!
|
|
122
135
|
self.sampled = true
|
|
123
136
|
self.sampling_priority = Sampling::Ext::Priority::USER_KEEP
|
|
137
|
+
set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
|
|
124
138
|
end
|
|
125
139
|
|
|
126
140
|
def reject!
|
|
127
141
|
self.sampled = false
|
|
128
142
|
self.sampling_priority = Sampling::Ext::Priority::USER_REJECT
|
|
143
|
+
set_tag(Tracing::Metadata::Ext::Distributed::TAG_DECISION_MAKER, Tracing::Sampling::Ext::Decision::MANUAL)
|
|
129
144
|
end
|
|
130
145
|
|
|
131
146
|
def name
|
|
@@ -136,6 +151,13 @@ module Datadog
|
|
|
136
151
|
@resource || (root_span && root_span.resource)
|
|
137
152
|
end
|
|
138
153
|
|
|
154
|
+
# Returns true if the resource has been explicitly set
|
|
155
|
+
#
|
|
156
|
+
# @return [Boolean]
|
|
157
|
+
def resource_override?
|
|
158
|
+
!@resource.nil?
|
|
159
|
+
end
|
|
160
|
+
|
|
139
161
|
def service
|
|
140
162
|
@service || (root_span && root_span.service)
|
|
141
163
|
end
|
|
@@ -227,6 +249,11 @@ module Datadog
|
|
|
227
249
|
end
|
|
228
250
|
end
|
|
229
251
|
|
|
252
|
+
# Returns a {TraceSegment} with all finished spans that can be flushed
|
|
253
|
+
# at invocation time. All other **finished** spans are discarded.
|
|
254
|
+
#
|
|
255
|
+
# @yield [spans] spans that will be returned as part of the trace segment returned
|
|
256
|
+
# @return [TraceSegment]
|
|
230
257
|
def flush!
|
|
231
258
|
finished = finished?
|
|
232
259
|
|
|
@@ -234,6 +261,8 @@ module Datadog
|
|
|
234
261
|
spans = @spans.dup
|
|
235
262
|
@spans = []
|
|
236
263
|
|
|
264
|
+
spans = yield(spans) if block_given?
|
|
265
|
+
|
|
237
266
|
# Use them to build a trace
|
|
238
267
|
build_trace(spans, !finished)
|
|
239
268
|
end
|
|
@@ -252,6 +281,7 @@ module Datadog
|
|
|
252
281
|
span_resource: (@active_span && @active_span.resource),
|
|
253
282
|
span_service: (@active_span && @active_span.service),
|
|
254
283
|
span_type: (@active_span && @active_span.type),
|
|
284
|
+
trace_distributed_tags: distributed_tags,
|
|
255
285
|
trace_hostname: @hostname,
|
|
256
286
|
trace_id: @id,
|
|
257
287
|
trace_name: name,
|
|
@@ -426,7 +456,21 @@ module Datadog
|
|
|
426
456
|
root_span_id: !partial ? root_span && root_span.id : nil
|
|
427
457
|
)
|
|
428
458
|
end
|
|
459
|
+
|
|
460
|
+
# Returns tracer tags that will be propagated if this span's context
|
|
461
|
+
# is exported through {.to_digest}.
|
|
462
|
+
# @return [Hash] key value pairs of distributed tags
|
|
463
|
+
def distributed_tags
|
|
464
|
+
meta.select { |name, _| name.start_with?(Metadata::Ext::Distributed::TAGS_PREFIX) }
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
def reset
|
|
468
|
+
@root_span = nil
|
|
469
|
+
@active_span = nil
|
|
470
|
+
@active_span_count = 0
|
|
471
|
+
@finished = false
|
|
472
|
+
@spans = []
|
|
473
|
+
end
|
|
429
474
|
end
|
|
430
|
-
# rubocop:enable Metrics/ClassLength
|
|
431
475
|
end
|
|
432
476
|
end
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
require_relative '../core/runtime/ext'
|
|
4
|
+
require_relative '../core/utils/safe_dup'
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
require_relative 'sampling/ext'
|
|
7
|
+
require_relative 'metadata/ext'
|
|
8
|
+
require_relative 'metadata/tagging'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module Tracing
|
|
12
12
|
# Serializable construct representing a trace
|
|
13
13
|
# @public_api
|
|
14
|
-
# rubocop:disable Metrics/ClassLength
|
|
15
14
|
class TraceSegment
|
|
16
15
|
TAG_NAME = 'name'.freeze
|
|
17
16
|
TAG_RESOURCE = 'resource'.freeze
|
|
@@ -31,11 +30,13 @@ module Datadog
|
|
|
31
30
|
:rule_sample_rate,
|
|
32
31
|
:runtime_id,
|
|
33
32
|
:sample_rate,
|
|
33
|
+
:sampling_decision_maker,
|
|
34
34
|
:sampling_priority,
|
|
35
35
|
:service
|
|
36
36
|
|
|
37
37
|
# rubocop:disable Metrics/CyclomaticComplexity
|
|
38
38
|
# rubocop:disable Metrics/PerceivedComplexity
|
|
39
|
+
# @param spans [Array<Datadog::Span>]
|
|
39
40
|
def initialize(
|
|
40
41
|
spans,
|
|
41
42
|
agent_sample_rate: nil,
|
|
@@ -77,6 +78,7 @@ module Datadog
|
|
|
77
78
|
@rule_sample_rate = rule_sample_rate_tag || rule_sample_rate
|
|
78
79
|
@runtime_id = runtime_id || runtime_id_tag
|
|
79
80
|
@sample_rate = sample_rate || sample_rate_tag
|
|
81
|
+
@sampling_decision_maker = sampling_decision_maker_tag
|
|
80
82
|
@sampling_priority = sampling_priority || sampling_priority_tag
|
|
81
83
|
@service = Core::Utils::SafeDup.frozen_or_dup(service || service_tag)
|
|
82
84
|
end
|
|
@@ -171,7 +173,7 @@ module Datadog
|
|
|
171
173
|
end
|
|
172
174
|
|
|
173
175
|
def process_id_tag
|
|
174
|
-
meta[Core::Runtime::Ext::
|
|
176
|
+
meta[Core::Runtime::Ext::TAG_PROCESS_ID]
|
|
175
177
|
end
|
|
176
178
|
|
|
177
179
|
def rate_limiter_rate_tag
|
|
@@ -194,6 +196,10 @@ module Datadog
|
|
|
194
196
|
metrics[Metadata::Ext::Sampling::TAG_SAMPLE_RATE]
|
|
195
197
|
end
|
|
196
198
|
|
|
199
|
+
def sampling_decision_maker_tag
|
|
200
|
+
meta[Metadata::Ext::Distributed::TAG_DECISION_MAKER]
|
|
201
|
+
end
|
|
202
|
+
|
|
197
203
|
def sampling_priority_tag
|
|
198
204
|
meta[Metadata::Ext::Distributed::TAG_SAMPLING_PRIORITY]
|
|
199
205
|
end
|
|
@@ -202,6 +208,5 @@ module Datadog
|
|
|
202
208
|
meta[TAG_SERVICE]
|
|
203
209
|
end
|
|
204
210
|
end
|
|
205
|
-
# rubocop:enable Metrics/ClassLength
|
|
206
211
|
end
|
|
207
212
|
end
|