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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'payload'
|
|
4
|
+
require_relative 'message_set'
|
|
5
|
+
require_relative 'builder'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
require_relative '../events/stack'
|
|
8
|
+
require_relative 'stack_sample'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module Profiling
|
|
@@ -4,6 +4,8 @@ module Datadog
|
|
|
4
4
|
module Profiling
|
|
5
5
|
# Profiling entry point, which coordinates collectors and a scheduler
|
|
6
6
|
class Profiler
|
|
7
|
+
include Datadog::Core::Utils::Forking
|
|
8
|
+
|
|
7
9
|
attr_reader \
|
|
8
10
|
:collectors,
|
|
9
11
|
:scheduler
|
|
@@ -14,6 +16,11 @@ module Datadog
|
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
def start
|
|
19
|
+
after_fork! do
|
|
20
|
+
collectors.each(&:reset_after_fork)
|
|
21
|
+
scheduler.reset_after_fork
|
|
22
|
+
end
|
|
23
|
+
|
|
17
24
|
collectors.each(&:start)
|
|
18
25
|
scheduler.start
|
|
19
26
|
end
|
|
@@ -1,42 +1,41 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core/utils/time'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative '../core/worker'
|
|
6
|
+
require_relative '../core/workers/polling'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Profiling
|
|
10
|
-
# Periodically (every DEFAULT_INTERVAL_SECONDS) takes
|
|
11
|
-
#
|
|
10
|
+
# Periodically (every DEFAULT_INTERVAL_SECONDS) takes a profile from the `Exporter` and reports it using the
|
|
11
|
+
# configured transport. Runs on its own background thread.
|
|
12
12
|
class Scheduler < Core::Worker
|
|
13
13
|
include Core::Workers::Polling
|
|
14
14
|
|
|
15
15
|
DEFAULT_INTERVAL_SECONDS = 60
|
|
16
16
|
MINIMUM_INTERVAL_SECONDS = 0
|
|
17
17
|
|
|
18
|
-
# Profiles with duration less than this will not be reported
|
|
19
|
-
PROFILE_DURATION_THRESHOLD_SECONDS = 1
|
|
20
|
-
|
|
21
18
|
# We sleep for at most this duration seconds before reporting data to avoid multi-process applications all
|
|
22
19
|
# reporting profiles at the exact same time
|
|
23
20
|
DEFAULT_FLUSH_JITTER_MAXIMUM_SECONDS = 3
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
private
|
|
26
23
|
|
|
27
24
|
attr_reader \
|
|
28
|
-
:
|
|
29
|
-
:
|
|
25
|
+
:exporter,
|
|
26
|
+
:transport
|
|
27
|
+
|
|
28
|
+
public
|
|
30
29
|
|
|
31
30
|
def initialize(
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
exporter:,
|
|
32
|
+
transport:,
|
|
34
33
|
fork_policy: Core::Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default
|
|
35
34
|
interval: DEFAULT_INTERVAL_SECONDS,
|
|
36
35
|
enabled: true
|
|
37
36
|
)
|
|
38
|
-
@
|
|
39
|
-
@
|
|
37
|
+
@exporter = exporter
|
|
38
|
+
@transport = transport
|
|
40
39
|
|
|
41
40
|
# Workers::Async::Thread settings
|
|
42
41
|
self.fork_policy = fork_policy
|
|
@@ -67,24 +66,21 @@ module Datadog
|
|
|
67
66
|
end
|
|
68
67
|
end
|
|
69
68
|
|
|
70
|
-
def after_fork
|
|
71
|
-
# Clear recorder's buffers by flushing events.
|
|
72
|
-
# Objects from parent process will copy-on-write,
|
|
73
|
-
# and we don't want to send events for the wrong process.
|
|
74
|
-
recorder.flush
|
|
75
|
-
end
|
|
76
|
-
|
|
77
69
|
# Configure Workers::IntervalLoop to not report immediately when scheduler starts
|
|
78
70
|
#
|
|
79
71
|
# When a scheduler gets created (or reset), we don't want it to immediately try to flush; we want it to wait for
|
|
80
72
|
# the loop wait time first. This avoids an issue where the scheduler reported a mostly-empty profile if the
|
|
81
|
-
# application just started but this thread took a bit longer so there's already
|
|
73
|
+
# application just started but this thread took a bit longer so there's already profiling data in the exporter.
|
|
82
74
|
def loop_wait_before_first_iteration?
|
|
83
75
|
true
|
|
84
76
|
end
|
|
85
77
|
|
|
86
78
|
def work_pending?
|
|
87
|
-
|
|
79
|
+
exporter.can_flush?
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def reset_after_fork
|
|
83
|
+
exporter.reset_after_fork
|
|
88
84
|
end
|
|
89
85
|
|
|
90
86
|
private
|
|
@@ -100,21 +96,15 @@ module Datadog
|
|
|
100
96
|
end
|
|
101
97
|
|
|
102
98
|
def flush_events
|
|
103
|
-
#
|
|
104
|
-
flush =
|
|
99
|
+
# Collect data to be exported
|
|
100
|
+
flush = exporter.flush
|
|
105
101
|
|
|
106
|
-
|
|
107
|
-
Datadog.logger.debug do
|
|
108
|
-
"Skipped exporting profiling events as profile duration is below minimum (#{flush.event_count} events skipped)"
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
return flush
|
|
112
|
-
end
|
|
102
|
+
return false unless flush
|
|
113
103
|
|
|
114
104
|
# Sleep for a bit to cause misalignment between profilers in multi-process applications
|
|
115
105
|
#
|
|
116
106
|
# When not being run in a loop, it means the scheduler has not been started or was stopped, and thus
|
|
117
|
-
# a) it's being
|
|
107
|
+
# a) it's being shut down (and is trying to report the last profile)
|
|
118
108
|
# b) it's being run as a one-shot, usually in a test
|
|
119
109
|
# ...so in those cases we don't sleep
|
|
120
110
|
#
|
|
@@ -127,24 +117,13 @@ module Datadog
|
|
|
127
117
|
sleep(jitter_seconds)
|
|
128
118
|
end
|
|
129
119
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
exporter.export(flush)
|
|
135
|
-
rescue StandardError => e
|
|
136
|
-
Datadog.logger.error(
|
|
137
|
-
"Unable to export #{flush.event_count} profiling events. Cause: #{e} Location: #{Array(e.backtrace).first}"
|
|
138
|
-
)
|
|
139
|
-
end
|
|
140
|
-
end
|
|
120
|
+
begin
|
|
121
|
+
transport.export(flush)
|
|
122
|
+
rescue StandardError => e
|
|
123
|
+
Datadog.logger.error("Unable to report profile. Cause: #{e} Location: #{Array(e.backtrace).first}")
|
|
141
124
|
end
|
|
142
125
|
|
|
143
|
-
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
def duration_below_threshold?(flush)
|
|
147
|
-
(flush.finish - flush.start) < PROFILE_DURATION_THRESHOLD_SECONDS
|
|
126
|
+
true
|
|
148
127
|
end
|
|
149
128
|
end
|
|
150
129
|
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
|
|
3
|
+
module Datadog
|
|
4
|
+
module Profiling
|
|
5
|
+
# Stores stack samples in a native libdatadog data structure and expose Ruby-level serialization APIs
|
|
6
|
+
# Note that `record_sample` is only accessible from native code.
|
|
7
|
+
# Methods prefixed with _native_ are implemented in `stack_recorder.c`
|
|
8
|
+
class StackRecorder
|
|
9
|
+
def initialize
|
|
10
|
+
# This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
|
|
11
|
+
# It prevents multiple Ruby threads calling serialize at the same time -- something like
|
|
12
|
+
# `10.times { Thread.new { stack_recorder.serialize } }`.
|
|
13
|
+
# This isn't something we expect to happen normally, but because it would break the assumptions of the
|
|
14
|
+
# C-level mutexes (that there is a single serializer thread), we add it here as an extra safeguard against it
|
|
15
|
+
# accidentally happening.
|
|
16
|
+
@no_concurrent_synchronize_mutex = Mutex.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def serialize
|
|
20
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
21
|
+
|
|
22
|
+
if status == :ok
|
|
23
|
+
start, finish, encoded_pprof = result
|
|
24
|
+
|
|
25
|
+
Datadog.logger.debug { "Encoded profile covering #{start.iso8601} to #{finish.iso8601}" }
|
|
26
|
+
|
|
27
|
+
[start, finish, encoded_pprof]
|
|
28
|
+
else
|
|
29
|
+
error_message = result
|
|
30
|
+
|
|
31
|
+
Datadog.logger.error("Failed to serialize profiling data: #{error_message}")
|
|
32
|
+
|
|
33
|
+
nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def serialize!
|
|
38
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
39
|
+
|
|
40
|
+
if status == :ok
|
|
41
|
+
_start, _finish, encoded_pprof = result
|
|
42
|
+
|
|
43
|
+
encoded_pprof
|
|
44
|
+
else
|
|
45
|
+
error_message = result
|
|
46
|
+
|
|
47
|
+
raise("Failed to serialize profiling data: #{error_message}")
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def clear
|
|
52
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_clear(self) }
|
|
53
|
+
|
|
54
|
+
if status == :ok
|
|
55
|
+
finish_timestamp = result
|
|
56
|
+
|
|
57
|
+
Datadog.logger.debug { "Cleared profile at #{finish_timestamp}" }
|
|
58
|
+
|
|
59
|
+
finish_timestamp
|
|
60
|
+
else
|
|
61
|
+
error_message = result
|
|
62
|
+
|
|
63
|
+
Datadog.logger.error("Failed to clear profiling data: #{error_message}")
|
|
64
|
+
|
|
65
|
+
nil
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Used only for Ruby 2.2 which doesn't have the native `rb_time_timespec_new` API; called from native code
|
|
70
|
+
def self.ruby_time_from(timespec_seconds, timespec_nanoseconds)
|
|
71
|
+
Time.at(0).utc + timespec_seconds + (timespec_nanoseconds.to_r / 1_000_000_000)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def reset_after_fork
|
|
75
|
+
self.class._native_reset_after_fork(self)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
|
|
3
|
+
require_relative '../core/utils'
|
|
4
|
+
|
|
5
|
+
module Datadog
|
|
6
|
+
module Profiling
|
|
7
|
+
# Builds a hash of default plus user tags to be included in a profile
|
|
8
|
+
module TagBuilder
|
|
9
|
+
include Datadog::Profiling::Ext::Transport::HTTP # Tag name constants
|
|
10
|
+
|
|
11
|
+
def self.call(
|
|
12
|
+
settings:,
|
|
13
|
+
# Unified service tagging
|
|
14
|
+
env: settings.env,
|
|
15
|
+
service: settings.service,
|
|
16
|
+
version: settings.version,
|
|
17
|
+
# Other metadata
|
|
18
|
+
host: Core::Environment::Socket.hostname,
|
|
19
|
+
language: Core::Environment::Identity.lang,
|
|
20
|
+
pid: Process.pid.to_s,
|
|
21
|
+
profiler_version: Core::Environment::Identity.tracer_version,
|
|
22
|
+
runtime_engine: Core::Environment::Identity.lang_engine,
|
|
23
|
+
runtime_id: Core::Environment::Identity.id,
|
|
24
|
+
runtime_platform: Core::Environment::Identity.lang_platform,
|
|
25
|
+
runtime_version: Core::Environment::Identity.lang_version,
|
|
26
|
+
# User-provided tags
|
|
27
|
+
user_tags: settings.tags
|
|
28
|
+
)
|
|
29
|
+
tags = {
|
|
30
|
+
# When changing or adding these, make sure they are kept in sync with
|
|
31
|
+
# https://docs.google.com/spreadsheets/d/1LOGMf4c4Avbtn36uZ2SWvhIGKRPLM1BoWkUP4JYj7hA/ (Datadog internal link)
|
|
32
|
+
FORM_FIELD_TAG_HOST => host,
|
|
33
|
+
FORM_FIELD_TAG_LANGUAGE => language,
|
|
34
|
+
FORM_FIELD_TAG_PID => pid,
|
|
35
|
+
FORM_FIELD_TAG_PROFILER_VERSION => profiler_version,
|
|
36
|
+
FORM_FIELD_TAG_RUNTIME => language, # This is known to be repeated from language, above
|
|
37
|
+
FORM_FIELD_TAG_RUNTIME_ENGINE => runtime_engine,
|
|
38
|
+
FORM_FIELD_TAG_RUNTIME_ID => runtime_id,
|
|
39
|
+
FORM_FIELD_TAG_RUNTIME_PLATFORM => runtime_platform,
|
|
40
|
+
FORM_FIELD_TAG_RUNTIME_VERSION => runtime_version,
|
|
41
|
+
}
|
|
42
|
+
tags[FORM_FIELD_TAG_ENV] = env if env
|
|
43
|
+
tags[FORM_FIELD_TAG_SERVICE] = service if service
|
|
44
|
+
tags[FORM_FIELD_TAG_VERSION] = version if version
|
|
45
|
+
|
|
46
|
+
# Make sure everything is an utf-8 string, to avoid encoding issues in native code/libddprof/further downstream
|
|
47
|
+
user_tags.merge(tags).map do |key, value|
|
|
48
|
+
[Datadog::Core::Utils.utf8_encode(key), Datadog::Core::Utils.utf8_encode(value)]
|
|
49
|
+
end.to_h
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -38,10 +38,10 @@ module Datadog
|
|
|
38
38
|
def exec_with_error_handling(args)
|
|
39
39
|
Kernel.exec(*args)
|
|
40
40
|
rescue Errno::ENOENT => e
|
|
41
|
-
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
41
|
+
Kernel.warn "ddtracerb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(' ')}')"
|
|
42
42
|
Kernel.exit 127
|
|
43
43
|
rescue Errno::EACCES, Errno::ENOEXEC => e
|
|
44
|
-
Kernel.warn "ddtracerb exec failed: #{e.message} (command was '#{args.join(' ')}')"
|
|
44
|
+
Kernel.warn "ddtracerb exec failed: #{e.class.name} #{e.message} (command was '#{args.join(' ')}')"
|
|
45
45
|
Kernel.exit 126
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
require 'datadog/profiling/ext/forking'
|
|
3
|
+
require_relative '../../core/utils/only_once'
|
|
4
|
+
require_relative '../ext/forking'
|
|
6
5
|
|
|
7
6
|
module Datadog
|
|
8
7
|
module Profiling
|
|
@@ -19,7 +18,8 @@ module Datadog
|
|
|
19
18
|
setup_at_fork_hooks
|
|
20
19
|
rescue StandardError, ScriptError => e
|
|
21
20
|
Datadog.logger.warn do
|
|
22
|
-
"Profiler extensions unavailable. Cause: #{e.
|
|
21
|
+
"Profiler extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
|
22
|
+
"Location: #{Array(e.backtrace).first}"
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -35,7 +35,8 @@ module Datadog
|
|
|
35
35
|
end
|
|
36
36
|
rescue StandardError, ScriptError => e
|
|
37
37
|
Datadog.logger.warn do
|
|
38
|
-
"Profiler forking extensions unavailable. Cause: #{e.
|
|
38
|
+
"Profiler forking extensions unavailable. Cause: #{e.class.name} #{e.message} " \
|
|
39
|
+
"Location: #{Array(e.backtrace).first}"
|
|
39
40
|
end
|
|
40
41
|
end
|
|
41
42
|
|
|
@@ -54,18 +55,12 @@ module Datadog
|
|
|
54
55
|
if Process.respond_to?(:at_fork)
|
|
55
56
|
Process.at_fork(:child) do
|
|
56
57
|
begin
|
|
57
|
-
# When Ruby forks, clock IDs for each of the threads
|
|
58
|
-
# will change. We can only update these IDs from the
|
|
59
|
-
# execution context of the thread that owns it.
|
|
60
|
-
# This hook will update the IDs for the main thread
|
|
61
|
-
# after a fork occurs.
|
|
62
|
-
Thread.current.send(:update_native_ids) if Thread.current.respond_to?(:update_native_ids, true)
|
|
63
|
-
|
|
64
58
|
# Restart profiler, if enabled
|
|
65
59
|
Profiling.start_if_enabled
|
|
66
60
|
rescue StandardError => e
|
|
67
61
|
Datadog.logger.warn do
|
|
68
|
-
"Error during post-fork hooks. Cause: #{e.
|
|
62
|
+
"Error during post-fork hooks. Cause: #{e.class.name} #{e.message} " \
|
|
63
|
+
"Location: #{Array(e.backtrace).first}"
|
|
69
64
|
end
|
|
70
65
|
end
|
|
71
66
|
end
|
data/lib/datadog/profiling.rb
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'core'
|
|
4
|
+
require_relative 'core/environment/variable_helpers'
|
|
5
|
+
require_relative 'core/utils/only_once'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
# Contains profiler for generating stack profiles, etc.
|
|
9
|
-
module Profiling
|
|
9
|
+
module Profiling
|
|
10
10
|
GOOGLE_PROTOBUF_MINIMUM_VERSION = Gem::Version.new('3.0')
|
|
11
11
|
private_constant :GOOGLE_PROTOBUF_MINIMUM_VERSION
|
|
12
12
|
|
|
13
|
-
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE = Core::Utils::OnlyOnce.new
|
|
14
|
-
private_constant :SKIPPED_NATIVE_EXTENSION_ONLY_ONCE
|
|
15
|
-
|
|
16
13
|
def self.supported?
|
|
17
14
|
unsupported_reason.nil?
|
|
18
15
|
end
|
|
@@ -21,7 +18,7 @@ module Datadog
|
|
|
21
18
|
# NOTE: Only the first matching reason is returned, so try to keep a nice order on reasons -- e.g. tell users
|
|
22
19
|
# first that they can't use this on JRuby before telling them that they are missing protobuf
|
|
23
20
|
|
|
24
|
-
|
|
21
|
+
native_library_compilation_skipped? ||
|
|
25
22
|
native_library_failed_to_load? ||
|
|
26
23
|
protobuf_gem_unavailable? ||
|
|
27
24
|
protobuf_version_unsupported? ||
|
|
@@ -44,8 +41,24 @@ module Datadog
|
|
|
44
41
|
!!profiler
|
|
45
42
|
end
|
|
46
43
|
|
|
47
|
-
private_class_method def self.
|
|
48
|
-
|
|
44
|
+
private_class_method def self.native_library_compilation_skipped?
|
|
45
|
+
skipped_reason = try_reading_skipped_reason_file
|
|
46
|
+
|
|
47
|
+
"Your ddtrace installation is missing support for the Continuous Profiler because #{skipped_reason}" if skipped_reason
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private_class_method def self.try_reading_skipped_reason_file(file_api = File)
|
|
51
|
+
# This file, if it exists, is recorded by extconf.rb during compilation of the native extension
|
|
52
|
+
skipped_reason_file = "#{__dir__}/../../ext/ddtrace_profiling_native_extension/skipped_reason.txt"
|
|
53
|
+
|
|
54
|
+
begin
|
|
55
|
+
return unless file_api.exist?(skipped_reason_file)
|
|
56
|
+
|
|
57
|
+
contents = file_api.read(skipped_reason_file).strip
|
|
58
|
+
contents unless contents.empty?
|
|
59
|
+
rescue StandardError
|
|
60
|
+
# Do nothing
|
|
61
|
+
end
|
|
49
62
|
end
|
|
50
63
|
|
|
51
64
|
private_class_method def self.protobuf_gem_unavailable?
|
|
@@ -93,12 +106,11 @@ module Datadog
|
|
|
93
106
|
# In the future it'd be nice to shuffle the logger startup to happen first to avoid this special case.
|
|
94
107
|
Kernel.warn(
|
|
95
108
|
'[DDTRACE] Error while loading google-protobuf gem. ' \
|
|
96
|
-
"Cause: '#{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
109
|
+
"Cause: '#{e.class.name} #{e.message}' Location: '#{Array(e.backtrace).first}'. " \
|
|
97
110
|
'This can happen when google-protobuf is missing its native components. ' \
|
|
98
111
|
'To fix this, try removing and reinstalling the gem, forcing it to recompile the components: ' \
|
|
99
112
|
'`gem uninstall google-protobuf -a; BUNDLE_FORCE_RUBY_PLATFORM=true bundle install`. ' \
|
|
100
|
-
'If the error persists, please contact support
|
|
101
|
-
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
113
|
+
'If the error persists, please contact Datadog support at <https://docs.datadoghq.com/help/>.'
|
|
102
114
|
)
|
|
103
115
|
@protobuf_loaded = false
|
|
104
116
|
end
|
|
@@ -110,31 +122,18 @@ module Datadog
|
|
|
110
122
|
unless success
|
|
111
123
|
if exception
|
|
112
124
|
'There was an error loading the profiling native extension due to ' \
|
|
113
|
-
"'#{exception.message}' at '#{exception.backtrace.first}'"
|
|
125
|
+
"'#{exception.class.name} #{exception.message}' at '#{exception.backtrace.first}'"
|
|
114
126
|
else
|
|
115
127
|
'The profiling native extension did not load correctly. ' \
|
|
116
|
-
'
|
|
117
|
-
'file a bug at <https://github.com/DataDog/dd-trace-rb/blob/master/CONTRIBUTING.md#found-a-bug>.'
|
|
128
|
+
'For help solving this issue, please contact Datadog support at <https://docs.datadoghq.com/help/>.' \
|
|
118
129
|
end
|
|
119
130
|
end
|
|
120
131
|
end
|
|
121
132
|
|
|
122
133
|
private_class_method def self.try_loading_native_library
|
|
123
|
-
if Core::Environment::VariableHelpers.env_to_bool('DD_PROFILING_NO_EXTENSION', false)
|
|
124
|
-
SKIPPED_NATIVE_EXTENSION_ONLY_ONCE.run do
|
|
125
|
-
Kernel.warn(
|
|
126
|
-
'[DDTRACE] Skipped loading of profiling native extension due to DD_PROFILING_NO_EXTENSION environment ' \
|
|
127
|
-
'variable being set. ' \
|
|
128
|
-
'This option is experimental and will lead to the profiler not working in future releases. ' \
|
|
129
|
-
'If you needed to use this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>.'
|
|
130
|
-
)
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
return [true, nil]
|
|
134
|
-
end
|
|
135
|
-
|
|
136
134
|
begin
|
|
137
|
-
|
|
135
|
+
require_relative 'profiling/load_native_extension'
|
|
136
|
+
|
|
138
137
|
success =
|
|
139
138
|
defined?(Profiling::NativeExtension) && Profiling::NativeExtension.send(:native_working?)
|
|
140
139
|
[success, nil]
|
|
@@ -146,23 +145,29 @@ module Datadog
|
|
|
146
145
|
private_class_method def self.load_profiling
|
|
147
146
|
return false unless supported?
|
|
148
147
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
148
|
+
require_relative 'profiling/ext/forking'
|
|
149
|
+
require_relative 'profiling/collectors/code_provenance'
|
|
150
|
+
require_relative 'profiling/collectors/cpu_and_wall_time'
|
|
151
|
+
require_relative 'profiling/collectors/cpu_and_wall_time_worker'
|
|
152
|
+
require_relative 'profiling/collectors/dynamic_sampling_rate'
|
|
153
|
+
require_relative 'profiling/collectors/idle_sampling_helper'
|
|
154
|
+
require_relative 'profiling/collectors/old_stack'
|
|
155
|
+
require_relative 'profiling/collectors/stack'
|
|
156
|
+
require_relative 'profiling/stack_recorder'
|
|
157
|
+
require_relative 'profiling/old_recorder'
|
|
158
|
+
require_relative 'profiling/exporter'
|
|
159
|
+
require_relative 'profiling/scheduler'
|
|
160
|
+
require_relative 'profiling/tasks/setup'
|
|
161
|
+
require_relative 'profiling/profiler'
|
|
162
|
+
require_relative 'profiling/native_extension'
|
|
163
|
+
require_relative 'profiling/trace_identifiers/helper'
|
|
164
|
+
require_relative 'profiling/pprof/pprof_pb'
|
|
165
|
+
require_relative 'profiling/tag_builder'
|
|
166
|
+
require_relative 'profiling/http_transport'
|
|
162
167
|
|
|
163
168
|
true
|
|
164
169
|
end
|
|
165
170
|
|
|
166
|
-
load_profiling
|
|
171
|
+
load_profiling
|
|
167
172
|
end
|
|
168
173
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
require_relative '../core'
|
|
4
|
+
require_relative '../core/environment/ext'
|
|
5
|
+
require_relative '../core/buffer/thread_safe'
|
|
6
|
+
require_relative '../core/buffer/cruby'
|
|
7
|
+
require_relative '../core/diagnostics/health'
|
|
8
8
|
|
|
9
9
|
module Datadog
|
|
10
10
|
module Tracing
|
|
@@ -58,7 +58,9 @@ module Datadog
|
|
|
58
58
|
|
|
59
59
|
@buffer_spans += trace.length
|
|
60
60
|
rescue StandardError => e
|
|
61
|
-
Datadog.logger.debug(
|
|
61
|
+
Datadog.logger.debug(
|
|
62
|
+
"Failed to measure queue accept. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
63
|
+
)
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
def measure_drop(trace)
|
|
@@ -66,7 +68,9 @@ module Datadog
|
|
|
66
68
|
|
|
67
69
|
@buffer_spans -= trace.length
|
|
68
70
|
rescue StandardError => e
|
|
69
|
-
Datadog.logger.debug(
|
|
71
|
+
Datadog.logger.debug(
|
|
72
|
+
"Failed to measure queue drop. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
73
|
+
)
|
|
70
74
|
end
|
|
71
75
|
|
|
72
76
|
def measure_pop(traces)
|
|
@@ -89,7 +93,9 @@ module Datadog
|
|
|
89
93
|
@buffer_dropped = 0
|
|
90
94
|
@buffer_spans = 0
|
|
91
95
|
rescue StandardError => e
|
|
92
|
-
Datadog.logger.debug(
|
|
96
|
+
Datadog.logger.debug(
|
|
97
|
+
"Failed to measure queue. Cause: #{e.class.name} #{e.message} Source: #{Array(e.backtrace).first}"
|
|
98
|
+
)
|
|
93
99
|
end
|
|
94
100
|
end
|
|
95
101
|
|