ddtrace 1.2.0 → 1.10.1
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 +442 -2
- data/LICENSE-3rdparty.csv +4 -0
- data/README.md +2 -2
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +20 -4
- data/ext/ddtrace_profiling_loader/extconf.rb +21 -3
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +46 -3
- data/ext/ddtrace_profiling_native_extension/clock_id.h +21 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +33 -2
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +10 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +821 -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 +186 -85
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +13 -2
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.c +978 -0
- data/ext/ddtrace_profiling_native_extension/collectors_thread_context.h +14 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +54 -34
- data/ext/ddtrace_profiling_native_extension/helpers.h +17 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +127 -121
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +25 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +82 -37
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +189 -139
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +15 -6
- data/ext/ddtrace_profiling_native_extension/profiling.c +221 -5
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +110 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +57 -1
- 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 +489 -45
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +12 -35
- 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 +1722 -636
- data/lib/datadog/appsec/assets/waf_rules/strict.json +366 -74
- data/lib/datadog/appsec/assets.rb +2 -4
- data/lib/datadog/appsec/autoload.rb +5 -10
- data/lib/datadog/appsec/component.rb +41 -0
- data/lib/datadog/appsec/configuration/settings.rb +46 -24
- data/lib/datadog/appsec/configuration.rb +12 -4
- data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -4
- data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -3
- data/lib/datadog/appsec/contrib/integration.rb +0 -2
- data/lib/datadog/appsec/contrib/patcher.rb +0 -2
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/rack/ext.rb +0 -2
- data/lib/datadog/appsec/contrib/rack/gateway/request.rb +97 -0
- data/lib/datadog/appsec/contrib/rack/gateway/response.rb +30 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +117 -110
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -7
- data/lib/datadog/appsec/contrib/rack/patcher.rb +4 -4
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +31 -38
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +21 -22
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +21 -22
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +9 -7
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +80 -39
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/rails/ext.rb +0 -2
- data/lib/datadog/appsec/contrib/rails/framework.rb +0 -2
- data/lib/datadog/appsec/contrib/rails/gateway/request.rb +67 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +45 -40
- data/lib/datadog/appsec/contrib/rails/integration.rb +5 -7
- data/lib/datadog/appsec/contrib/rails/patcher.rb +17 -16
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +24 -23
- data/lib/datadog/appsec/contrib/rails/request.rb +3 -2
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +0 -2
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -4
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +1 -2
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +0 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/request.rb +17 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/route_params.rb +23 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +82 -75
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -6
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +33 -18
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +21 -20
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +0 -2
- data/lib/datadog/appsec/event.rb +8 -16
- data/lib/datadog/appsec/ext.rb +9 -0
- data/lib/datadog/appsec/extensions.rb +51 -23
- data/lib/datadog/appsec/instrumentation/gateway/argument.rb +24 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +26 -6
- data/lib/datadog/appsec/instrumentation.rb +9 -0
- data/lib/datadog/appsec/monitor/gateway/watcher.rb +86 -0
- data/lib/datadog/appsec/monitor/reactive/set_user.rb +61 -0
- data/lib/datadog/appsec/monitor.rb +11 -0
- data/lib/datadog/appsec/processor.rb +110 -31
- data/lib/datadog/appsec/rate_limiter.rb +0 -2
- data/lib/datadog/appsec/reactive/address_hash.rb +6 -2
- data/lib/datadog/appsec/reactive/engine.rb +12 -9
- data/lib/datadog/appsec/reactive/operation.rb +22 -5
- data/lib/datadog/appsec/reactive/subscriber.rb +2 -1
- data/lib/datadog/appsec/response.rb +61 -0
- data/lib/datadog/appsec/utils/http/media_range.rb +199 -0
- data/lib/datadog/appsec/utils/http/media_type.rb +85 -0
- data/lib/datadog/appsec/utils/http.rb +9 -0
- data/lib/datadog/appsec/utils.rb +7 -0
- data/lib/datadog/appsec.rb +25 -7
- data/lib/datadog/ci/configuration/components.rb +1 -3
- data/lib/datadog/ci/configuration/settings.rb +1 -3
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -4
- data/lib/datadog/ci/contrib/cucumber/ext.rb +0 -2
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -7
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -3
- data/lib/datadog/ci/contrib/cucumber/integration.rb +4 -6
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -4
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -4
- data/lib/datadog/ci/contrib/rspec/example.rb +5 -7
- data/lib/datadog/ci/contrib/rspec/ext.rb +0 -2
- data/lib/datadog/ci/contrib/rspec/integration.rb +4 -6
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -4
- data/lib/datadog/ci/ext/app_types.rb +0 -2
- data/lib/datadog/ci/ext/environment.rb +77 -41
- data/lib/datadog/ci/ext/settings.rb +0 -2
- data/lib/datadog/ci/ext/test.rb +0 -2
- data/lib/datadog/ci/extensions.rb +4 -6
- data/lib/datadog/ci/flush.rb +2 -4
- data/lib/datadog/ci/test.rb +3 -5
- data/lib/datadog/ci.rb +6 -8
- data/lib/datadog/core/buffer/cruby.rb +1 -3
- data/lib/datadog/core/buffer/random.rb +0 -2
- data/lib/datadog/core/buffer/thread_safe.rb +1 -3
- data/lib/datadog/core/chunker.rb +0 -2
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +8 -28
- data/lib/datadog/core/configuration/base.rb +14 -4
- data/lib/datadog/core/configuration/components.rb +31 -299
- data/lib/datadog/core/configuration/dependency_resolver.rb +0 -2
- data/lib/datadog/core/configuration/ext.rb +24 -0
- data/lib/datadog/core/configuration/option.rb +0 -2
- data/lib/datadog/core/configuration/option_definition.rb +12 -5
- data/lib/datadog/core/configuration/option_definition_set.rb +1 -3
- data/lib/datadog/core/configuration/option_set.rb +0 -2
- data/lib/datadog/core/configuration/options.rb +3 -5
- data/lib/datadog/core/configuration/settings.rb +87 -257
- data/lib/datadog/core/configuration.rb +9 -10
- data/lib/datadog/core/diagnostics/environment_logger.rb +10 -7
- data/lib/datadog/core/diagnostics/health.rb +4 -24
- data/lib/datadog/core/encoding.rb +0 -4
- data/lib/datadog/core/environment/cgroup.rb +1 -5
- data/lib/datadog/core/environment/class_count.rb +0 -2
- data/lib/datadog/core/environment/container.rb +1 -5
- data/lib/datadog/core/environment/ext.rb +1 -3
- data/lib/datadog/core/environment/gc.rb +0 -2
- data/lib/datadog/core/environment/identity.rb +2 -4
- data/lib/datadog/core/environment/platform.rb +1 -3
- data/lib/datadog/core/environment/socket.rb +1 -3
- data/lib/datadog/core/environment/thread_count.rb +0 -2
- data/lib/datadog/core/environment/variable_helpers.rb +58 -12
- data/lib/datadog/core/environment/vm_cache.rb +17 -2
- data/lib/datadog/core/error.rb +1 -3
- data/lib/datadog/core/extensions.rb +1 -3
- data/lib/datadog/core/git/ext.rb +0 -2
- data/lib/datadog/core/header_collection.rb +41 -0
- data/lib/datadog/core/logger.rb +0 -2
- data/lib/datadog/core/metrics/client.rb +10 -11
- data/lib/datadog/core/metrics/ext.rb +0 -4
- data/lib/datadog/core/metrics/helpers.rb +0 -2
- data/lib/datadog/core/metrics/logging.rb +0 -2
- data/lib/datadog/core/metrics/metric.rb +0 -2
- data/lib/datadog/core/metrics/options.rb +3 -5
- data/lib/datadog/core/pin.rb +0 -2
- data/lib/datadog/core/runtime/ext.rb +3 -3
- data/lib/datadog/core/runtime/metrics.rb +27 -13
- data/lib/datadog/core/telemetry/client.rb +77 -0
- data/lib/datadog/core/telemetry/collector.rb +231 -0
- data/lib/datadog/core/telemetry/emitter.rb +46 -0
- data/lib/datadog/core/telemetry/event.rb +67 -0
- data/lib/datadog/core/telemetry/ext.rb +9 -0
- data/lib/datadog/core/telemetry/heartbeat.rb +35 -0
- data/lib/datadog/core/telemetry/http/adapters/net.rb +111 -0
- data/lib/datadog/core/telemetry/http/env.rb +18 -0
- data/lib/datadog/core/telemetry/http/ext.rb +20 -0
- data/lib/datadog/core/telemetry/http/response.rb +64 -0
- data/lib/datadog/core/telemetry/http/transport.rb +51 -0
- data/lib/datadog/core/telemetry/v1/app_event.rb +50 -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 -3
- data/lib/datadog/core/utils/forking.rb +0 -2
- data/lib/datadog/core/utils/network.rb +140 -0
- data/lib/datadog/core/utils/object_set.rb +1 -3
- data/lib/datadog/core/utils/only_once.rb +0 -2
- data/lib/datadog/core/utils/safe_dup.rb +0 -2
- data/lib/datadog/core/utils/sequence.rb +5 -2
- data/lib/datadog/core/utils/string_table.rb +1 -3
- data/lib/datadog/core/utils/time.rb +3 -7
- data/lib/datadog/core/utils.rb +1 -24
- data/lib/datadog/core/vendor/ipaddr.rb +78 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -4
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +0 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -5
- data/lib/datadog/core/worker.rb +0 -2
- data/lib/datadog/core/workers/async.rb +1 -5
- data/lib/datadog/core/workers/interval_loop.rb +0 -2
- data/lib/datadog/core/workers/polling.rb +2 -4
- data/lib/datadog/core/workers/queue.rb +0 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -6
- data/lib/datadog/core.rb +21 -56
- data/lib/datadog/kit/appsec/events.rb +74 -0
- data/lib/datadog/kit/enable_core_dumps.rb +6 -6
- data/lib/datadog/kit/identity.rb +15 -8
- data/lib/datadog/kit.rb +1 -3
- data/lib/datadog/opentelemetry/api/context.rb +186 -0
- data/lib/datadog/opentelemetry/api/trace/span.rb +14 -0
- data/lib/datadog/opentelemetry/sdk/configurator.rb +37 -0
- data/lib/datadog/opentelemetry/sdk/id_generator.rb +26 -0
- data/lib/datadog/opentelemetry/sdk/propagator.rb +90 -0
- data/lib/datadog/opentelemetry/sdk/span_processor.rb +91 -0
- data/lib/datadog/opentelemetry.rb +47 -0
- data/lib/datadog/opentracer/binary_propagator.rb +0 -2
- data/lib/datadog/opentracer/carrier.rb +0 -2
- data/lib/datadog/opentracer/distributed_headers.rb +7 -11
- data/lib/datadog/opentracer/global_tracer.rb +0 -2
- data/lib/datadog/opentracer/propagator.rb +0 -2
- data/lib/datadog/opentracer/rack_propagator.rb +10 -11
- data/lib/datadog/opentracer/scope.rb +0 -2
- data/lib/datadog/opentracer/scope_manager.rb +0 -2
- data/lib/datadog/opentracer/span.rb +1 -3
- data/lib/datadog/opentracer/span_context.rb +0 -2
- data/lib/datadog/opentracer/span_context_factory.rb +0 -2
- data/lib/datadog/opentracer/text_map_propagator.rb +13 -14
- data/lib/datadog/opentracer/thread_local_scope.rb +0 -2
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -3
- data/lib/datadog/opentracer/tracer.rb +23 -23
- data/lib/datadog/opentracer.rb +16 -18
- data/lib/datadog/profiling/backtrace_location.rb +0 -2
- data/lib/datadog/profiling/buffer.rb +3 -5
- data/lib/datadog/profiling/collectors/code_provenance.rb +0 -2
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +96 -0
- data/lib/datadog/profiling/collectors/dynamic_sampling_rate.rb +12 -0
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +66 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +16 -13
- data/lib/datadog/profiling/collectors/stack.rb +3 -10
- data/lib/datadog/profiling/collectors/thread_context.rb +46 -0
- data/lib/datadog/profiling/component.rb +161 -0
- data/lib/datadog/profiling/encoding/profile.rb +1 -3
- data/lib/datadog/profiling/event.rb +0 -2
- data/lib/datadog/profiling/events/stack.rb +1 -3
- data/lib/datadog/profiling/exporter.rb +23 -14
- data/lib/datadog/profiling/ext/forking.rb +36 -39
- data/lib/datadog/profiling/ext.rb +1 -2
- data/lib/datadog/profiling/flush.rb +0 -5
- data/lib/datadog/profiling/http_transport.rb +5 -6
- data/lib/datadog/profiling/load_native_extension.rb +0 -2
- data/lib/datadog/profiling/native_extension.rb +0 -2
- data/lib/datadog/profiling/old_recorder.rb +8 -7
- data/lib/datadog/profiling/pprof/builder.rb +4 -6
- data/lib/datadog/profiling/pprof/converter.rb +1 -3
- data/lib/datadog/profiling/pprof/message_set.rb +1 -3
- data/lib/datadog/profiling/pprof/payload.rb +0 -2
- data/lib/datadog/profiling/pprof/pprof_pb.rb +0 -2
- data/lib/datadog/profiling/pprof/stack_sample.rb +4 -6
- data/lib/datadog/profiling/pprof/string_table.rb +1 -3
- data/lib/datadog/profiling/pprof/template.rb +5 -7
- data/lib/datadog/profiling/preload.rb +1 -3
- data/lib/datadog/profiling/profiler.rb +7 -2
- data/lib/datadog/profiling/scheduler.rb +8 -12
- data/lib/datadog/profiling/stack_recorder.rb +49 -8
- data/lib/datadog/profiling/tag_builder.rb +5 -2
- data/lib/datadog/profiling/tasks/exec.rb +0 -2
- data/lib/datadog/profiling/tasks/help.rb +0 -2
- data/lib/datadog/profiling/tasks/setup.rb +2 -11
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -4
- data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -3
- data/lib/datadog/profiling.rb +67 -27
- data/lib/datadog/tracing/analytics.rb +1 -3
- data/lib/datadog/tracing/buffer.rb +5 -9
- data/lib/datadog/tracing/client_ip.rb +61 -0
- data/lib/datadog/tracing/component.rb +176 -0
- data/lib/datadog/tracing/configuration/ext.rb +49 -6
- data/lib/datadog/tracing/configuration/settings.rb +451 -0
- data/lib/datadog/tracing/context.rb +1 -3
- data/lib/datadog/tracing/context_provider.rb +2 -4
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -7
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -5
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -6
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -5
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -4
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +6 -8
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -3
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -7
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -7
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -4
- data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -9
- data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -5
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -8
- data/lib/datadog/tracing/contrib/active_job/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -4
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -7
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -3
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -6
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -8
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -8
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -4
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -11
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/active_support/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -7
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -3
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +0 -2
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/analytics.rb +1 -3
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -6
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/aws/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +5 -6
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +0 -2
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -7
- data/lib/datadog/tracing/contrib/aws/services.rb +0 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/configurable.rb +2 -4
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -3
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -6
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/dalli/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +10 -7
- data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -3
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -4
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +11 -6
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +10 -9
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -5
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +8 -5
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +6 -9
- data/lib/datadog/tracing/contrib/ethon/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +5 -6
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/excon/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/excon/middleware.rb +8 -9
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/ext.rb +30 -0
- data/lib/datadog/tracing/contrib/extensions.rb +5 -5
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/faraday/connection.rb +0 -2
- data/lib/datadog/tracing/contrib/faraday/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +8 -10
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -7
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -9
- data/lib/datadog/tracing/contrib/grape/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +0 -2
- data/lib/datadog/tracing/contrib/grape/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/graphql/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +9 -6
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +20 -7
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +17 -19
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -6
- data/lib/datadog/tracing/contrib/grpc/distributed/fetcher.rb +26 -0
- data/lib/datadog/tracing/contrib/grpc/distributed/propagation.rb +42 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +4 -2
- data/lib/datadog/tracing/contrib/grpc/integration.rb +11 -6
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +0 -2
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +3 -8
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +45 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +20 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +42 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +21 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +39 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +42 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -4
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/http/distributed/fetcher.rb +38 -0
- data/lib/datadog/tracing/contrib/http/distributed/propagation.rb +37 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +8 -12
- data/lib/datadog/tracing/contrib/http/integration.rb +6 -8
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +0 -2
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +9 -11
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +13 -5
- data/lib/datadog/tracing/contrib/httprb/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +9 -11
- data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +0 -2
- data/lib/datadog/tracing/contrib/kafka/event.rb +4 -5
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -6
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +3 -4
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +3 -4
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -11
- data/lib/datadog/tracing/contrib/kafka/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/lograge/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -4
- data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +7 -5
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +8 -2
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -5
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -3
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +10 -6
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +17 -4
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +20 -7
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/patchable.rb +0 -2
- data/lib/datadog/tracing/contrib/patcher.rb +16 -6
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +17 -4
- data/lib/datadog/tracing/contrib/pg/ext.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +78 -41
- data/lib/datadog/tracing/contrib/pg/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/presto/ext.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +5 -5
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -6
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +41 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +26 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +45 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/qless/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/qless/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -5
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +5 -5
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -4
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/que/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/que/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -3
- data/lib/datadog/tracing/contrib/que/tracer.rb +5 -3
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/racecar/event.rb +5 -7
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +6 -5
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -4
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +6 -5
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -5
- data/lib/datadog/tracing/contrib/racecar/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/rack/ext.rb +5 -2
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +170 -78
- data/lib/datadog/tracing/contrib/rack/patcher.rb +12 -4
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -3
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -3
- data/lib/datadog/tracing/contrib/rails/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/framework.rb +16 -23
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -4
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -4
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -10
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -5
- data/lib/datadog/tracing/contrib/rails/utils.rb +1 -3
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +16 -3
- data/lib/datadog/tracing/contrib/rake/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -9
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -6
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -3
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +6 -5
- data/lib/datadog/tracing/contrib/redis/ext.rb +3 -2
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +36 -28
- data/lib/datadog/tracing/contrib/redis/integration.rb +37 -6
- data/lib/datadog/tracing/contrib/redis/patcher.rb +56 -14
- data/lib/datadog/tracing/contrib/redis/quantize.rb +11 -10
- data/lib/datadog/tracing/contrib/redis/tags.rb +12 -12
- data/lib/datadog/tracing/contrib/redis/trace_middleware.rb +70 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +0 -2
- data/lib/datadog/tracing/contrib/registerable.rb +0 -2
- data/lib/datadog/tracing/contrib/registry.rb +0 -2
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/resque/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/resque/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +7 -6
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +8 -5
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -5
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +6 -7
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -4
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -7
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -7
- data/lib/datadog/tracing/contrib/sequel/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -5
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -4
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -3
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +5 -3
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +11 -7
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -5
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -2
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -9
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +23 -3
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +2 -2
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +7 -8
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +55 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +12 -8
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -4
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sinatra/env.rb +14 -27
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -5
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -4
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -3
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +6 -9
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +15 -90
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +20 -18
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +1 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -6
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -4
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +7 -5
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -4
- 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 +28 -0
- data/lib/datadog/tracing/contrib/stripe/request.rb +67 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -4
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +0 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -6
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -5
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -8
- data/lib/datadog/tracing/contrib/utils/database.rb +0 -2
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +0 -2
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -14
- data/lib/datadog/tracing/contrib.rb +50 -50
- data/lib/datadog/tracing/correlation.rb +16 -4
- data/lib/datadog/{core → tracing}/diagnostics/ext.rb +1 -8
- data/lib/datadog/tracing/diagnostics/health.rb +38 -0
- data/lib/datadog/tracing/distributed/b3_multi.rb +72 -0
- data/lib/datadog/tracing/distributed/b3_single.rb +68 -0
- data/lib/datadog/tracing/distributed/datadog.rb +200 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
- data/lib/datadog/tracing/distributed/fetcher.rb +21 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +19 -16
- data/lib/datadog/tracing/distributed/helpers.rb +27 -40
- data/lib/datadog/tracing/distributed/none.rb +18 -0
- data/lib/datadog/tracing/distributed/propagation.rb +126 -0
- data/lib/datadog/tracing/distributed/trace_context.rb +373 -0
- data/lib/datadog/tracing/event.rb +1 -3
- data/lib/datadog/tracing/flush.rb +57 -37
- data/lib/datadog/tracing/metadata/analytics.rb +2 -4
- data/lib/datadog/tracing/metadata/errors.rb +2 -4
- data/lib/datadog/tracing/metadata/ext.rb +18 -12
- data/lib/datadog/tracing/metadata/tagging.rb +17 -4
- data/lib/datadog/tracing/metadata.rb +3 -5
- data/lib/datadog/tracing/pipeline/span_filter.rb +10 -8
- data/lib/datadog/tracing/pipeline/span_processor.rb +0 -2
- data/lib/datadog/tracing/pipeline.rb +3 -5
- data/lib/datadog/tracing/propagation/http.rb +3 -100
- data/lib/datadog/tracing/runtime/metrics.rb +1 -3
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -3
- data/lib/datadog/tracing/sampling/ext.rb +30 -1
- data/lib/datadog/tracing/sampling/matcher.rb +0 -2
- data/lib/datadog/tracing/sampling/priority_sampler.rb +62 -11
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +10 -13
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +32 -10
- data/lib/datadog/tracing/sampling/rate_limiter.rb +4 -3
- data/lib/datadog/tracing/sampling/rate_sampler.rb +27 -12
- data/lib/datadog/tracing/sampling/rule.rb +3 -5
- data/lib/datadog/tracing/sampling/rule_sampler.rb +8 -9
- data/lib/datadog/tracing/sampling/sampler.rb +0 -2
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +9 -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 +6 -24
- data/lib/datadog/tracing/span_operation.rb +11 -14
- data/lib/datadog/tracing/sync_writer.rb +5 -7
- data/lib/datadog/tracing/trace_digest.rb +88 -4
- data/lib/datadog/tracing/trace_operation.rb +60 -17
- data/lib/datadog/tracing/trace_segment.rb +20 -10
- data/lib/datadog/tracing/tracer.rb +49 -23
- data/lib/datadog/tracing/utils.rb +81 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +9 -11
- data/lib/datadog/tracing/workers.rb +3 -5
- data/lib/datadog/tracing/writer.rb +12 -7
- data/lib/datadog/tracing.rb +8 -10
- data/lib/ddtrace/auto_instrument.rb +9 -4
- data/lib/ddtrace/auto_instrument_base.rb +0 -2
- data/lib/ddtrace/profiling/preload.rb +0 -2
- data/lib/ddtrace/transport/ext.rb +7 -3
- data/lib/ddtrace/transport/http/adapters/net.rb +3 -4
- data/lib/ddtrace/transport/http/adapters/registry.rb +0 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -3
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -4
- data/lib/ddtrace/transport/http/api/endpoint.rb +0 -2
- data/lib/ddtrace/transport/http/api/fallbacks.rb +0 -2
- data/lib/ddtrace/transport/http/api/instance.rb +0 -2
- data/lib/ddtrace/transport/http/api/map.rb +1 -3
- data/lib/ddtrace/transport/http/api/spec.rb +0 -2
- data/lib/ddtrace/transport/http/api.rb +4 -6
- data/lib/ddtrace/transport/http/builder.rb +5 -7
- data/lib/ddtrace/transport/http/client.rb +2 -4
- data/lib/ddtrace/transport/http/env.rb +0 -2
- data/lib/ddtrace/transport/http/response.rb +1 -3
- data/lib/ddtrace/transport/http/statistics.rb +1 -3
- data/lib/ddtrace/transport/http/traces.rb +6 -8
- data/lib/ddtrace/transport/http.rb +11 -12
- data/lib/ddtrace/transport/io/client.rb +2 -4
- data/lib/ddtrace/transport/io/response.rb +1 -3
- data/lib/ddtrace/transport/io/traces.rb +3 -7
- data/lib/ddtrace/transport/io.rb +3 -5
- data/lib/ddtrace/transport/parcel.rb +0 -4
- data/lib/ddtrace/transport/request.rb +0 -2
- data/lib/ddtrace/transport/response.rb +0 -2
- data/lib/ddtrace/transport/serializable_trace.rb +9 -5
- data/lib/ddtrace/transport/statistics.rb +2 -4
- data/lib/ddtrace/transport/trace_formatter.rb +21 -12
- data/lib/ddtrace/transport/traces.rb +9 -9
- data/lib/ddtrace/version.rb +2 -4
- data/lib/ddtrace.rb +6 -10
- metadata +131 -50
- data/.editorconfig +0 -22
- data/.gitignore +0 -58
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -71
- 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 -2712
- data/docs/ProfilingDevelopment.md +0 -109
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +0 -269
- data/ext/ddtrace_profiling_native_extension/libddprof_helpers.h +0 -13
- data/lib/datadog/appsec/assets/waf_rules/risky.json +0 -1499
- data/lib/datadog/appsec/contrib/rack/request.rb +0 -58
- data/lib/datadog/appsec/contrib/rack/response.rb +0 -24
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +0 -42
- data/lib/datadog/profiling/old_ext.rb +0 -42
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
- 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 -37
- data/lib/datadog/profiling/transport/http/response.rb +0 -21
- data/lib/datadog/profiling/transport/http.rb +0 -112
- 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/headers/parser.rb +0 -37
- data/lib/datadog/tracing/distributed/metadata/b3.rb +0 -55
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +0 -66
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +0 -73
- data/lib/datadog/tracing/distributed/metadata/parser.rb +0 -34
- data/lib/datadog/tracing/propagation/grpc.rb +0 -98
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ruby.h>
|
|
4
|
+
|
|
5
|
+
void thread_context_collector_sample(
|
|
6
|
+
VALUE self_instance,
|
|
7
|
+
long current_monotonic_wall_time_ns,
|
|
8
|
+
VALUE profiler_overhead_stack_thread
|
|
9
|
+
);
|
|
10
|
+
void thread_context_collector_sample_allocation(VALUE self_instance, unsigned int sample_weight);
|
|
11
|
+
VALUE thread_context_collector_sample_after_gc(VALUE self_instance);
|
|
12
|
+
void thread_context_collector_on_gc_start(VALUE self_instance);
|
|
13
|
+
void thread_context_collector_on_gc_finish(VALUE self_instance);
|
|
14
|
+
VALUE enforce_thread_context_collector_instance(VALUE object);
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# typed: ignore
|
|
2
|
-
|
|
3
1
|
# rubocop:disable Style/StderrPuts
|
|
4
2
|
# rubocop:disable Style/GlobalVars
|
|
5
3
|
|
|
@@ -28,7 +26,7 @@ def skip_building_extension!(reason)
|
|
|
28
26
|
if fail_install_if_missing_extension
|
|
29
27
|
require 'mkmf'
|
|
30
28
|
Logging.message(
|
|
31
|
-
'
|
|
29
|
+
'[ddtrace] Failure cause: ' \
|
|
32
30
|
"#{Datadog::Profiling::NativeExtensionHelpers::Supported.render_skipped_reason_file(**reason)}\n"
|
|
33
31
|
)
|
|
34
32
|
else
|
|
@@ -42,7 +40,8 @@ unless Datadog::Profiling::NativeExtensionHelpers::Supported.supported?
|
|
|
42
40
|
skip_building_extension!(Datadog::Profiling::NativeExtensionHelpers::Supported.unsupported_reason)
|
|
43
41
|
end
|
|
44
42
|
|
|
45
|
-
$stderr.puts(
|
|
43
|
+
$stderr.puts(
|
|
44
|
+
%(
|
|
46
45
|
+------------------------------------------------------------------------------+
|
|
47
46
|
| ** Preparing to build the ddtrace profiling native extension... ** |
|
|
48
47
|
| |
|
|
@@ -59,12 +58,17 @@ $stderr.puts(%(
|
|
|
59
58
|
| Thanks for using ddtrace! You rock! |
|
|
60
59
|
+------------------------------------------------------------------------------+
|
|
61
60
|
|
|
62
|
-
)
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
63
|
|
|
64
64
|
# NOTE: we MUST NOT require 'mkmf' before we check the #skip_building_extension? because the require triggers checks
|
|
65
65
|
# that may fail on an environment not properly setup for building Ruby extensions.
|
|
66
66
|
require 'mkmf'
|
|
67
67
|
|
|
68
|
+
Logging.message("[ddtrace] Using compiler:\n")
|
|
69
|
+
xsystem("#{CONFIG['CC']} -v")
|
|
70
|
+
Logging.message("[ddtrace] End of compiler information\n")
|
|
71
|
+
|
|
68
72
|
# mkmf on modern Rubies actually has an append_cflags that does something similar
|
|
69
73
|
# (see https://github.com/ruby/ruby/pull/5760), but as usual we need a bit more boilerplate to deal with legacy Rubies
|
|
70
74
|
def add_compiler_flag(flag)
|
|
@@ -75,13 +79,17 @@ def add_compiler_flag(flag)
|
|
|
75
79
|
end
|
|
76
80
|
end
|
|
77
81
|
|
|
82
|
+
# Because we can't control what compiler versions our customers use, shipping with -Werror by default is a no-go.
|
|
83
|
+
# But we can enable it in CI, so that we quickly spot any new warnings that just got introduced.
|
|
84
|
+
add_compiler_flag '-Werror' if ENV['DDTRACE_CI'] == 'true'
|
|
85
|
+
|
|
78
86
|
# Older gcc releases may not default to C99 and we need to ask for this. This is also used:
|
|
79
87
|
# * by upstream Ruby -- search for gnu99 in the codebase
|
|
80
88
|
# * by msgpack, another ddtrace dependency
|
|
81
89
|
# (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
|
|
82
90
|
add_compiler_flag '-std=gnu99'
|
|
83
91
|
|
|
84
|
-
# Gets really noisy when we include the MJIT header, let's omit it
|
|
92
|
+
# Gets really noisy when we include the MJIT header, let's omit it (TODO: Use #pragma GCC diagnostic instead?)
|
|
85
93
|
add_compiler_flag '-Wno-unused-function'
|
|
86
94
|
|
|
87
95
|
# Allow defining variables at any point in a function
|
|
@@ -91,6 +99,9 @@ add_compiler_flag '-Wno-declaration-after-statement'
|
|
|
91
99
|
# cause a segfault later. Let's ensure that never happens.
|
|
92
100
|
add_compiler_flag '-Werror-implicit-function-declaration'
|
|
93
101
|
|
|
102
|
+
# Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
|
|
103
|
+
add_compiler_flag '-Wunused-parameter'
|
|
104
|
+
|
|
94
105
|
# The native extension is not intended to expose any symbols/functions for other native libraries to use;
|
|
95
106
|
# the sole exception being `Init_ddtrace_profiling_native_extension` which needs to be visible for Ruby to call it when
|
|
96
107
|
# it `dlopen`s the library.
|
|
@@ -99,13 +110,20 @@ add_compiler_flag '-Werror-implicit-function-declaration'
|
|
|
99
110
|
# For more details see https://gcc.gnu.org/wiki/Visibility
|
|
100
111
|
add_compiler_flag '-fvisibility=hidden'
|
|
101
112
|
|
|
113
|
+
# Avoid legacy C definitions
|
|
114
|
+
add_compiler_flag '-Wold-style-definition'
|
|
115
|
+
|
|
116
|
+
# Enable all other compiler warnings
|
|
117
|
+
add_compiler_flag '-Wall'
|
|
118
|
+
add_compiler_flag '-Wextra'
|
|
119
|
+
|
|
102
120
|
if RUBY_PLATFORM.include?('linux')
|
|
103
121
|
# Supposedly, the correct way to do this is
|
|
104
122
|
# ```
|
|
105
123
|
# have_library 'pthread'
|
|
106
124
|
# have_func 'pthread_getcpuclockid'
|
|
107
125
|
# ```
|
|
108
|
-
# but it broke the build on Windows
|
|
126
|
+
# but a) it broke the build on Windows, b) on older Ruby versions (2.2 and below) and c) It's slower to build
|
|
109
127
|
# so instead we just assume that we have the function we need on Linux, and nowhere else
|
|
110
128
|
$defs << '-DHAVE_PTHREAD_GETCPUCLOCKID'
|
|
111
129
|
end
|
|
@@ -113,12 +131,27 @@ end
|
|
|
113
131
|
# On older Rubies, there was no struct rb_native_thread. See private_vm_api_acccess.c for details.
|
|
114
132
|
$defs << '-DNO_RB_NATIVE_THREAD' if RUBY_VERSION < '3.2'
|
|
115
133
|
|
|
134
|
+
# On older Rubies, there was no struct rb_thread_sched (it was struct rb_global_vm_lock_struct)
|
|
135
|
+
$defs << '-DNO_RB_THREAD_SCHED' if RUBY_VERSION < '3.2'
|
|
136
|
+
|
|
137
|
+
# On older Rubies, there was no tid member in the internal thread structure
|
|
138
|
+
$defs << '-DNO_THREAD_TID' if RUBY_VERSION < '3.1'
|
|
139
|
+
|
|
116
140
|
# On older Rubies, we need to use a backported version of this function. See private_vm_api_access.h for details.
|
|
117
141
|
$defs << '-DUSE_BACKPORTED_RB_PROFILE_FRAME_METHOD_NAME' if RUBY_VERSION < '3'
|
|
118
142
|
|
|
143
|
+
# On older Rubies, there are no Ractors
|
|
144
|
+
$defs << '-DNO_RACTORS' if RUBY_VERSION < '3'
|
|
145
|
+
|
|
146
|
+
# On older Rubies, rb_global_vm_lock_struct did not include the owner field
|
|
147
|
+
$defs << '-DNO_GVL_OWNER' if RUBY_VERSION < '2.6'
|
|
148
|
+
|
|
119
149
|
# On older Rubies, we need to use rb_thread_t instead of rb_execution_context_t
|
|
120
150
|
$defs << '-DUSE_THREAD_INSTEAD_OF_EXECUTION_CONTEXT' if RUBY_VERSION < '2.5'
|
|
121
151
|
|
|
152
|
+
# On older Rubies, extensions can't use GET_VM()
|
|
153
|
+
$defs << '-DNO_GET_VM' if RUBY_VERSION < '2.5'
|
|
154
|
+
|
|
122
155
|
# On older Rubies...
|
|
123
156
|
if RUBY_VERSION < '2.4'
|
|
124
157
|
# ...we need to use RUBY_VM_NORMAL_ISEQ_P instead of VM_FRAME_RUBYFRAME_P
|
|
@@ -127,39 +160,33 @@ if RUBY_VERSION < '2.4'
|
|
|
127
160
|
$defs << '-DUSE_LEGACY_RB_VM_FRAME_METHOD_ENTRY'
|
|
128
161
|
end
|
|
129
162
|
|
|
130
|
-
#
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
# ...the VM changed enough that we need an alternative legacy rb_profile_frames
|
|
135
|
-
$defs << '-DUSE_LEGACY_RB_PROFILE_FRAMES'
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
# In Ruby 2.1, living_threads were stored in a hashmap (st)
|
|
139
|
-
$defs << '-DUSE_LEGACY_LIVING_THREADS_ST' if RUBY_VERSION < '2.2'
|
|
140
|
-
|
|
141
|
-
# If we got here, libddprof is available and loaded
|
|
142
|
-
ENV['PKG_CONFIG_PATH'] = "#{ENV['PKG_CONFIG_PATH']}:#{Libddprof.pkgconfig_folder}"
|
|
143
|
-
Logging.message(" [ddtrace] PKG_CONFIG_PATH set to #{ENV['PKG_CONFIG_PATH'].inspect}\n")
|
|
163
|
+
# If we got here, libdatadog is available and loaded
|
|
164
|
+
ENV['PKG_CONFIG_PATH'] = "#{ENV['PKG_CONFIG_PATH']}:#{Libdatadog.pkgconfig_folder}"
|
|
165
|
+
Logging.message("[ddtrace] PKG_CONFIG_PATH set to #{ENV['PKG_CONFIG_PATH'].inspect}\n")
|
|
166
|
+
$stderr.puts("Using libdatadog #{Libdatadog::VERSION} from #{Libdatadog.pkgconfig_folder}")
|
|
144
167
|
|
|
145
|
-
unless pkg_config('
|
|
168
|
+
unless pkg_config('datadog_profiling_with_rpath')
|
|
146
169
|
skip_building_extension!(
|
|
147
170
|
if Datadog::Profiling::NativeExtensionHelpers::Supported.pkg_config_missing?
|
|
148
171
|
Datadog::Profiling::NativeExtensionHelpers::Supported::PKG_CONFIG_IS_MISSING
|
|
149
172
|
else
|
|
150
173
|
# Less specific error message
|
|
151
|
-
Datadog::Profiling::NativeExtensionHelpers::Supported::
|
|
174
|
+
Datadog::Profiling::NativeExtensionHelpers::Supported::FAILED_TO_CONFIGURE_LIBDATADOG
|
|
152
175
|
end
|
|
153
176
|
)
|
|
154
177
|
end
|
|
155
178
|
|
|
156
|
-
|
|
179
|
+
unless have_type('atomic_int', ['stdatomic.h'])
|
|
180
|
+
skip_building_extension!(Datadog::Profiling::NativeExtensionHelpers::Supported::COMPILER_ATOMIC_MISSING)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# See comments on the helper method being used for why we need to additionally set this.
|
|
157
184
|
# The extremely excessive escaping around ORIGIN below seems to be correct and was determined after a lot of
|
|
158
185
|
# experimentation. We need to get these special characters across a lot of tools untouched...
|
|
159
186
|
$LDFLAGS += \
|
|
160
187
|
' -Wl,-rpath,$$$\\\\{ORIGIN\\}/' \
|
|
161
|
-
"#{Datadog::Profiling::NativeExtensionHelpers.
|
|
162
|
-
Logging.message("
|
|
188
|
+
"#{Datadog::Profiling::NativeExtensionHelpers.libdatadog_folder_relative_to_native_lib_folder}"
|
|
189
|
+
Logging.message("[ddtrace] After pkg-config $LDFLAGS were set to: #{$LDFLAGS.inspect}\n")
|
|
163
190
|
|
|
164
191
|
# Tag the native extension library with the Ruby version and Ruby platform.
|
|
165
192
|
# This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
|
|
@@ -194,13 +221,6 @@ else
|
|
|
194
221
|
# This gem ships source code copies of these VM headers for the different Ruby VM versions;
|
|
195
222
|
# see https://github.com/ruby-debug/debase-ruby_core_source for details
|
|
196
223
|
|
|
197
|
-
thread_native_for_ruby_2_1 = proc { true }
|
|
198
|
-
if RUBY_VERSION < '2.2'
|
|
199
|
-
# This header became public in Ruby 2.2, but we need to pull it from the private headers folder for 2.1
|
|
200
|
-
thread_native_for_ruby_2_1 = proc { have_header('thread_native.h') }
|
|
201
|
-
$defs << '-DRUBY_2_1_WORKAROUND'
|
|
202
|
-
end
|
|
203
|
-
|
|
204
224
|
create_header
|
|
205
225
|
|
|
206
226
|
require 'debase/ruby_core_source'
|
|
@@ -208,7 +228,7 @@ else
|
|
|
208
228
|
|
|
209
229
|
Debase::RubyCoreSource
|
|
210
230
|
.create_makefile_with_core(
|
|
211
|
-
proc { have_header('vm_core.h') && have_header('iseq.h')
|
|
231
|
+
proc { have_header('vm_core.h') && have_header('iseq.h') },
|
|
212
232
|
EXTENSION_NAME,
|
|
213
233
|
)
|
|
214
234
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
// Used to mark symbols to be exported to the outside of the extension.
|
|
4
|
+
// Consider very carefully before tagging a function with this.
|
|
5
|
+
#define DDTRACE_EXPORT __attribute__ ((visibility ("default")))
|
|
6
|
+
|
|
7
|
+
// Used to mark function arguments that are deliberately left unused
|
|
8
|
+
#ifdef __GNUC__
|
|
9
|
+
#define DDTRACE_UNUSED __attribute__((unused))
|
|
10
|
+
#else
|
|
11
|
+
#define DDTRACE_UNUSED
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
// @ivoanjo: After trying to read through https://stackoverflow.com/questions/3437404/min-and-max-in-c I decided I
|
|
15
|
+
// don't like C and I just implemented this as a function.
|
|
16
|
+
inline static uint64_t uint64_max_of(uint64_t a, uint64_t b) { return a > b ? a : b; }
|
|
17
|
+
inline static uint64_t uint64_min_of(uint64_t a, uint64_t b) { return a > b ? b : a; }
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#include <ruby.h>
|
|
2
2
|
#include <ruby/thread.h>
|
|
3
|
-
#include <
|
|
4
|
-
#include "
|
|
3
|
+
#include <datadog/profiling.h>
|
|
4
|
+
#include "helpers.h"
|
|
5
|
+
#include "libdatadog_helpers.h"
|
|
5
6
|
#include "ruby_helpers.h"
|
|
6
7
|
|
|
7
8
|
// Used to report profiling data to Datadog.
|
|
@@ -16,22 +17,23 @@ static ID agent_id; // id of :agent in Ruby
|
|
|
16
17
|
static ID log_failure_to_process_tag_id; // id of :log_failure_to_process_tag in Ruby
|
|
17
18
|
|
|
18
19
|
static VALUE http_transport_class = Qnil;
|
|
20
|
+
static VALUE library_version_string = Qnil;
|
|
19
21
|
|
|
20
22
|
struct call_exporter_without_gvl_arguments {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
ddog_prof_Exporter *exporter;
|
|
24
|
+
ddog_prof_Exporter_Request_BuildResult *build_result;
|
|
25
|
+
ddog_CancellationToken *cancel_token;
|
|
26
|
+
ddog_prof_Exporter_SendResult result;
|
|
25
27
|
bool send_ran;
|
|
26
28
|
};
|
|
27
29
|
|
|
28
|
-
inline static
|
|
30
|
+
inline static ddog_ByteSlice byte_slice_from_ruby_string(VALUE string);
|
|
29
31
|
static VALUE _native_validate_exporter(VALUE self, VALUE exporter_configuration);
|
|
30
|
-
static
|
|
31
|
-
static VALUE handle_exporter_failure(
|
|
32
|
-
static
|
|
33
|
-
static
|
|
34
|
-
static void safely_log_failure_to_process_tag(
|
|
32
|
+
static ddog_prof_Exporter_NewResult create_exporter(VALUE exporter_configuration, VALUE tags_as_array);
|
|
33
|
+
static VALUE handle_exporter_failure(ddog_prof_Exporter_NewResult exporter_result);
|
|
34
|
+
static ddog_Endpoint endpoint_from(VALUE exporter_configuration);
|
|
35
|
+
static ddog_Vec_Tag convert_tags(VALUE tags_as_array);
|
|
36
|
+
static void safely_log_failure_to_process_tag(ddog_Vec_Tag tags, VALUE err_details);
|
|
35
37
|
static VALUE _native_do_export(
|
|
36
38
|
VALUE self,
|
|
37
39
|
VALUE exporter_configuration,
|
|
@@ -48,6 +50,7 @@ static VALUE _native_do_export(
|
|
|
48
50
|
);
|
|
49
51
|
static void *call_exporter_without_gvl(void *call_args);
|
|
50
52
|
static void interrupt_exporter_call(void *cancel_token);
|
|
53
|
+
static VALUE ddtrace_version(void);
|
|
51
54
|
|
|
52
55
|
void http_transport_init(VALUE profiling_module) {
|
|
53
56
|
http_transport_class = rb_define_class_under(profiling_module, "HttpTransport", rb_cObject);
|
|
@@ -60,58 +63,61 @@ void http_transport_init(VALUE profiling_module) {
|
|
|
60
63
|
agentless_id = rb_intern_const("agentless");
|
|
61
64
|
agent_id = rb_intern_const("agent");
|
|
62
65
|
log_failure_to_process_tag_id = rb_intern_const("log_failure_to_process_tag");
|
|
66
|
+
|
|
67
|
+
library_version_string = ddtrace_version();
|
|
68
|
+
rb_global_variable(&library_version_string);
|
|
63
69
|
}
|
|
64
70
|
|
|
65
|
-
inline static
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
inline static ddog_ByteSlice byte_slice_from_ruby_string(VALUE string) {
|
|
72
|
+
ENFORCE_TYPE(string, T_STRING);
|
|
73
|
+
ddog_ByteSlice byte_slice = {.ptr = (uint8_t *) StringValuePtr(string), .len = RSTRING_LEN(string)};
|
|
68
74
|
return byte_slice;
|
|
69
75
|
}
|
|
70
76
|
|
|
71
|
-
static VALUE _native_validate_exporter(VALUE
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
static VALUE _native_validate_exporter(DDTRACE_UNUSED VALUE _self, VALUE exporter_configuration) {
|
|
78
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
79
|
+
ddog_prof_Exporter_NewResult exporter_result = create_exporter(exporter_configuration, rb_ary_new());
|
|
74
80
|
|
|
75
81
|
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
76
82
|
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
77
83
|
|
|
78
84
|
// We don't actually need the exporter for now -- we just wanted to validate that we could create it with the
|
|
79
85
|
// settings we were given
|
|
80
|
-
|
|
86
|
+
ddog_prof_Exporter_drop(exporter_result.ok);
|
|
81
87
|
|
|
82
88
|
return rb_ary_new_from_args(2, ok_symbol, Qnil);
|
|
83
89
|
}
|
|
84
90
|
|
|
85
|
-
static
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
static ddog_prof_Exporter_NewResult create_exporter(VALUE exporter_configuration, VALUE tags_as_array) {
|
|
92
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
93
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
88
94
|
|
|
89
|
-
// This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the
|
|
95
|
+
// This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the ddog_Vec_Tag
|
|
90
96
|
// to be leaked.
|
|
91
|
-
|
|
97
|
+
ddog_Endpoint endpoint = endpoint_from(exporter_configuration);
|
|
98
|
+
|
|
99
|
+
ddog_Vec_Tag tags = convert_tags(tags_as_array);
|
|
92
100
|
|
|
93
|
-
|
|
101
|
+
ddog_CharSlice library_name = DDOG_CHARSLICE_C("dd-trace-rb");
|
|
102
|
+
ddog_CharSlice library_version = char_slice_from_ruby_string(library_version_string);
|
|
103
|
+
ddog_CharSlice profiling_family = DDOG_CHARSLICE_C("ruby");
|
|
94
104
|
|
|
95
|
-
|
|
96
|
-
|
|
105
|
+
ddog_prof_Exporter_NewResult exporter_result =
|
|
106
|
+
ddog_prof_Exporter_new(library_name, library_version, profiling_family, &tags, endpoint);
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
ddog_Vec_Tag_drop(tags);
|
|
99
109
|
|
|
100
110
|
return exporter_result;
|
|
101
111
|
}
|
|
102
112
|
|
|
103
|
-
static VALUE handle_exporter_failure(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
ddprof_ffi_NewProfileExporterV3Result_drop(exporter_result);
|
|
109
|
-
|
|
110
|
-
return rb_ary_new_from_args(2, error_symbol, err_details);
|
|
113
|
+
static VALUE handle_exporter_failure(ddog_prof_Exporter_NewResult exporter_result) {
|
|
114
|
+
return exporter_result.tag == DDOG_PROF_EXPORTER_NEW_RESULT_OK ?
|
|
115
|
+
Qnil :
|
|
116
|
+
rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&exporter_result.err));
|
|
111
117
|
}
|
|
112
118
|
|
|
113
|
-
static
|
|
114
|
-
|
|
119
|
+
static ddog_Endpoint endpoint_from(VALUE exporter_configuration) {
|
|
120
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
115
121
|
|
|
116
122
|
ID working_mode = SYM2ID(rb_ary_entry(exporter_configuration, 0)); // SYM2ID verifies its input so we can do this safely
|
|
117
123
|
|
|
@@ -122,31 +128,31 @@ static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration) {
|
|
|
122
128
|
if (working_mode == agentless_id) {
|
|
123
129
|
VALUE site = rb_ary_entry(exporter_configuration, 1);
|
|
124
130
|
VALUE api_key = rb_ary_entry(exporter_configuration, 2);
|
|
125
|
-
|
|
126
|
-
|
|
131
|
+
ENFORCE_TYPE(site, T_STRING);
|
|
132
|
+
ENFORCE_TYPE(api_key, T_STRING);
|
|
127
133
|
|
|
128
|
-
return
|
|
134
|
+
return ddog_Endpoint_agentless(char_slice_from_ruby_string(site), char_slice_from_ruby_string(api_key));
|
|
129
135
|
} else { // agent_id
|
|
130
136
|
VALUE base_url = rb_ary_entry(exporter_configuration, 1);
|
|
131
|
-
|
|
137
|
+
ENFORCE_TYPE(base_url, T_STRING);
|
|
132
138
|
|
|
133
|
-
return
|
|
139
|
+
return ddog_Endpoint_agent(char_slice_from_ruby_string(base_url));
|
|
134
140
|
}
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
__attribute__((warn_unused_result))
|
|
138
|
-
static
|
|
139
|
-
|
|
144
|
+
static ddog_Vec_Tag convert_tags(VALUE tags_as_array) {
|
|
145
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
140
146
|
|
|
141
147
|
long tags_count = RARRAY_LEN(tags_as_array);
|
|
142
|
-
|
|
148
|
+
ddog_Vec_Tag tags = ddog_Vec_Tag_new();
|
|
143
149
|
|
|
144
150
|
for (long i = 0; i < tags_count; i++) {
|
|
145
151
|
VALUE name_value_pair = rb_ary_entry(tags_as_array, i);
|
|
146
152
|
|
|
147
153
|
if (!RB_TYPE_P(name_value_pair, T_ARRAY)) {
|
|
148
|
-
|
|
149
|
-
|
|
154
|
+
ddog_Vec_Tag_drop(tags);
|
|
155
|
+
ENFORCE_TYPE(name_value_pair, T_ARRAY);
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
// Note: We can index the array without checking its size first because rb_ary_entry returns Qnil if out of bounds
|
|
@@ -154,23 +160,18 @@ static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array) {
|
|
|
154
160
|
VALUE tag_value = rb_ary_entry(name_value_pair, 1);
|
|
155
161
|
|
|
156
162
|
if (!(RB_TYPE_P(tag_name, T_STRING) && RB_TYPE_P(tag_value, T_STRING))) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
163
|
+
ddog_Vec_Tag_drop(tags);
|
|
164
|
+
ENFORCE_TYPE(tag_name, T_STRING);
|
|
165
|
+
ENFORCE_TYPE(tag_value, T_STRING);
|
|
160
166
|
}
|
|
161
167
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (push_result.tag == DDPROF_FFI_PUSH_TAG_RESULT_ERR) {
|
|
166
|
-
VALUE err_details = ruby_string_from_vec_u8(push_result.err);
|
|
167
|
-
ddprof_ffi_PushTagResult_drop(push_result);
|
|
168
|
+
ddog_Vec_Tag_PushResult push_result =
|
|
169
|
+
ddog_Vec_Tag_push(&tags, char_slice_from_ruby_string(tag_name), char_slice_from_ruby_string(tag_value));
|
|
168
170
|
|
|
169
|
-
|
|
171
|
+
if (push_result.tag == DDOG_VEC_TAG_PUSH_RESULT_ERR) {
|
|
172
|
+
// libdatadog validates tags and may catch invalid tags that ddtrace didn't actually catch.
|
|
170
173
|
// We warn users about such tags, and then just ignore them.
|
|
171
|
-
safely_log_failure_to_process_tag(tags,
|
|
172
|
-
} else {
|
|
173
|
-
ddprof_ffi_PushTagResult_drop(push_result);
|
|
174
|
+
safely_log_failure_to_process_tag(tags, get_error_details_and_drop(&push_result.err));
|
|
174
175
|
}
|
|
175
176
|
}
|
|
176
177
|
|
|
@@ -183,35 +184,41 @@ static VALUE log_failure_to_process_tag(VALUE err_details) {
|
|
|
183
184
|
|
|
184
185
|
// Since we are calling into Ruby code, it may raise an exception. This method ensure that dynamically-allocated tags
|
|
185
186
|
// get cleaned before propagating the exception.
|
|
186
|
-
static void safely_log_failure_to_process_tag(
|
|
187
|
+
static void safely_log_failure_to_process_tag(ddog_Vec_Tag tags, VALUE err_details) {
|
|
187
188
|
int exception_state;
|
|
188
189
|
rb_protect(log_failure_to_process_tag, err_details, &exception_state);
|
|
189
190
|
|
|
190
191
|
if (exception_state) { // An exception was raised
|
|
191
|
-
|
|
192
|
+
ddog_Vec_Tag_drop(tags); // clean up
|
|
192
193
|
rb_jump_tag(exception_state); // "Re-raise" exception
|
|
193
194
|
}
|
|
194
195
|
}
|
|
195
196
|
|
|
196
|
-
// Note: This function handles a bunch of
|
|
197
|
+
// Note: This function handles a bunch of libdatadog dynamically-allocated objects, so it MUST not use any Ruby APIs
|
|
197
198
|
// which can raise exceptions, otherwise the objects will be leaked.
|
|
198
199
|
static VALUE perform_export(
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
200
|
+
ddog_prof_Exporter *exporter,
|
|
201
|
+
ddog_Timespec start,
|
|
202
|
+
ddog_Timespec finish,
|
|
203
|
+
ddog_prof_Exporter_Slice_File slice_files,
|
|
204
|
+
ddog_Vec_Tag *additional_tags,
|
|
204
205
|
uint64_t timeout_milliseconds
|
|
205
206
|
) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
207
|
+
ddog_prof_ProfiledEndpointsStats *endpoints_stats = NULL; // Not in use yet
|
|
208
|
+
ddog_prof_Exporter_Request_BuildResult build_result =
|
|
209
|
+
ddog_prof_Exporter_Request_build(exporter, start, finish, slice_files, additional_tags, endpoints_stats, timeout_milliseconds);
|
|
210
|
+
|
|
211
|
+
if (build_result.tag == DDOG_PROF_EXPORTER_REQUEST_BUILD_RESULT_ERR) {
|
|
212
|
+
ddog_prof_Exporter_drop(exporter);
|
|
213
|
+
return rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&build_result.err));
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
ddog_CancellationToken *cancel_token = ddog_CancellationToken_new();
|
|
210
217
|
|
|
211
218
|
// We'll release the Global VM Lock while we're calling send, so that the Ruby VM can continue to work while this
|
|
212
219
|
// is pending
|
|
213
220
|
struct call_exporter_without_gvl_arguments args =
|
|
214
|
-
{.exporter = exporter, .
|
|
221
|
+
{.exporter = exporter, .build_result = &build_result, .cancel_token = cancel_token, .send_ran = false};
|
|
215
222
|
|
|
216
223
|
// We use rb_thread_call_without_gvl2 instead of rb_thread_call_without_gvl as the gvl2 variant never raises any
|
|
217
224
|
// exceptions.
|
|
@@ -229,45 +236,34 @@ static VALUE perform_export(
|
|
|
229
236
|
|
|
230
237
|
while (!args.send_ran && !pending_exception) {
|
|
231
238
|
rb_thread_call_without_gvl2(call_exporter_without_gvl, &args, interrupt_exporter_call, cancel_token);
|
|
239
|
+
|
|
240
|
+
// To make sure we don't leak memory, we never check for pending exceptions if send ran
|
|
232
241
|
if (!args.send_ran) pending_exception = check_if_pending_exception();
|
|
233
242
|
}
|
|
234
243
|
|
|
235
|
-
|
|
236
|
-
|
|
244
|
+
// Cleanup exporter and token, no longer needed
|
|
245
|
+
ddog_CancellationToken_drop(cancel_token);
|
|
246
|
+
ddog_prof_Exporter_drop(exporter);
|
|
237
247
|
|
|
238
248
|
if (pending_exception) {
|
|
239
|
-
//
|
|
240
|
-
|
|
241
|
-
//
|
|
242
|
-
// There's plans to add a `ddprof_ffi_Request_drop`
|
|
243
|
-
// (https://github.com/DataDog/dd-trace-rb/pull/1923#discussion_r882096221); once that happens, we can use it here.
|
|
244
|
-
//
|
|
245
|
-
// As a workaround, we get libddprof to clean up the request by asking for the send to be cancelled, and then calling
|
|
246
|
-
// it anyway. This will make libddprof free the request and return immediately which gets us the expected effect.
|
|
247
|
-
interrupt_exporter_call((void *) cancel_token);
|
|
248
|
-
call_exporter_without_gvl((void *) &args);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
ddprof_ffi_SendResult result = args.result;
|
|
252
|
-
bool success = result.tag == DDPROF_FFI_SEND_RESULT_HTTP_RESPONSE;
|
|
249
|
+
// If we got here send did not run, so we need to explicitly dispose of the request
|
|
250
|
+
ddog_prof_Exporter_Request_drop(&build_result.ok);
|
|
253
251
|
|
|
254
|
-
|
|
255
|
-
|
|
252
|
+
// Let Ruby propagate the exception. This will not return.
|
|
253
|
+
rb_jump_tag(pending_exception);
|
|
254
|
+
}
|
|
256
255
|
|
|
257
|
-
//
|
|
258
|
-
ddprof_ffi_SendResult_drop(args.result);
|
|
259
|
-
ddprof_ffi_CancellationToken_drop(cancel_token);
|
|
260
|
-
ddprof_ffi_NewProfileExporterV3Result_drop(valid_exporter_result);
|
|
261
|
-
// The request itself does not need to be freed as libddprof takes care of it.
|
|
256
|
+
// The request itself does not need to be freed as libdatadog takes ownership of it as part of sending.
|
|
262
257
|
|
|
263
|
-
|
|
264
|
-
if (pending_exception) rb_jump_tag(pending_exception);
|
|
258
|
+
ddog_prof_Exporter_SendResult result = args.result;
|
|
265
259
|
|
|
266
|
-
return
|
|
260
|
+
return result.tag == DDOG_PROF_EXPORTER_SEND_RESULT_HTTP_RESPONSE ?
|
|
261
|
+
rb_ary_new_from_args(2, ok_symbol, UINT2NUM(result.http_response.code)) :
|
|
262
|
+
rb_ary_new_from_args(2, error_symbol, get_error_details_and_drop(&result.err));
|
|
267
263
|
}
|
|
268
264
|
|
|
269
265
|
static VALUE _native_do_export(
|
|
270
|
-
VALUE
|
|
266
|
+
DDTRACE_UNUSED VALUE _self,
|
|
271
267
|
VALUE exporter_configuration,
|
|
272
268
|
VALUE upload_timeout_milliseconds,
|
|
273
269
|
VALUE start_timespec_seconds,
|
|
@@ -280,56 +276,56 @@ static VALUE _native_do_export(
|
|
|
280
276
|
VALUE code_provenance_data,
|
|
281
277
|
VALUE tags_as_array
|
|
282
278
|
) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
279
|
+
ENFORCE_TYPE(upload_timeout_milliseconds, T_FIXNUM);
|
|
280
|
+
ENFORCE_TYPE(start_timespec_seconds, T_FIXNUM);
|
|
281
|
+
ENFORCE_TYPE(start_timespec_nanoseconds, T_FIXNUM);
|
|
282
|
+
ENFORCE_TYPE(finish_timespec_seconds, T_FIXNUM);
|
|
283
|
+
ENFORCE_TYPE(finish_timespec_nanoseconds, T_FIXNUM);
|
|
284
|
+
ENFORCE_TYPE(pprof_file_name, T_STRING);
|
|
285
|
+
ENFORCE_TYPE(pprof_data, T_STRING);
|
|
286
|
+
ENFORCE_TYPE(code_provenance_file_name, T_STRING);
|
|
291
287
|
|
|
292
288
|
// Code provenance can be disabled and in that case will be set to nil
|
|
293
289
|
bool have_code_provenance = !NIL_P(code_provenance_data);
|
|
294
|
-
if (have_code_provenance)
|
|
290
|
+
if (have_code_provenance) ENFORCE_TYPE(code_provenance_data, T_STRING);
|
|
295
291
|
|
|
296
292
|
uint64_t timeout_milliseconds = NUM2ULONG(upload_timeout_milliseconds);
|
|
297
293
|
|
|
298
|
-
|
|
294
|
+
ddog_Timespec start =
|
|
299
295
|
{.seconds = NUM2LONG(start_timespec_seconds), .nanoseconds = NUM2UINT(start_timespec_nanoseconds)};
|
|
300
|
-
|
|
296
|
+
ddog_Timespec finish =
|
|
301
297
|
{.seconds = NUM2LONG(finish_timespec_seconds), .nanoseconds = NUM2UINT(finish_timespec_nanoseconds)};
|
|
302
298
|
|
|
303
299
|
int files_to_report = 1 + (have_code_provenance ? 1 : 0);
|
|
304
|
-
|
|
305
|
-
|
|
300
|
+
ddog_prof_Exporter_File files[files_to_report];
|
|
301
|
+
ddog_prof_Exporter_Slice_File slice_files = {.ptr = files, .len = files_to_report};
|
|
306
302
|
|
|
307
|
-
files[0] = (
|
|
303
|
+
files[0] = (ddog_prof_Exporter_File) {
|
|
308
304
|
.name = char_slice_from_ruby_string(pprof_file_name),
|
|
309
305
|
.file = byte_slice_from_ruby_string(pprof_data)
|
|
310
306
|
};
|
|
311
307
|
if (have_code_provenance) {
|
|
312
|
-
files[1] = (
|
|
308
|
+
files[1] = (ddog_prof_Exporter_File) {
|
|
313
309
|
.name = char_slice_from_ruby_string(code_provenance_file_name),
|
|
314
310
|
.file = byte_slice_from_ruby_string(code_provenance_data)
|
|
315
311
|
};
|
|
316
312
|
}
|
|
317
313
|
|
|
318
|
-
|
|
314
|
+
ddog_Vec_Tag *null_additional_tags = NULL;
|
|
319
315
|
|
|
320
|
-
|
|
316
|
+
ddog_prof_Exporter_NewResult exporter_result = create_exporter(exporter_configuration, tags_as_array);
|
|
321
317
|
// Note: Do not add anything that can raise exceptions after this line, as otherwise the exporter memory will leak
|
|
322
318
|
|
|
323
319
|
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
324
320
|
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
325
321
|
|
|
326
|
-
return perform_export(exporter_result, start, finish, slice_files, null_additional_tags, timeout_milliseconds);
|
|
322
|
+
return perform_export(exporter_result.ok, start, finish, slice_files, null_additional_tags, timeout_milliseconds);
|
|
327
323
|
}
|
|
328
324
|
|
|
329
325
|
static void *call_exporter_without_gvl(void *call_args) {
|
|
330
326
|
struct call_exporter_without_gvl_arguments *args = (struct call_exporter_without_gvl_arguments*) call_args;
|
|
331
327
|
|
|
332
|
-
args->result =
|
|
328
|
+
args->result = ddog_prof_Exporter_send(args->exporter, &args->build_result->ok, args->cancel_token);
|
|
333
329
|
args->send_ran = true;
|
|
334
330
|
|
|
335
331
|
return NULL; // Unused
|
|
@@ -337,5 +333,15 @@ static void *call_exporter_without_gvl(void *call_args) {
|
|
|
337
333
|
|
|
338
334
|
// Called by Ruby when it wants to interrupt call_exporter_without_gvl above, e.g. when the app wants to exit cleanly
|
|
339
335
|
static void interrupt_exporter_call(void *cancel_token) {
|
|
340
|
-
|
|
336
|
+
ddog_CancellationToken_cancel((ddog_CancellationToken *) cancel_token);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
static VALUE ddtrace_version(void) {
|
|
340
|
+
VALUE ddtrace_module = rb_const_get(rb_cObject, rb_intern("DDTrace"));
|
|
341
|
+
ENFORCE_TYPE(ddtrace_module, T_MODULE);
|
|
342
|
+
VALUE version_module = rb_const_get(ddtrace_module, rb_intern("VERSION"));
|
|
343
|
+
ENFORCE_TYPE(version_module, T_MODULE);
|
|
344
|
+
VALUE version_string = rb_const_get(version_module, rb_intern("STRING"));
|
|
345
|
+
ENFORCE_TYPE(version_string, T_STRING);
|
|
346
|
+
return version_string;
|
|
341
347
|
}
|