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,89 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Tracing
|
|
5
|
+
module Sampling
|
|
6
|
+
module Span
|
|
7
|
+
# Checks if a span conforms to a matching criteria.
|
|
8
|
+
class Matcher
|
|
9
|
+
attr_reader :name, :service
|
|
10
|
+
|
|
11
|
+
# Pattern that matches any string
|
|
12
|
+
MATCH_ALL_PATTERN = '*'
|
|
13
|
+
|
|
14
|
+
# Matches span name and service to their respective patterns provided.
|
|
15
|
+
#
|
|
16
|
+
# The patterns are {String}s with two special characters available:
|
|
17
|
+
# 1. `?`: matches exactly one of any character.
|
|
18
|
+
# 2. `*`: matches a substring of any size, including zero.
|
|
19
|
+
# These patterns can occur any point of the string, any number of times.
|
|
20
|
+
#
|
|
21
|
+
# Both {SpanOperation#name} and {SpanOperation#service} must match the provided patterns.
|
|
22
|
+
#
|
|
23
|
+
# The whole String has to match the provided patterns: providing a pattern that
|
|
24
|
+
# matches a portion of the provided String is not considered a match.
|
|
25
|
+
#
|
|
26
|
+
# @example web-*
|
|
27
|
+
# `'web-*'` will match any string starting with `web-`.
|
|
28
|
+
# @example cache-?
|
|
29
|
+
# `'cache-?'` will match any string starting with `database-` followed by exactly one character.
|
|
30
|
+
#
|
|
31
|
+
# @param name_pattern [String] a pattern to be matched against {SpanOperation#name}
|
|
32
|
+
# @param service_pattern [String] a pattern to be matched against {SpanOperation#service}
|
|
33
|
+
def initialize(name_pattern: MATCH_ALL_PATTERN, service_pattern: MATCH_ALL_PATTERN)
|
|
34
|
+
@name = pattern_to_regex(name_pattern)
|
|
35
|
+
@service = pattern_to_regex(service_pattern)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# {Regexp#match?} was added in Ruby 2.4, and it's measurably
|
|
39
|
+
# the least costly way to get a boolean result for a Regexp match.
|
|
40
|
+
# @see https://www.ruby-lang.org/en/news/2016/12/25/ruby-2-4-0-released/
|
|
41
|
+
if Regexp.method_defined?(:match?)
|
|
42
|
+
# Returns `true` if the span conforms to the configured patterns,
|
|
43
|
+
# `false` otherwise
|
|
44
|
+
#
|
|
45
|
+
# @param [SpanOperation] span
|
|
46
|
+
# @return [Boolean]
|
|
47
|
+
def match?(span)
|
|
48
|
+
# Matching is performed at the end of the lifecycle of a Span,
|
|
49
|
+
# thus both `name` and `service` are guaranteed to be not `nil`.
|
|
50
|
+
@name.match?(span.name) && @service.match?(span.service)
|
|
51
|
+
end
|
|
52
|
+
else
|
|
53
|
+
# DEV: Remove when support for Ruby 2.3 and older is removed.
|
|
54
|
+
def match?(span)
|
|
55
|
+
@name === span.name && @service === span.service
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def ==(other)
|
|
60
|
+
return super unless other.is_a?(Matcher)
|
|
61
|
+
|
|
62
|
+
name == other.name &&
|
|
63
|
+
service == other.service
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
# @param pattern [String]
|
|
69
|
+
# @return [Regexp]
|
|
70
|
+
def pattern_to_regex(pattern)
|
|
71
|
+
# Ensure no undesired characters are treated as regex.
|
|
72
|
+
# Our valid special characters, `?` and `*`,
|
|
73
|
+
# will be escaped so...
|
|
74
|
+
pattern = Regexp.quote(pattern)
|
|
75
|
+
|
|
76
|
+
# ...we account for that here:
|
|
77
|
+
pattern.gsub!('\?', '.') # Any single character
|
|
78
|
+
pattern.gsub!('\*', '.*') # Any substring
|
|
79
|
+
|
|
80
|
+
# Patterns have to match the whole input string
|
|
81
|
+
pattern = "\\A#{pattern}\\z"
|
|
82
|
+
|
|
83
|
+
Regexp.new(pattern)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Tracing
|
|
7
|
+
module Sampling
|
|
8
|
+
module Span
|
|
9
|
+
# Span sampling rule that applies a sampling rate if the span
|
|
10
|
+
# matches the provided {Matcher}.
|
|
11
|
+
# Additionally, a rate limiter is also applied.
|
|
12
|
+
#
|
|
13
|
+
# If a span does not conform to the matcher, no changes are made.
|
|
14
|
+
class Rule
|
|
15
|
+
attr_reader :matcher, :sample_rate, :rate_limit
|
|
16
|
+
|
|
17
|
+
# Creates a new span sampling rule.
|
|
18
|
+
#
|
|
19
|
+
# @param [Sampling::Span::Matcher] matcher whether this rule applies to a specific span
|
|
20
|
+
# @param [Float] sample_rate span sampling ratio, between 0.0 (0%) and 1.0 (100%).
|
|
21
|
+
# @param [Numeric] rate_limit maximum number of spans sampled per second. Negative numbers mean unlimited spans.
|
|
22
|
+
def initialize(
|
|
23
|
+
matcher,
|
|
24
|
+
sample_rate: Span::Ext::DEFAULT_SAMPLE_RATE,
|
|
25
|
+
rate_limit: Span::Ext::DEFAULT_MAX_PER_SECOND
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@matcher = matcher
|
|
29
|
+
@sample_rate = sample_rate
|
|
30
|
+
@rate_limit = rate_limit
|
|
31
|
+
|
|
32
|
+
@sampler = Sampling::RateSampler.new
|
|
33
|
+
# Set the sample_rate outside of the initializer to allow for
|
|
34
|
+
# zero to be a "drop all".
|
|
35
|
+
# The RateSampler initializer enforces non-zero, falling back to 100% sampling
|
|
36
|
+
# if zero is provided.
|
|
37
|
+
@sampler.sample_rate = sample_rate
|
|
38
|
+
@rate_limiter = Sampling::TokenBucket.new(rate_limit)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# This method should only be invoked for spans that are part
|
|
42
|
+
# of a trace that has been dropped by trace-level sampling.
|
|
43
|
+
# Invoking it for other spans will cause incorrect sampling
|
|
44
|
+
# metrics to be reported by the Datadog App.
|
|
45
|
+
#
|
|
46
|
+
# Returns `true` if the provided span is sampled.
|
|
47
|
+
# If the span is dropped due to sampling rate or rate limiting,
|
|
48
|
+
# it returns `false`.
|
|
49
|
+
#
|
|
50
|
+
# Returns `nil` if the span did not meet the matching criteria by the
|
|
51
|
+
# provided matcher.
|
|
52
|
+
#
|
|
53
|
+
# This method modifies the `span` if it matches the provided matcher.
|
|
54
|
+
#
|
|
55
|
+
# @param [Datadog::Tracing::SpanOperation] span_op span to be sampled
|
|
56
|
+
# @return [:kept,:rejected] should this span be sampled?
|
|
57
|
+
# @return [:not_matched] span did not satisfy the matcher, no changes are made to the span
|
|
58
|
+
def sample!(span_op)
|
|
59
|
+
return :not_matched unless @matcher.match?(span_op)
|
|
60
|
+
|
|
61
|
+
if @sampler.sample?(span_op) && @rate_limiter.allow?(1)
|
|
62
|
+
span_op.set_metric(Span::Ext::TAG_MECHANISM, Sampling::Ext::Mechanism::SPAN_SAMPLING_RATE)
|
|
63
|
+
span_op.set_metric(Span::Ext::TAG_RULE_RATE, @sample_rate)
|
|
64
|
+
span_op.set_metric(Span::Ext::TAG_MAX_PER_SECOND, @rate_limit)
|
|
65
|
+
:kept
|
|
66
|
+
else
|
|
67
|
+
:rejected
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
return super unless other.is_a?(Rule)
|
|
73
|
+
|
|
74
|
+
matcher == other.matcher &&
|
|
75
|
+
sample_rate == other.sample_rate &&
|
|
76
|
+
rate_limit == other.rate_limit
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
require_relative 'ext'
|
|
6
|
+
require_relative 'matcher'
|
|
7
|
+
require_relative 'rule'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Tracing
|
|
11
|
+
module Sampling
|
|
12
|
+
module Span
|
|
13
|
+
# Converts user configuration into {Datadog::Tracing::Sampling::Span::Rule} objects,
|
|
14
|
+
# handling any parsing errors.
|
|
15
|
+
module RuleParser
|
|
16
|
+
class << self
|
|
17
|
+
# Parses the provided JSON string containing the Single Span
|
|
18
|
+
# Sampling configuration list.
|
|
19
|
+
# In case of parsing errors, `nil` is returned.
|
|
20
|
+
#
|
|
21
|
+
# @param rules [String] the JSON configuration rules to be parsed
|
|
22
|
+
# @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
|
|
23
|
+
# @return [nil] if parsing failed
|
|
24
|
+
def parse_json(rules)
|
|
25
|
+
return nil unless rules
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
list = JSON.parse(rules)
|
|
29
|
+
rescue => e
|
|
30
|
+
Datadog.logger.warn(
|
|
31
|
+
"Error parsing Span Sampling Rules `#{rules.inspect}`: "\
|
|
32
|
+
"#{e.class.name} #{e.message} at #{Array(e.backtrace).first}"
|
|
33
|
+
)
|
|
34
|
+
return nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
parse_list(list)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Parses a list of Hashes containing the parsed JSON information
|
|
41
|
+
# for Single Span Sampling configuration.
|
|
42
|
+
# In case of parsing errors, `nil` is returned.
|
|
43
|
+
#
|
|
44
|
+
# @param rules [Array<String] the JSON configuration rules to be parsed
|
|
45
|
+
# @return [Array<Datadog::Tracing::Sampling::Span::Rule>] a list of parsed rules
|
|
46
|
+
# @return [nil] if parsing failed
|
|
47
|
+
def parse_list(rules)
|
|
48
|
+
unless rules.is_a?(Array)
|
|
49
|
+
Datadog.logger.warn("Span Sampling Rules are not an array: #{rules.inspect}")
|
|
50
|
+
return nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
parsed = rules.map do |hash|
|
|
54
|
+
unless hash.is_a?(Hash)
|
|
55
|
+
Datadog.logger.warn("Span Sampling Rule is not a key-value object: #{hash.inspect}")
|
|
56
|
+
return nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
begin
|
|
60
|
+
parse_rule(hash)
|
|
61
|
+
rescue => e
|
|
62
|
+
Datadog.logger.warn(
|
|
63
|
+
"Cannot parse Span Sampling Rule #{hash.inspect}: " \
|
|
64
|
+
"#{e.class.name} #{e} at #{Array(e.backtrace).first}"
|
|
65
|
+
)
|
|
66
|
+
return nil
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
parsed.compact!
|
|
71
|
+
parsed
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def parse_rule(hash)
|
|
77
|
+
matcher_options = {}
|
|
78
|
+
if (name_pattern = hash['name'])
|
|
79
|
+
matcher_options[:name_pattern] = name_pattern
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if (service_pattern = hash['service'])
|
|
83
|
+
matcher_options[:service_pattern] = service_pattern
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
matcher = Matcher.new(**matcher_options)
|
|
87
|
+
|
|
88
|
+
rule_options = {}
|
|
89
|
+
if (sample_rate = hash['sample_rate'])
|
|
90
|
+
rule_options[:sample_rate] = sample_rate
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
if (max_per_second = hash['max_per_second'])
|
|
94
|
+
rule_options[:rate_limit] = max_per_second
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
Rule.new(matcher, **rule_options)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -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
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
require 'time'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
require_relative '../core'
|
|
6
|
+
require_relative '../core/environment/identity'
|
|
7
|
+
require_relative '../core/utils'
|
|
8
|
+
require_relative '../core/utils/time'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
require_relative 'event'
|
|
11
|
+
require_relative 'metadata'
|
|
12
|
+
require_relative 'metadata/ext'
|
|
13
|
+
require_relative 'span'
|
|
14
|
+
require_relative 'utils'
|
|
14
15
|
|
|
15
16
|
module Datadog
|
|
16
17
|
module Tracing
|
|
@@ -18,7 +19,6 @@ module Datadog
|
|
|
18
19
|
# It gives a Span a context which can be used to
|
|
19
20
|
# build a Span. When completed, it yields the Span.
|
|
20
21
|
#
|
|
21
|
-
# rubocop:disable Metrics/ClassLength
|
|
22
22
|
# @public_api
|
|
23
23
|
class SpanOperation
|
|
24
24
|
include Metadata
|
|
@@ -62,9 +62,9 @@ module Datadog
|
|
|
62
62
|
self.type = type
|
|
63
63
|
self.resource = resource
|
|
64
64
|
|
|
65
|
-
@id =
|
|
65
|
+
@id = Tracing::Utils.next_id
|
|
66
66
|
@parent_id = parent_id || 0
|
|
67
|
-
@trace_id = trace_id ||
|
|
67
|
+
@trace_id = trace_id || Tracing::Utils.next_id
|
|
68
68
|
|
|
69
69
|
@status = 0
|
|
70
70
|
|
|
@@ -468,7 +468,8 @@ module Datadog
|
|
|
468
468
|
start_time: @start_time,
|
|
469
469
|
status: @status,
|
|
470
470
|
type: @type,
|
|
471
|
-
trace_id: @trace_id
|
|
471
|
+
trace_id: @trace_id,
|
|
472
|
+
service_entry: parent.nil? || (service && parent.service != service)
|
|
472
473
|
)
|
|
473
474
|
end
|
|
474
475
|
|
|
@@ -515,6 +516,5 @@ module Datadog
|
|
|
515
516
|
alias :span_type :type
|
|
516
517
|
alias :span_type= :type=
|
|
517
518
|
end
|
|
518
|
-
# rubocop:enable Metrics/ClassLength
|
|
519
519
|
end
|
|
520
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
|