ddtrace 0.54.2 → 1.4.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 +283 -1
- data/LICENSE-3rdparty.csv +5 -1
- data/README.md +10 -1
- data/bin/ddtracerb +5 -5
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +118 -0
- data/ext/ddtrace_profiling_loader/extconf.rb +54 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +43 -9
- data/ext/ddtrace_profiling_native_extension/clock_id.h +21 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +31 -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 +390 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +6 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +391 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +282 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +9 -0
- data/ext/ddtrace_profiling_native_extension/extconf.rb +140 -113
- data/ext/ddtrace_profiling_native_extension/helpers.h +12 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +334 -0
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +14 -0
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +290 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +665 -8
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +30 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +16 -2
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +25 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +65 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +422 -0
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +38 -0
- data/lib/datadog/appsec/assets/blocked.html +4 -0
- data/lib/datadog/appsec/assets/waf_rules/README.md +7 -0
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +5638 -0
- data/lib/datadog/appsec/assets/waf_rules/risky.json +1499 -0
- data/lib/datadog/appsec/assets/waf_rules/strict.json +1298 -0
- data/lib/datadog/appsec/assets.rb +38 -0
- data/lib/datadog/appsec/autoload.rb +18 -0
- data/lib/datadog/appsec/configuration/settings.rb +194 -0
- data/lib/datadog/appsec/configuration.rb +80 -0
- data/lib/datadog/appsec/contrib/auto_instrument.rb +27 -0
- data/lib/datadog/appsec/contrib/configuration/settings.rb +20 -0
- data/lib/datadog/appsec/contrib/integration.rb +37 -0
- data/lib/datadog/appsec/contrib/patcher.rb +12 -0
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +22 -0
- data/lib/datadog/appsec/contrib/rack/ext.rb +15 -0
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +169 -0
- data/lib/datadog/appsec/contrib/rack/integration.rb +49 -0
- data/lib/datadog/appsec/contrib/rack/patcher.rb +32 -0
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +87 -0
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +64 -0
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +64 -0
- data/lib/datadog/appsec/contrib/rack/request.rb +58 -0
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +41 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +112 -0
- data/lib/datadog/appsec/contrib/rack/response.rb +24 -0
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +22 -0
- data/lib/datadog/appsec/contrib/rails/ext.rb +15 -0
- data/lib/datadog/appsec/contrib/rails/framework.rb +30 -0
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +81 -0
- data/lib/datadog/appsec/contrib/rails/integration.rb +48 -0
- data/lib/datadog/appsec/contrib/rails/patcher.rb +162 -0
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +68 -0
- data/lib/datadog/appsec/contrib/rails/request.rb +33 -0
- data/lib/datadog/appsec/contrib/rails/request_middleware.rb +20 -0
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +22 -0
- data/lib/datadog/appsec/contrib/sinatra/ext.rb +15 -0
- data/lib/datadog/appsec/contrib/sinatra/framework.rb +34 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +124 -0
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +48 -0
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +148 -0
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +63 -0
- data/lib/datadog/appsec/contrib/sinatra/request_middleware.rb +20 -0
- data/lib/datadog/appsec/event.rb +121 -0
- data/lib/datadog/appsec/extensions.rb +118 -0
- data/lib/datadog/appsec/instrumentation/gateway.rb +44 -0
- data/lib/datadog/appsec/processor.rb +164 -0
- data/lib/datadog/appsec/rate_limiter.rb +60 -0
- data/lib/datadog/appsec/reactive/address_hash.rb +18 -0
- data/lib/datadog/appsec/reactive/engine.rb +44 -0
- data/lib/datadog/appsec/reactive/operation.rb +51 -0
- data/lib/datadog/appsec/reactive/subscriber.rb +18 -0
- data/lib/datadog/appsec.rb +23 -0
- data/lib/datadog/ci/configuration/components.rb +9 -8
- data/lib/datadog/ci/configuration/settings.rb +20 -4
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +5 -3
- data/lib/datadog/ci/contrib/cucumber/ext.rb +2 -0
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +9 -14
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +3 -2
- data/lib/datadog/ci/contrib/cucumber/integration.rb +6 -5
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +4 -3
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +5 -3
- data/lib/datadog/ci/contrib/rspec/example.rb +9 -14
- data/lib/datadog/ci/contrib/rspec/ext.rb +2 -0
- data/lib/datadog/ci/contrib/rspec/integration.rb +6 -5
- data/lib/datadog/ci/contrib/rspec/patcher.rb +4 -3
- data/lib/datadog/ci/ext/app_types.rb +2 -1
- data/lib/datadog/ci/ext/environment.rb +135 -115
- data/lib/datadog/ci/ext/settings.rb +2 -1
- data/lib/datadog/ci/ext/test.rb +1 -0
- data/lib/datadog/ci/extensions.rb +7 -6
- data/lib/datadog/ci/flush.rb +38 -0
- data/lib/datadog/ci/test.rb +17 -15
- data/lib/datadog/ci.rb +7 -4
- data/lib/datadog/core/buffer/cruby.rb +55 -0
- data/lib/datadog/core/buffer/random.rb +134 -0
- data/lib/datadog/core/buffer/thread_safe.rb +58 -0
- data/lib/datadog/core/chunker.rb +35 -0
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +365 -0
- data/lib/datadog/core/configuration/base.rb +98 -0
- data/lib/datadog/core/configuration/components.rb +429 -0
- data/lib/datadog/core/configuration/dependency_resolver.rb +28 -0
- data/lib/datadog/core/configuration/option.rb +69 -0
- data/lib/datadog/core/configuration/option_definition.rb +126 -0
- data/lib/datadog/core/configuration/option_definition_set.rb +22 -0
- data/lib/datadog/core/configuration/option_set.rb +10 -0
- data/lib/datadog/core/configuration/options.rb +118 -0
- data/lib/datadog/core/configuration/settings.rb +652 -0
- data/lib/datadog/core/configuration.rb +289 -0
- data/lib/datadog/core/diagnostics/environment_logger.rb +283 -0
- data/lib/datadog/core/diagnostics/ext.rb +41 -0
- data/lib/datadog/core/diagnostics/health.rb +37 -0
- data/lib/datadog/core/encoding.rb +76 -0
- data/lib/datadog/core/environment/cgroup.rb +5 -2
- data/lib/datadog/core/environment/class_count.rb +1 -0
- data/lib/datadog/core/environment/container.rb +4 -2
- data/lib/datadog/core/environment/ext.rb +29 -10
- data/lib/datadog/core/environment/gc.rb +1 -0
- data/lib/datadog/core/environment/identity.rb +12 -5
- data/lib/datadog/core/environment/platform.rb +40 -0
- data/lib/datadog/core/environment/socket.rb +9 -2
- data/lib/datadog/core/environment/thread_count.rb +1 -0
- data/lib/datadog/core/environment/variable_helpers.rb +28 -2
- data/lib/datadog/core/environment/vm_cache.rb +1 -0
- data/lib/datadog/core/error.rb +101 -0
- data/lib/datadog/core/extensions.rb +16 -0
- data/lib/datadog/core/git/ext.rb +35 -0
- data/lib/datadog/core/logger.rb +46 -0
- data/lib/datadog/core/logging/ext.rb +11 -0
- data/lib/datadog/core/metrics/client.rb +198 -0
- data/lib/datadog/core/metrics/ext.rb +20 -0
- data/lib/datadog/core/metrics/helpers.rb +25 -0
- data/lib/datadog/core/metrics/logging.rb +44 -0
- data/lib/datadog/core/metrics/metric.rb +14 -0
- data/lib/datadog/core/metrics/options.rb +50 -0
- data/lib/datadog/core/pin.rb +75 -0
- data/lib/datadog/core/runtime/ext.rb +28 -0
- data/lib/datadog/core/runtime/metrics.rb +126 -0
- data/lib/datadog/core/telemetry/client.rb +79 -0
- data/lib/datadog/core/telemetry/collector.rb +234 -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 +32 -0
- data/lib/datadog/core/utils/forking.rb +63 -0
- data/lib/datadog/core/utils/object_set.rb +43 -0
- data/lib/datadog/core/utils/only_once.rb +44 -0
- data/lib/datadog/core/utils/safe_dup.rb +27 -0
- data/lib/datadog/core/utils/sequence.rb +26 -0
- data/lib/datadog/core/utils/string_table.rb +49 -0
- data/lib/datadog/core/utils/time.rb +54 -0
- data/lib/datadog/core/utils.rb +115 -0
- data/lib/{ddtrace → datadog/core}/vendor/multipart-post/LICENSE +0 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/composite_read_io.rb +120 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +61 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/parts.rb +139 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post/version.rb +13 -0
- data/lib/datadog/core/vendor/multipart-post/multipart/post.rb +12 -0
- data/lib/datadog/core/vendor/multipart-post/multipart.rb +16 -0
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +36 -0
- data/lib/datadog/core/worker.rb +24 -0
- data/lib/datadog/core/workers/async.rb +182 -0
- data/lib/datadog/core/workers/interval_loop.rb +119 -0
- data/lib/datadog/core/workers/polling.rb +59 -0
- data/lib/datadog/core/workers/queue.rb +44 -0
- data/lib/datadog/core/workers/runtime_metrics.rb +62 -0
- data/lib/datadog/core.rb +80 -0
- data/lib/datadog/kit/enable_core_dumps.rb +50 -0
- data/lib/datadog/kit/identity.rb +63 -0
- data/lib/datadog/kit.rb +11 -0
- data/lib/datadog/opentracer/binary_propagator.rb +26 -0
- data/lib/datadog/opentracer/carrier.rb +9 -0
- data/lib/datadog/opentracer/distributed_headers.rb +58 -0
- data/lib/datadog/opentracer/global_tracer.rb +17 -0
- data/lib/datadog/opentracer/propagator.rb +26 -0
- data/lib/datadog/opentracer/rack_propagator.rb +76 -0
- data/lib/datadog/opentracer/scope.rb +18 -0
- data/lib/datadog/opentracer/scope_manager.rb +9 -0
- data/lib/datadog/opentracer/span.rb +101 -0
- data/lib/datadog/opentracer/span_context.rb +19 -0
- data/lib/datadog/opentracer/span_context_factory.rb +27 -0
- data/lib/datadog/opentracer/text_map_propagator.rb +90 -0
- data/lib/datadog/opentracer/thread_local_scope.rb +34 -0
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +66 -0
- data/lib/datadog/opentracer/tracer.rb +216 -0
- data/lib/datadog/opentracer.rb +24 -0
- data/lib/datadog/profiling/backtrace_location.rb +34 -0
- data/lib/datadog/profiling/buffer.rb +43 -0
- data/lib/datadog/profiling/collectors/code_provenance.rb +115 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +27 -0
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +74 -0
- data/lib/datadog/profiling/collectors/old_stack.rb +298 -0
- data/lib/datadog/profiling/collectors/stack.rb +13 -0
- data/lib/datadog/profiling/encoding/profile.rb +43 -0
- data/lib/datadog/profiling/event.rb +15 -0
- data/lib/datadog/profiling/events/stack.rb +82 -0
- data/lib/datadog/profiling/exporter.rb +82 -0
- data/lib/datadog/profiling/ext/forking.rb +98 -0
- data/lib/datadog/profiling/ext.rb +45 -0
- data/lib/datadog/profiling/flush.rb +38 -0
- data/lib/datadog/profiling/http_transport.rb +132 -0
- data/lib/datadog/profiling/load_native_extension.rb +22 -0
- data/lib/datadog/profiling/native_extension.rb +41 -0
- data/lib/datadog/profiling/old_ext.rb +42 -0
- data/lib/datadog/profiling/old_recorder.rb +101 -0
- data/lib/datadog/profiling/pprof/builder.rb +127 -0
- data/lib/datadog/profiling/pprof/converter.rb +104 -0
- data/lib/datadog/profiling/pprof/message_set.rb +16 -0
- data/lib/datadog/profiling/pprof/payload.rb +20 -0
- data/lib/{ddtrace → datadog}/profiling/pprof/pprof.proto +0 -0
- data/lib/datadog/profiling/pprof/pprof_pb.rb +83 -0
- data/lib/datadog/profiling/pprof/stack_sample.rb +141 -0
- data/lib/datadog/profiling/pprof/string_table.rb +12 -0
- data/lib/datadog/profiling/pprof/template.rb +120 -0
- data/lib/datadog/profiling/preload.rb +5 -0
- data/lib/datadog/profiling/profiler.rb +34 -0
- data/lib/datadog/profiling/scheduler.rb +133 -0
- data/lib/datadog/profiling/stack_recorder.rb +43 -0
- data/lib/datadog/profiling/tag_builder.rb +53 -0
- data/lib/datadog/profiling/tasks/exec.rb +50 -0
- data/lib/datadog/profiling/tasks/help.rb +18 -0
- data/lib/datadog/profiling/tasks/setup.rb +93 -0
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +45 -0
- data/lib/datadog/profiling/trace_identifiers/helper.rb +47 -0
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +85 -0
- data/lib/datadog/profiling/transport/http/api/instance.rb +38 -0
- data/lib/datadog/profiling/transport/http/api/spec.rb +42 -0
- data/lib/datadog/profiling/transport/http/api.rb +45 -0
- data/lib/datadog/profiling/transport/http/builder.rb +30 -0
- data/lib/datadog/profiling/transport/http/client.rb +37 -0
- data/lib/datadog/profiling/transport/http/response.rb +21 -0
- data/lib/datadog/profiling/transport/http.rb +118 -0
- data/lib/datadog/profiling.rb +171 -0
- data/lib/datadog/tracing/analytics.rb +25 -0
- data/lib/datadog/tracing/buffer.rb +132 -0
- data/lib/datadog/tracing/configuration/ext.rb +51 -0
- data/lib/datadog/tracing/context.rb +68 -0
- data/lib/datadog/tracing/context_provider.rb +82 -0
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/action_cable/event.rb +71 -0
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +58 -0
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +63 -0
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +59 -0
- data/lib/datadog/tracing/contrib/action_cable/events.rb +37 -0
- data/lib/datadog/tracing/contrib/action_cable/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +90 -0
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +36 -0
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +52 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +60 -0
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +47 -0
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_mailer/ext.rb +33 -0
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +160 -0
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +36 -0
- data/lib/datadog/tracing/contrib/action_pack/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +40 -0
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +36 -0
- data/lib/datadog/tracing/contrib/action_view/event.rb +35 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +54 -0
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +57 -0
- data/lib/datadog/tracing/contrib/action_view/events.rb +34 -0
- data/lib/datadog/tracing/contrib/action_view/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +78 -0
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +91 -0
- data/lib/datadog/tracing/contrib/action_view/integration.rb +57 -0
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +47 -0
- data/lib/datadog/tracing/contrib/action_view/utils.rb +36 -0
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/active_job/event.rb +58 -0
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +51 -0
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +49 -0
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/events.rb +42 -0
- data/lib/datadog/tracing/contrib/active_job/ext.rb +39 -0
- data/lib/datadog/tracing/contrib/active_job/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +24 -0
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +36 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +33 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +68 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +45 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +47 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +45 -0
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +32 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/makara_resolver.rb +36 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +138 -0
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +39 -0
- data/lib/datadog/tracing/contrib/active_record/event.rb +30 -0
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +58 -0
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +78 -0
- data/lib/datadog/tracing/contrib/active_record/events.rb +34 -0
- data/lib/datadog/tracing/contrib/active_record/ext.rb +29 -0
- data/lib/datadog/tracing/contrib/active_record/integration.rb +56 -0
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/active_record/utils.rb +128 -0
- data/lib/{ddtrace/vendor/active_record → datadog/tracing/contrib/active_record/vendor}/MIT-LICENSE +0 -0
- data/lib/datadog/tracing/contrib/active_record/vendor/connection_specification.rb +307 -0
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +280 -0
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +73 -0
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +47 -0
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/active_support/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/active_support/integration.rb +51 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +71 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +71 -0
- data/lib/datadog/tracing/contrib/active_support/notifications/subscription.rb +164 -0
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +27 -0
- data/lib/datadog/tracing/contrib/analytics.rb +29 -0
- data/lib/datadog/tracing/contrib/auto_instrument.rb +53 -0
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/aws/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +94 -0
- data/lib/datadog/tracing/contrib/aws/integration.rb +47 -0
- data/lib/datadog/tracing/contrib/aws/parsed_context.rb +60 -0
- data/lib/datadog/tracing/contrib/aws/patcher.rb +57 -0
- data/lib/datadog/tracing/contrib/aws/services.rb +123 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +23 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/context_composite_executor_service.rb +53 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/ext.rb +16 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +27 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/configurable.rb +102 -0
- data/lib/datadog/tracing/contrib/configuration/resolver.rb +85 -0
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +43 -0
- data/lib/datadog/tracing/contrib/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/dalli/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +57 -0
- data/lib/datadog/tracing/contrib/dalli/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +26 -0
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +100 -0
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +36 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +150 -0
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +89 -0
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +176 -0
- data/lib/datadog/tracing/contrib/ethon/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/ethon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +95 -0
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/excon/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/excon/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +169 -0
- data/lib/datadog/tracing/contrib/excon/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/extensions.rb +199 -0
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +42 -0
- data/lib/datadog/tracing/contrib/faraday/connection.rb +22 -0
- data/lib/datadog/tracing/contrib/faraday/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/faraday/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +92 -0
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +56 -0
- data/lib/datadog/tracing/contrib/faraday/rack_builder.rb +22 -0
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +42 -0
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +252 -0
- data/lib/datadog/tracing/contrib/grape/ext.rb +28 -0
- data/lib/datadog/tracing/contrib/grape/instrumentation.rb +37 -0
- data/lib/datadog/tracing/contrib/grape/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/grape/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +36 -0
- data/lib/datadog/tracing/contrib/graphql/ext.rb +19 -0
- data/lib/datadog/tracing/contrib/graphql/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +90 -0
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +93 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +90 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +107 -0
- data/lib/datadog/tracing/contrib/grpc/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/grpc/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb +53 -0
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +43 -0
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/http/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +138 -0
- data/lib/datadog/tracing/contrib/http/integration.rb +49 -0
- data/lib/datadog/tracing/contrib/http/patcher.rb +30 -0
- data/lib/datadog/tracing/contrib/http_annotation_helper.rb +17 -0
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/httpclient/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +116 -0
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +42 -0
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/httprb/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +127 -0
- data/lib/datadog/tracing/contrib/httprb/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +42 -0
- data/lib/datadog/tracing/contrib/integration.rb +78 -0
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_event.rb +18 -0
- data/lib/datadog/tracing/contrib/kafka/consumer_group_event.rb +18 -0
- data/lib/datadog/tracing/contrib/kafka/event.rb +52 -0
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +42 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +49 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +47 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +37 -0
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +40 -0
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +43 -0
- data/lib/datadog/tracing/contrib/kafka/events.rb +48 -0
- data/lib/datadog/tracing/contrib/kafka/ext.rb +52 -0
- data/lib/datadog/tracing/contrib/kafka/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +23 -0
- data/lib/datadog/tracing/contrib/lograge/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +46 -0
- data/lib/datadog/tracing/contrib/lograge/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +47 -0
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +49 -0
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +34 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +121 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +61 -0
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +31 -0
- data/lib/datadog/tracing/contrib/patchable.rb +109 -0
- data/lib/datadog/tracing/contrib/patcher.rb +85 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +128 -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 +35 -0
- data/lib/datadog/tracing/contrib/presto/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +124 -0
- data/lib/datadog/tracing/contrib/presto/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/presto/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +40 -0
- data/lib/datadog/tracing/contrib/qless/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/qless/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/qless/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +74 -0
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +30 -0
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +49 -0
- data/lib/datadog/tracing/contrib/que/ext.rb +34 -0
- data/lib/datadog/tracing/contrib/que/integration.rb +46 -0
- data/lib/datadog/tracing/contrib/que/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/que/tracer.rb +61 -0
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/event.rb +78 -0
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +35 -0
- data/lib/datadog/tracing/contrib/racecar/events.rb +36 -0
- data/lib/datadog/tracing/contrib/racecar/ext.rb +31 -0
- data/lib/datadog/tracing/contrib/racecar/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +51 -0
- data/lib/datadog/tracing/contrib/rack/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/rack/integration.rb +50 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +259 -0
- data/lib/datadog/tracing/contrib/rack/patcher.rb +119 -0
- data/lib/datadog/tracing/contrib/rack/request_queue.rb +48 -0
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +12 -0
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +74 -0
- data/lib/datadog/tracing/contrib/rails/ext.rb +19 -0
- data/lib/datadog/tracing/contrib/rails/framework.rb +148 -0
- data/lib/datadog/tracing/contrib/rails/integration.rb +49 -0
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +32 -0
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +46 -0
- data/lib/datadog/tracing/contrib/rails/patcher.rb +120 -0
- data/lib/datadog/tracing/contrib/rails/railtie.rb +19 -0
- data/lib/datadog/tracing/contrib/rails/utils.rb +28 -0
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +51 -0
- data/lib/datadog/tracing/contrib/rake/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +103 -0
- data/lib/datadog/tracing/contrib/rake/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/rake/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +49 -0
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +40 -0
- data/lib/datadog/tracing/contrib/redis/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +77 -0
- data/lib/datadog/tracing/contrib/redis/integration.rb +47 -0
- data/lib/datadog/tracing/contrib/redis/patcher.rb +35 -0
- data/lib/datadog/tracing/contrib/redis/quantize.rb +79 -0
- data/lib/datadog/tracing/contrib/redis/tags.rb +53 -0
- data/lib/{ddtrace → datadog/tracing}/contrib/redis/vendor/LICENSE +0 -0
- data/lib/datadog/tracing/contrib/redis/vendor/resolver.rb +162 -0
- data/lib/datadog/tracing/contrib/registerable.rb +50 -0
- data/lib/datadog/tracing/contrib/registry.rb +52 -0
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/resque/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/resque/integration.rb +48 -0
- data/lib/datadog/tracing/contrib/resque/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +102 -0
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +37 -0
- data/lib/datadog/tracing/contrib/rest_client/ext.rb +21 -0
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +104 -0
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +23 -0
- data/lib/datadog/tracing/contrib/semantic_logger/ext.rb +15 -0
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +50 -0
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +52 -0
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +33 -0
- data/lib/datadog/tracing/contrib/sequel/database.rb +59 -0
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +64 -0
- data/lib/datadog/tracing/contrib/sequel/ext.rb +22 -0
- data/lib/datadog/tracing/contrib/sequel/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +37 -0
- data/lib/datadog/tracing/contrib/sequel/utils.rb +87 -0
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/shoryuken/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +28 -0
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +61 -0
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +52 -0
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +44 -0
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +44 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +53 -0
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +78 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +52 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/job_fetch.rb +34 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/redis_info.rb +32 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +97 -0
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +43 -0
- data/lib/datadog/tracing/contrib/sinatra/env.rb +66 -0
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +116 -0
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +35 -0
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +76 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +158 -0
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +122 -0
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +38 -0
- data/lib/datadog/tracing/contrib/sneakers/ext.rb +26 -0
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +46 -0
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +29 -0
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +57 -0
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +75 -0
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +35 -0
- data/lib/datadog/tracing/contrib/sucker_punch/exception_handler.rb +28 -0
- data/lib/datadog/tracing/contrib/sucker_punch/ext.rb +27 -0
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +104 -0
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +36 -0
- data/lib/datadog/tracing/contrib/utils/database.rb +31 -0
- data/lib/datadog/tracing/contrib/utils/quantization/hash.rb +111 -0
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +99 -0
- data/lib/datadog/tracing/contrib.rb +77 -0
- data/lib/datadog/tracing/correlation.rb +100 -0
- data/lib/datadog/tracing/distributed/headers/b3.rb +55 -0
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +67 -0
- data/lib/datadog/tracing/distributed/headers/datadog.rb +52 -0
- data/lib/datadog/tracing/distributed/headers/ext.rb +31 -0
- data/lib/datadog/tracing/distributed/headers/parser.rb +37 -0
- data/lib/datadog/tracing/distributed/helpers.rb +78 -0
- data/lib/datadog/tracing/distributed/metadata/b3.rb +55 -0
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +66 -0
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +73 -0
- data/lib/datadog/tracing/distributed/metadata/parser.rb +34 -0
- data/lib/datadog/tracing/event.rb +78 -0
- data/lib/datadog/tracing/flush.rb +74 -0
- data/lib/datadog/tracing/metadata/analytics.rb +26 -0
- data/lib/datadog/tracing/metadata/errors.rb +24 -0
- data/lib/datadog/tracing/metadata/ext.rb +176 -0
- data/lib/datadog/tracing/metadata/tagging.rb +116 -0
- data/lib/datadog/tracing/metadata.rb +20 -0
- data/lib/datadog/tracing/pipeline/span_filter.rb +46 -0
- data/lib/datadog/tracing/pipeline/span_processor.rb +39 -0
- data/lib/datadog/tracing/pipeline.rb +65 -0
- data/lib/datadog/tracing/propagation/grpc.rb +98 -0
- data/lib/datadog/tracing/propagation/http.rb +109 -0
- data/lib/datadog/tracing/runtime/metrics.rb +19 -0
- data/lib/datadog/tracing/sampling/all_sampler.rb +25 -0
- data/lib/datadog/tracing/sampling/ext.rb +27 -0
- data/lib/datadog/tracing/sampling/matcher.rb +68 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +112 -0
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +97 -0
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +41 -0
- data/lib/datadog/tracing/sampling/rate_limiter.rb +185 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +55 -0
- data/lib/datadog/tracing/sampling/rule.rb +76 -0
- data/lib/datadog/tracing/sampling/rule_sampler.rb +131 -0
- data/lib/datadog/tracing/sampling/sampler.rb +44 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +80 -0
- data/lib/datadog/tracing/span.rb +232 -0
- data/lib/datadog/tracing/span_operation.rb +521 -0
- data/lib/datadog/tracing/sync_writer.rb +69 -0
- data/lib/datadog/tracing/trace_digest.rb +60 -0
- data/lib/datadog/tracing/trace_operation.rb +438 -0
- data/lib/datadog/tracing/trace_segment.rb +207 -0
- data/lib/datadog/tracing/tracer.rb +505 -0
- data/lib/datadog/tracing/workers/trace_writer.rb +195 -0
- data/lib/datadog/tracing/workers.rb +125 -0
- data/lib/datadog/tracing/writer.rb +180 -0
- data/lib/datadog/tracing.rb +142 -0
- data/lib/ddtrace/auto_instrument.rb +14 -3
- data/lib/ddtrace/auto_instrument_base.rb +1 -0
- data/lib/ddtrace/profiling/preload.rb +2 -2
- data/lib/ddtrace/transport/ext.rb +41 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +5 -3
- data/lib/ddtrace/transport/http/adapters/registry.rb +1 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +2 -1
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -3
- data/lib/ddtrace/transport/http/api/endpoint.rb +1 -0
- data/lib/ddtrace/transport/http/api/fallbacks.rb +1 -0
- data/lib/ddtrace/transport/http/api/instance.rb +1 -0
- data/lib/ddtrace/transport/http/api/map.rb +2 -1
- data/lib/ddtrace/transport/http/api/spec.rb +1 -0
- data/lib/ddtrace/transport/http/api.rb +8 -14
- data/lib/ddtrace/transport/http/builder.rb +7 -6
- data/lib/ddtrace/transport/http/client.rb +5 -3
- data/lib/ddtrace/transport/http/env.rb +1 -0
- data/lib/ddtrace/transport/http/response.rb +36 -5
- data/lib/ddtrace/transport/http/statistics.rb +2 -1
- data/lib/ddtrace/transport/http/traces.rb +6 -3
- data/lib/ddtrace/transport/http.rb +39 -31
- data/lib/ddtrace/transport/io/client.rb +6 -3
- data/lib/ddtrace/transport/io/response.rb +2 -1
- data/lib/ddtrace/transport/io/traces.rb +5 -4
- data/lib/ddtrace/transport/io.rb +5 -4
- data/lib/ddtrace/transport/parcel.rb +2 -0
- data/lib/ddtrace/transport/request.rb +1 -0
- data/lib/ddtrace/transport/response.rb +1 -0
- data/lib/ddtrace/transport/serializable_trace.rb +118 -0
- data/lib/ddtrace/transport/statistics.rb +6 -4
- data/lib/ddtrace/transport/trace_formatter.rb +187 -0
- data/lib/ddtrace/transport/traces.rb +17 -7
- data/lib/ddtrace/version.rb +15 -13
- data/lib/ddtrace.rb +9 -48
- metadata +637 -499
- data/.editorconfig +0 -22
- data/.gitignore +0 -67
- data/.yardopts +0 -5
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -56
- data/docs/DevelopmentGuide.md +0 -259
- data/docs/GettingStarted.md +0 -2626
- data/docs/ProfilingDevelopment.md +0 -107
- data/lib/datadog/ci/context_flush.rb +0 -29
- data/lib/datadog/contrib.rb +0 -71
- data/lib/ddtrace/analytics.rb +0 -39
- data/lib/ddtrace/buffer.rb +0 -340
- data/lib/ddtrace/chunker.rb +0 -35
- data/lib/ddtrace/configuration/agent_settings_resolver.rb +0 -309
- data/lib/ddtrace/configuration/base.rb +0 -82
- data/lib/ddtrace/configuration/components.rb +0 -292
- data/lib/ddtrace/configuration/dependency_resolver.rb +0 -25
- data/lib/ddtrace/configuration/option.rb +0 -65
- data/lib/ddtrace/configuration/option_definition.rb +0 -122
- data/lib/ddtrace/configuration/option_definition_set.rb +0 -19
- data/lib/ddtrace/configuration/option_set.rb +0 -7
- data/lib/ddtrace/configuration/options.rb +0 -112
- data/lib/ddtrace/configuration/pin_setup.rb +0 -32
- data/lib/ddtrace/configuration/settings.rb +0 -413
- data/lib/ddtrace/configuration.rb +0 -195
- data/lib/ddtrace/context.rb +0 -334
- data/lib/ddtrace/context_flush.rb +0 -82
- data/lib/ddtrace/context_provider.rb +0 -62
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/action_cable/event.rb +0 -67
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +0 -50
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +0 -56
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +0 -51
- data/lib/ddtrace/contrib/action_cable/events.rb +0 -34
- data/lib/ddtrace/contrib/action_cable/ext.rb +0 -27
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +0 -78
- data/lib/ddtrace/contrib/action_cable/integration.rb +0 -46
- data/lib/ddtrace/contrib/action_cable/patcher.rb +0 -29
- data/lib/ddtrace/contrib/action_mailer/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/action_mailer/event.rb +0 -50
- data/lib/ddtrace/contrib/action_mailer/events/deliver.rb +0 -54
- data/lib/ddtrace/contrib/action_mailer/events/process.rb +0 -41
- data/lib/ddtrace/contrib/action_mailer/events.rb +0 -31
- data/lib/ddtrace/contrib/action_mailer/ext.rb +0 -32
- data/lib/ddtrace/contrib/action_mailer/integration.rb +0 -45
- data/lib/ddtrace/contrib/action_mailer/patcher.rb +0 -27
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +0 -157
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +0 -26
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/action_pack/ext.rb +0 -20
- data/lib/ddtrace/contrib/action_pack/integration.rb +0 -46
- data/lib/ddtrace/contrib/action_pack/patcher.rb +0 -24
- data/lib/ddtrace/contrib/action_pack/utils.rb +0 -37
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/action_view/event.rb +0 -36
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +0 -47
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +0 -50
- data/lib/ddtrace/contrib/action_view/events.rb +0 -31
- data/lib/ddtrace/contrib/action_view/ext.rb +0 -21
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +0 -75
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +0 -168
- data/lib/ddtrace/contrib/action_view/integration.rb +0 -53
- data/lib/ddtrace/contrib/action_view/patcher.rb +0 -48
- data/lib/ddtrace/contrib/action_view/utils.rb +0 -33
- data/lib/ddtrace/contrib/active_job/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/active_job/event.rb +0 -54
- data/lib/ddtrace/contrib/active_job/events/discard.rb +0 -46
- data/lib/ddtrace/contrib/active_job/events/enqueue.rb +0 -45
- data/lib/ddtrace/contrib/active_job/events/enqueue_at.rb +0 -45
- data/lib/ddtrace/contrib/active_job/events/enqueue_retry.rb +0 -47
- data/lib/ddtrace/contrib/active_job/events/perform.rb +0 -45
- data/lib/ddtrace/contrib/active_job/events/retry_stopped.rb +0 -46
- data/lib/ddtrace/contrib/active_job/events.rb +0 -39
- data/lib/ddtrace/contrib/active_job/ext.rb +0 -32
- data/lib/ddtrace/contrib/active_job/integration.rb +0 -46
- data/lib/ddtrace/contrib/active_job/log_injection.rb +0 -21
- data/lib/ddtrace/contrib/active_job/patcher.rb +0 -33
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +0 -69
- data/lib/ddtrace/contrib/active_model_serializers/events/render.rb +0 -33
- data/lib/ddtrace/contrib/active_model_serializers/events/serialize.rb +0 -36
- data/lib/ddtrace/contrib/active_model_serializers/events.rb +0 -31
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +0 -21
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +0 -41
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +0 -30
- data/lib/ddtrace/contrib/active_record/configuration/makara_resolver.rb +0 -31
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +0 -135
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +0 -36
- data/lib/ddtrace/contrib/active_record/event.rb +0 -31
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +0 -61
- data/lib/ddtrace/contrib/active_record/events/sql.rb +0 -69
- data/lib/ddtrace/contrib/active_record/events.rb +0 -31
- data/lib/ddtrace/contrib/active_record/ext.rb +0 -25
- data/lib/ddtrace/contrib/active_record/integration.rb +0 -54
- data/lib/ddtrace/contrib/active_record/patcher.rb +0 -24
- data/lib/ddtrace/contrib/active_record/utils.rb +0 -124
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +0 -259
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +0 -70
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +0 -44
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/active_support/ext.rb +0 -28
- data/lib/ddtrace/contrib/active_support/integration.rb +0 -47
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +0 -76
- data/lib/ddtrace/contrib/active_support/notifications/subscriber.rb +0 -68
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +0 -164
- data/lib/ddtrace/contrib/active_support/patcher.rb +0 -24
- data/lib/ddtrace/contrib/analytics.rb +0 -25
- data/lib/ddtrace/contrib/auto_instrument.rb +0 -48
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/aws/ext.rb +0 -24
- data/lib/ddtrace/contrib/aws/instrumentation.rb +0 -91
- data/lib/ddtrace/contrib/aws/integration.rb +0 -43
- data/lib/ddtrace/contrib/aws/parsed_context.rb +0 -57
- data/lib/ddtrace/contrib/aws/patcher.rb +0 -54
- data/lib/ddtrace/contrib/aws/services.rb +0 -119
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +0 -21
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +0 -42
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +0 -13
- data/lib/ddtrace/contrib/concurrent_ruby/future_patch.rb +0 -24
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +0 -39
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +0 -30
- data/lib/ddtrace/contrib/configurable.rb +0 -103
- data/lib/ddtrace/contrib/configuration/resolver.rb +0 -82
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +0 -40
- data/lib/ddtrace/contrib/configuration/settings.rb +0 -56
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/dalli/ext.rb +0 -21
- data/lib/ddtrace/contrib/dalli/instrumentation.rb +0 -55
- data/lib/ddtrace/contrib/dalli/integration.rb +0 -39
- data/lib/ddtrace/contrib/dalli/patcher.rb +0 -26
- data/lib/ddtrace/contrib/dalli/quantize.rb +0 -23
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/delayed_job/ext.rb +0 -24
- data/lib/ddtrace/contrib/delayed_job/integration.rb +0 -39
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +0 -29
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +0 -85
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +0 -23
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +0 -40
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +0 -123
- data/lib/ddtrace/contrib/elasticsearch/quantize.rb +0 -84
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +0 -152
- data/lib/ddtrace/contrib/ethon/ext.rb +0 -20
- data/lib/ddtrace/contrib/ethon/integration.rb +0 -44
- data/lib/ddtrace/contrib/ethon/multi_patch.rb +0 -85
- data/lib/ddtrace/contrib/ethon/patcher.rb +0 -27
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +0 -34
- data/lib/ddtrace/contrib/excon/ext.rb +0 -18
- data/lib/ddtrace/contrib/excon/integration.rb +0 -44
- data/lib/ddtrace/contrib/excon/middleware.rb +0 -164
- data/lib/ddtrace/contrib/excon/patcher.rb +0 -28
- data/lib/ddtrace/contrib/extensions.rb +0 -169
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +0 -39
- data/lib/ddtrace/contrib/faraday/connection.rb +0 -19
- data/lib/ddtrace/contrib/faraday/ext.rb +0 -18
- data/lib/ddtrace/contrib/faraday/integration.rb +0 -44
- data/lib/ddtrace/contrib/faraday/middleware.rb +0 -86
- data/lib/ddtrace/contrib/faraday/patcher.rb +0 -54
- data/lib/ddtrace/contrib/faraday/rack_builder.rb +0 -19
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +0 -39
- data/lib/ddtrace/contrib/grape/endpoint.rb +0 -246
- data/lib/ddtrace/contrib/grape/ext.rb +0 -24
- data/lib/ddtrace/contrib/grape/instrumentation.rb +0 -34
- data/lib/ddtrace/contrib/grape/integration.rb +0 -40
- data/lib/ddtrace/contrib/grape/patcher.rb +0 -32
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/graphql/ext.rb +0 -17
- data/lib/ddtrace/contrib/graphql/integration.rb +0 -40
- data/lib/ddtrace/contrib/graphql/patcher.rb +0 -61
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +0 -59
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +0 -80
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +0 -79
- data/lib/ddtrace/contrib/grpc/ext.rb +0 -19
- data/lib/ddtrace/contrib/grpc/integration.rb +0 -39
- data/lib/ddtrace/contrib/grpc/intercept_with_datadog.rb +0 -50
- data/lib/ddtrace/contrib/grpc/patcher.rb +0 -34
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +0 -38
- data/lib/ddtrace/contrib/http/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/http/ext.rb +0 -18
- data/lib/ddtrace/contrib/http/instrumentation.rb +0 -180
- data/lib/ddtrace/contrib/http/integration.rb +0 -46
- data/lib/ddtrace/contrib/http/patcher.rb +0 -27
- data/lib/ddtrace/contrib/http_annotation_helper.rb +0 -11
- data/lib/ddtrace/contrib/httpclient/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/httpclient/ext.rb +0 -18
- data/lib/ddtrace/contrib/httpclient/instrumentation.rb +0 -148
- data/lib/ddtrace/contrib/httpclient/integration.rb +0 -44
- data/lib/ddtrace/contrib/httpclient/patcher.rb +0 -39
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +0 -33
- data/lib/ddtrace/contrib/httprb/ext.rb +0 -18
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +0 -158
- data/lib/ddtrace/contrib/httprb/integration.rb +0 -44
- data/lib/ddtrace/contrib/httprb/patcher.rb +0 -39
- data/lib/ddtrace/contrib/integration.rb +0 -17
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +0 -15
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +0 -15
- data/lib/ddtrace/contrib/kafka/event.rb +0 -52
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +0 -35
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +0 -42
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +0 -40
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +0 -40
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +0 -30
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +0 -30
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +0 -30
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +0 -33
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +0 -36
- data/lib/ddtrace/contrib/kafka/events.rb +0 -45
- data/lib/ddtrace/contrib/kafka/ext.rb +0 -42
- data/lib/ddtrace/contrib/kafka/integration.rb +0 -40
- data/lib/ddtrace/contrib/kafka/patcher.rb +0 -27
- data/lib/ddtrace/contrib/lograge/configuration/settings.rb +0 -19
- data/lib/ddtrace/contrib/lograge/ext.rb +0 -11
- data/lib/ddtrace/contrib/lograge/instrumentation.rb +0 -39
- data/lib/ddtrace/contrib/lograge/integration.rb +0 -46
- data/lib/ddtrace/contrib/lograge/patcher.rb +0 -26
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +0 -34
- data/lib/ddtrace/contrib/mongodb/ext.rb +0 -24
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +0 -70
- data/lib/ddtrace/contrib/mongodb/integration.rb +0 -44
- data/lib/ddtrace/contrib/mongodb/parsers.rb +0 -69
- data/lib/ddtrace/contrib/mongodb/patcher.rb +0 -32
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +0 -112
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/mysql2/ext.rb +0 -19
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +0 -65
- data/lib/ddtrace/contrib/mysql2/integration.rb +0 -39
- data/lib/ddtrace/contrib/mysql2/patcher.rb +0 -28
- data/lib/ddtrace/contrib/patchable.rb +0 -71
- data/lib/ddtrace/contrib/patcher.rb +0 -66
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/presto/ext.rb +0 -29
- data/lib/ddtrace/contrib/presto/instrumentation.rb +0 -111
- data/lib/ddtrace/contrib/presto/integration.rb +0 -39
- data/lib/ddtrace/contrib/presto/patcher.rb +0 -34
- data/lib/ddtrace/contrib/qless/configuration/settings.rb +0 -36
- data/lib/ddtrace/contrib/qless/ext.rb +0 -21
- data/lib/ddtrace/contrib/qless/integration.rb +0 -39
- data/lib/ddtrace/contrib/qless/patcher.rb +0 -35
- data/lib/ddtrace/contrib/qless/qless_job.rb +0 -74
- data/lib/ddtrace/contrib/qless/tracer_cleaner.rb +0 -34
- data/lib/ddtrace/contrib/que/configuration/settings.rb +0 -44
- data/lib/ddtrace/contrib/que/ext.rb +0 -31
- data/lib/ddtrace/contrib/que/integration.rb +0 -43
- data/lib/ddtrace/contrib/que/patcher.rb +0 -25
- data/lib/ddtrace/contrib/que/tracer.rb +0 -58
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/racecar/event.rb +0 -77
- data/lib/ddtrace/contrib/racecar/events/batch.rb +0 -28
- data/lib/ddtrace/contrib/racecar/events/consume.rb +0 -28
- data/lib/ddtrace/contrib/racecar/events/message.rb +0 -28
- data/lib/ddtrace/contrib/racecar/events.rb +0 -33
- data/lib/ddtrace/contrib/racecar/ext.rb +0 -26
- data/lib/ddtrace/contrib/racecar/integration.rb +0 -40
- data/lib/ddtrace/contrib/racecar/patcher.rb +0 -27
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +0 -47
- data/lib/ddtrace/contrib/rack/ext.rb +0 -22
- data/lib/ddtrace/contrib/rack/integration.rb +0 -46
- data/lib/ddtrace/contrib/rack/middlewares.rb +0 -288
- data/lib/ddtrace/contrib/rack/patcher.rb +0 -106
- data/lib/ddtrace/contrib/rack/request_queue.rb +0 -45
- data/lib/ddtrace/contrib/rails/auto_instrument_railtie.rb +0 -10
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +0 -101
- data/lib/ddtrace/contrib/rails/ext.rb +0 -18
- data/lib/ddtrace/contrib/rails/framework.rb +0 -172
- data/lib/ddtrace/contrib/rails/integration.rb +0 -45
- data/lib/ddtrace/contrib/rails/log_injection.rb +0 -42
- data/lib/ddtrace/contrib/rails/middlewares.rb +0 -44
- data/lib/ddtrace/contrib/rails/patcher.rb +0 -119
- data/lib/ddtrace/contrib/rails/railtie.rb +0 -18
- data/lib/ddtrace/contrib/rails/utils.rb +0 -25
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/rake/ext.rb +0 -22
- data/lib/ddtrace/contrib/rake/instrumentation.rb +0 -91
- data/lib/ddtrace/contrib/rake/integration.rb +0 -39
- data/lib/ddtrace/contrib/rake/patcher.rb +0 -31
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +0 -46
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +0 -36
- data/lib/ddtrace/contrib/redis/ext.rb +0 -23
- data/lib/ddtrace/contrib/redis/instrumentation.rb +0 -90
- data/lib/ddtrace/contrib/redis/integration.rb +0 -43
- data/lib/ddtrace/contrib/redis/patcher.rb +0 -33
- data/lib/ddtrace/contrib/redis/quantize.rb +0 -76
- data/lib/ddtrace/contrib/redis/tags.rb +0 -47
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +0 -159
- data/lib/ddtrace/contrib/registerable.rb +0 -33
- data/lib/ddtrace/contrib/registry.rb +0 -43
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +0 -49
- data/lib/ddtrace/contrib/resque/ext.rb +0 -18
- data/lib/ddtrace/contrib/resque/integration.rb +0 -44
- data/lib/ddtrace/contrib/resque/patcher.rb +0 -30
- data/lib/ddtrace/contrib/resque/resque_job.rb +0 -104
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/rest_client/ext.rb +0 -18
- data/lib/ddtrace/contrib/rest_client/integration.rb +0 -39
- data/lib/ddtrace/contrib/rest_client/patcher.rb +0 -25
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +0 -92
- data/lib/ddtrace/contrib/semantic_logger/configuration/settings.rb +0 -19
- data/lib/ddtrace/contrib/semantic_logger/ext.rb +0 -11
- data/lib/ddtrace/contrib/semantic_logger/instrumentation.rb +0 -43
- data/lib/ddtrace/contrib/semantic_logger/integration.rb +0 -48
- data/lib/ddtrace/contrib/semantic_logger/patcher.rb +0 -26
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +0 -29
- data/lib/ddtrace/contrib/sequel/database.rb +0 -64
- data/lib/ddtrace/contrib/sequel/dataset.rb +0 -64
- data/lib/ddtrace/contrib/sequel/ext.rb +0 -20
- data/lib/ddtrace/contrib/sequel/integration.rb +0 -39
- data/lib/ddtrace/contrib/sequel/patcher.rb +0 -34
- data/lib/ddtrace/contrib/sequel/utils.rb +0 -75
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +0 -32
- data/lib/ddtrace/contrib/shoryuken/ext.rb +0 -22
- data/lib/ddtrace/contrib/shoryuken/integration.rb +0 -40
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +0 -25
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +0 -56
- data/lib/ddtrace/contrib/sidekiq/client_tracer.rb +0 -44
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +0 -38
- data/lib/ddtrace/contrib/sidekiq/ext.rb +0 -31
- data/lib/ddtrace/contrib/sidekiq/integration.rb +0 -49
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +0 -68
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/heartbeat.rb +0 -30
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/job_fetch.rb +0 -30
- data/lib/ddtrace/contrib/sidekiq/server_internal_tracer/scheduled_push.rb +0 -29
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +0 -66
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +0 -45
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +0 -40
- data/lib/ddtrace/contrib/sinatra/env.rb +0 -59
- data/lib/ddtrace/contrib/sinatra/ext.rb +0 -28
- data/lib/ddtrace/contrib/sinatra/headers.rb +0 -30
- data/lib/ddtrace/contrib/sinatra/integration.rb +0 -39
- data/lib/ddtrace/contrib/sinatra/patcher.rb +0 -30
- data/lib/ddtrace/contrib/sinatra/tracer.rb +0 -150
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +0 -112
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +0 -34
- data/lib/ddtrace/contrib/sneakers/ext.rb +0 -23
- data/lib/ddtrace/contrib/sneakers/integration.rb +0 -42
- data/lib/ddtrace/contrib/sneakers/patcher.rb +0 -25
- data/lib/ddtrace/contrib/sneakers/tracer.rb +0 -54
- data/lib/ddtrace/contrib/status_code_matcher.rb +0 -70
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +0 -31
- data/lib/ddtrace/contrib/sucker_punch/exception_handler.rb +0 -25
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +0 -22
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +0 -89
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +0 -39
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +0 -44
- data/lib/ddtrace/correlation.rb +0 -40
- data/lib/ddtrace/diagnostics/environment_logger.rb +0 -280
- data/lib/ddtrace/diagnostics/health.rb +0 -34
- data/lib/ddtrace/distributed_tracing/headers/b3.rb +0 -45
- data/lib/ddtrace/distributed_tracing/headers/b3_single.rb +0 -57
- data/lib/ddtrace/distributed_tracing/headers/datadog.rb +0 -43
- data/lib/ddtrace/distributed_tracing/headers/headers.rb +0 -72
- data/lib/ddtrace/distributed_tracing/headers/helpers.rb +0 -44
- data/lib/ddtrace/encoding.rb +0 -72
- data/lib/ddtrace/error.rb +0 -97
- data/lib/ddtrace/event.rb +0 -53
- data/lib/ddtrace/ext/analytics.rb +0 -13
- data/lib/ddtrace/ext/app_types.rb +0 -12
- data/lib/ddtrace/ext/correlation.rb +0 -12
- data/lib/ddtrace/ext/diagnostics.rb +0 -37
- data/lib/ddtrace/ext/distributed.rb +0 -40
- data/lib/ddtrace/ext/environment.rb +0 -24
- data/lib/ddtrace/ext/errors.rb +0 -11
- data/lib/ddtrace/ext/forced_tracing.rb +0 -26
- data/lib/ddtrace/ext/git.rb +0 -32
- data/lib/ddtrace/ext/http.rb +0 -47
- data/lib/ddtrace/ext/integration.rb +0 -9
- data/lib/ddtrace/ext/manual_tracing.rb +0 -10
- data/lib/ddtrace/ext/metrics.rb +0 -16
- data/lib/ddtrace/ext/net.rb +0 -11
- data/lib/ddtrace/ext/priority.rb +0 -19
- data/lib/ddtrace/ext/profiling.rb +0 -53
- data/lib/ddtrace/ext/runtime.rb +0 -25
- data/lib/ddtrace/ext/sampling.rb +0 -17
- data/lib/ddtrace/ext/sql.rb +0 -9
- data/lib/ddtrace/ext/test.rb +0 -9
- data/lib/ddtrace/ext/transport.rb +0 -32
- data/lib/ddtrace/forced_tracing.rb +0 -39
- data/lib/ddtrace/logger.rb +0 -41
- data/lib/ddtrace/metrics.rb +0 -282
- data/lib/ddtrace/opentelemetry/extensions.rb +0 -14
- data/lib/ddtrace/opentelemetry/span.rb +0 -34
- data/lib/ddtrace/opentracer/binary_propagator.rb +0 -25
- data/lib/ddtrace/opentracer/carrier.rb +0 -7
- data/lib/ddtrace/opentracer/distributed_headers.rb +0 -56
- data/lib/ddtrace/opentracer/global_tracer.rb +0 -16
- data/lib/ddtrace/opentracer/propagator.rb +0 -23
- data/lib/ddtrace/opentracer/rack_propagator.rb +0 -61
- data/lib/ddtrace/opentracer/scope.rb +0 -16
- data/lib/ddtrace/opentracer/scope_manager.rb +0 -7
- data/lib/ddtrace/opentracer/span.rb +0 -95
- data/lib/ddtrace/opentracer/span_context.rb +0 -15
- data/lib/ddtrace/opentracer/span_context_factory.rb +0 -24
- data/lib/ddtrace/opentracer/text_map_propagator.rb +0 -76
- data/lib/ddtrace/opentracer/thread_local_scope.rb +0 -32
- data/lib/ddtrace/opentracer/thread_local_scope_manager.rb +0 -41
- data/lib/ddtrace/opentracer/tracer.rb +0 -209
- data/lib/ddtrace/opentracer.rb +0 -22
- data/lib/ddtrace/patcher.rb +0 -69
- data/lib/ddtrace/pin.rb +0 -86
- data/lib/ddtrace/pipeline/span_filter.rb +0 -39
- data/lib/ddtrace/pipeline/span_processor.rb +0 -21
- data/lib/ddtrace/pipeline.rb +0 -47
- data/lib/ddtrace/profiling/backtrace_location.rb +0 -33
- data/lib/ddtrace/profiling/buffer.rb +0 -42
- data/lib/ddtrace/profiling/collectors/stack.rb +0 -297
- data/lib/ddtrace/profiling/encoding/profile.rb +0 -46
- data/lib/ddtrace/profiling/event.rb +0 -14
- data/lib/ddtrace/profiling/events/stack.rb +0 -81
- data/lib/ddtrace/profiling/exporter.rb +0 -24
- data/lib/ddtrace/profiling/ext/forking.rb +0 -98
- data/lib/ddtrace/profiling/flush.rb +0 -44
- data/lib/ddtrace/profiling/native_extension.rb +0 -40
- data/lib/ddtrace/profiling/pprof/builder.rb +0 -126
- data/lib/ddtrace/profiling/pprof/converter.rb +0 -103
- data/lib/ddtrace/profiling/pprof/message_set.rb +0 -15
- data/lib/ddtrace/profiling/pprof/payload.rb +0 -19
- data/lib/ddtrace/profiling/pprof/pprof_pb.rb +0 -82
- data/lib/ddtrace/profiling/pprof/stack_sample.rb +0 -140
- data/lib/ddtrace/profiling/pprof/string_table.rb +0 -11
- data/lib/ddtrace/profiling/pprof/template.rb +0 -119
- data/lib/ddtrace/profiling/profiler.rb +0 -31
- data/lib/ddtrace/profiling/recorder.rb +0 -96
- data/lib/ddtrace/profiling/scheduler.rb +0 -150
- data/lib/ddtrace/profiling/tasks/setup.rb +0 -90
- data/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +0 -42
- data/lib/ddtrace/profiling/trace_identifiers/helper.rb +0 -46
- data/lib/ddtrace/profiling/transport/client.rb +0 -15
- data/lib/ddtrace/profiling/transport/http/api/endpoint.rb +0 -94
- data/lib/ddtrace/profiling/transport/http/api/instance.rb +0 -37
- data/lib/ddtrace/profiling/transport/http/api/spec.rb +0 -41
- data/lib/ddtrace/profiling/transport/http/api.rb +0 -44
- data/lib/ddtrace/profiling/transport/http/builder.rb +0 -29
- data/lib/ddtrace/profiling/transport/http/client.rb +0 -34
- data/lib/ddtrace/profiling/transport/http/response.rb +0 -22
- data/lib/ddtrace/profiling/transport/http.rb +0 -111
- data/lib/ddtrace/profiling/transport/io/client.rb +0 -28
- data/lib/ddtrace/profiling/transport/io/response.rb +0 -17
- data/lib/ddtrace/profiling/transport/io.rb +0 -31
- data/lib/ddtrace/profiling/transport/parcel.rb +0 -18
- data/lib/ddtrace/profiling/transport/request.rb +0 -16
- data/lib/ddtrace/profiling/transport/response.rb +0 -9
- data/lib/ddtrace/profiling.rb +0 -149
- data/lib/ddtrace/propagation/grpc_propagator.rb +0 -75
- data/lib/ddtrace/propagation/http_propagator.rb +0 -91
- data/lib/ddtrace/quantization/hash.rb +0 -104
- data/lib/ddtrace/quantization/http.rb +0 -90
- data/lib/ddtrace/runtime/metrics.rb +0 -135
- data/lib/ddtrace/sampler.rb +0 -303
- data/lib/ddtrace/sampling/matcher.rb +0 -58
- data/lib/ddtrace/sampling/rate_limiter.rb +0 -177
- data/lib/ddtrace/sampling/rule.rb +0 -62
- data/lib/ddtrace/sampling/rule_sampler.rb +0 -133
- data/lib/ddtrace/sampling.rb +0 -3
- data/lib/ddtrace/span.rb +0 -445
- data/lib/ddtrace/sync_writer.rb +0 -69
- data/lib/ddtrace/tasks/exec.rb +0 -47
- data/lib/ddtrace/tasks/help.rb +0 -15
- data/lib/ddtrace/tracer.rb +0 -449
- data/lib/ddtrace/utils/compression.rb +0 -28
- data/lib/ddtrace/utils/database.rb +0 -26
- data/lib/ddtrace/utils/forking.rb +0 -53
- data/lib/ddtrace/utils/object_set.rb +0 -40
- data/lib/ddtrace/utils/only_once.rb +0 -41
- data/lib/ddtrace/utils/sequence.rb +0 -18
- data/lib/ddtrace/utils/string_table.rb +0 -46
- data/lib/ddtrace/utils/time.rb +0 -51
- data/lib/ddtrace/utils.rb +0 -80
- data/lib/ddtrace/vendor/active_record/connection_specification.rb +0 -302
- data/lib/ddtrace/vendor/multipart-post/multipart/post/composite_read_io.rb +0 -117
- data/lib/ddtrace/vendor/multipart-post/multipart/post/multipartable.rb +0 -58
- data/lib/ddtrace/vendor/multipart-post/multipart/post/parts.rb +0 -136
- data/lib/ddtrace/vendor/multipart-post/multipart/post/version.rb +0 -10
- data/lib/ddtrace/vendor/multipart-post/multipart/post.rb +0 -9
- data/lib/ddtrace/vendor/multipart-post/multipart.rb +0 -13
- data/lib/ddtrace/vendor/multipart-post/net/http/post/multipart.rb +0 -33
- data/lib/ddtrace/worker.rb +0 -21
- data/lib/ddtrace/workers/async.rb +0 -175
- data/lib/ddtrace/workers/interval_loop.rb +0 -116
- data/lib/ddtrace/workers/polling.rb +0 -56
- data/lib/ddtrace/workers/queue.rb +0 -41
- data/lib/ddtrace/workers/runtime_metrics.rb +0 -65
- data/lib/ddtrace/workers/trace_writer.rb +0 -200
- data/lib/ddtrace/workers.rb +0 -123
- data/lib/ddtrace/writer.rb +0 -200
|
@@ -1,103 +1,88 @@
|
|
|
1
1
|
# typed: ignore
|
|
2
|
-
# rubocop:disable Style/StderrPuts
|
|
3
|
-
|
|
4
|
-
# Older Rubies don't have the MJIT header, used by the JIT compiler, so we need to use a different approach
|
|
5
|
-
CAN_USE_MJIT_HEADER = RUBY_VERSION >= '2.6'
|
|
6
|
-
|
|
7
|
-
def on_jruby?
|
|
8
|
-
# We don't support JRuby for profiling, and JRuby doesn't support native extensions, so let's just skip this entire
|
|
9
|
-
# thing so that JRuby users of dd-trace-rb aren't impacted.
|
|
10
|
-
RUBY_ENGINE == 'jruby'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def on_truffleruby?
|
|
14
|
-
# We don't officially support TruffleRuby for dd-trace-rb at all BUT let's not break adventurous customers that
|
|
15
|
-
# want to give it a try.
|
|
16
|
-
RUBY_ENGINE == 'truffleruby'
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def on_windows?
|
|
20
|
-
# Microsoft Windows is unsupported, so let's not build the extension there.
|
|
21
|
-
Gem.win_platform?
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def expected_to_use_mjit_but_mjit_is_disabled?
|
|
25
|
-
# On some Rubies, we require the mjit header to be present. If Ruby was installed without MJIT support, we also skip
|
|
26
|
-
# building the extension.
|
|
27
|
-
mjit_disabled = CAN_USE_MJIT_HEADER && RbConfig::CONFIG['MJIT_SUPPORT'] != 'yes'
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
3
|
+
# rubocop:disable Style/StderrPuts
|
|
4
|
+
# rubocop:disable Style/GlobalVars
|
|
5
|
+
|
|
6
|
+
require_relative 'native_extension_helpers'
|
|
7
|
+
|
|
8
|
+
SKIPPED_REASON_FILE = "#{__dir__}/skipped_reason.txt".freeze
|
|
9
|
+
# Not a problem if the file doesn't exist or we can't delete it
|
|
10
|
+
File.delete(SKIPPED_REASON_FILE) rescue nil
|
|
11
|
+
|
|
12
|
+
def skip_building_extension!(reason)
|
|
13
|
+
fail_install_if_missing_extension =
|
|
14
|
+
Datadog::Profiling::NativeExtensionHelpers.fail_install_if_missing_extension?
|
|
15
|
+
|
|
16
|
+
$stderr.puts(
|
|
17
|
+
Datadog::Profiling::NativeExtensionHelpers::Supported.failure_banner_for(
|
|
18
|
+
**reason,
|
|
19
|
+
fail_install: fail_install_if_missing_extension,
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
File.write(
|
|
24
|
+
SKIPPED_REASON_FILE,
|
|
25
|
+
Datadog::Profiling::NativeExtensionHelpers::Supported.render_skipped_reason_file(**reason),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
if fail_install_if_missing_extension
|
|
29
|
+
require 'mkmf'
|
|
30
|
+
Logging.message(
|
|
31
|
+
' [ddtrace] Failure cause: ' \
|
|
32
|
+
"#{Datadog::Profiling::NativeExtensionHelpers::Supported.render_skipped_reason_file(**reason)}\n"
|
|
33
|
+
)
|
|
34
|
+
else
|
|
35
|
+
File.write('Makefile', 'all install clean: # dummy makefile that does nothing')
|
|
41
36
|
end
|
|
42
37
|
|
|
43
|
-
mjit_disabled
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def disabled_via_env?
|
|
47
|
-
# Experimental toggle to disable building the extension.
|
|
48
|
-
# Disabling the extension will lead to the profiler not working in future releases.
|
|
49
|
-
# If you needed to use this, please tell us why on <https://github.com/DataDog/dd-trace-rb/issues/new>.
|
|
50
|
-
ENV['DD_PROFILING_NO_EXTENSION'].to_s.downcase == 'true'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def skip_building_extension?
|
|
54
|
-
disabled_via_env? || on_jruby? || on_truffleruby? || on_windows? || expected_to_use_mjit_but_mjit_is_disabled?
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
# IMPORTANT: When adding flags, remember that our customers compile with a wide range of gcc/clang versions, so
|
|
58
|
-
# doublecheck that what you're adding can be reasonably expected to work on their systems.
|
|
59
|
-
def add_compiler_flag(flag)
|
|
60
|
-
$CFLAGS << ' ' << flag
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def skip_building_extension!
|
|
64
|
-
File.write('Makefile', 'all install clean: # dummy makefile that does nothing')
|
|
65
38
|
exit
|
|
66
39
|
end
|
|
67
40
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
+------------------------------------------------------------------------------+
|
|
71
|
-
| Skipping build of profiling native extension and replacing it with a no-op |
|
|
72
|
-
| Makefile |
|
|
73
|
-
+------------------------------------------------------------------------------+
|
|
74
|
-
|
|
75
|
-
))
|
|
76
|
-
skip_building_extension!
|
|
41
|
+
unless Datadog::Profiling::NativeExtensionHelpers::Supported.supported?
|
|
42
|
+
skip_building_extension!(Datadog::Profiling::NativeExtensionHelpers::Supported.unsupported_reason)
|
|
77
43
|
end
|
|
78
44
|
|
|
79
|
-
$stderr.puts(
|
|
45
|
+
$stderr.puts(
|
|
46
|
+
%(
|
|
80
47
|
+------------------------------------------------------------------------------+
|
|
81
|
-
| ** Preparing to build the ddtrace native extension... **
|
|
48
|
+
| ** Preparing to build the ddtrace profiling native extension... ** |
|
|
82
49
|
| |
|
|
83
50
|
| If you run into any failures during this step, you can set the |
|
|
84
51
|
| `DD_PROFILING_NO_EXTENSION` environment variable to `true` e.g. |
|
|
85
52
|
| `$ DD_PROFILING_NO_EXTENSION=true bundle install` to skip this step. |
|
|
86
53
|
| |
|
|
87
|
-
|
|
|
88
|
-
|
|
|
54
|
+
| If you disable this extension, the Datadog Continuous Profiler will |
|
|
55
|
+
| not be available, but all other ddtrace features will work fine! |
|
|
56
|
+
| |
|
|
89
57
|
| If you needed to use this, please tell us why on |
|
|
90
58
|
| <https://github.com/DataDog/dd-trace-rb/issues/new> so we can fix it :\) |
|
|
91
59
|
| |
|
|
92
60
|
| Thanks for using ddtrace! You rock! |
|
|
93
61
|
+------------------------------------------------------------------------------+
|
|
94
62
|
|
|
95
|
-
)
|
|
63
|
+
)
|
|
64
|
+
)
|
|
96
65
|
|
|
97
66
|
# NOTE: we MUST NOT require 'mkmf' before we check the #skip_building_extension? because the require triggers checks
|
|
98
67
|
# that may fail on an environment not properly setup for building Ruby extensions.
|
|
99
68
|
require 'mkmf'
|
|
100
69
|
|
|
70
|
+
# mkmf on modern Rubies actually has an append_cflags that does something similar
|
|
71
|
+
# (see https://github.com/ruby/ruby/pull/5760), but as usual we need a bit more boilerplate to deal with legacy Rubies
|
|
72
|
+
def add_compiler_flag(flag)
|
|
73
|
+
if try_cflags(flag)
|
|
74
|
+
$CFLAGS << ' ' << flag
|
|
75
|
+
else
|
|
76
|
+
$stderr.puts("WARNING: '#{flag}' not accepted by compiler, skipping it")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Older gcc releases may not default to C99 and we need to ask for this. This is also used:
|
|
81
|
+
# * by upstream Ruby -- search for gnu99 in the codebase
|
|
82
|
+
# * by msgpack, another ddtrace dependency
|
|
83
|
+
# (https://github.com/msgpack/msgpack-ruby/blob/18ce08f6d612fe973843c366ac9a0b74c4e50599/ext/msgpack/extconf.rb#L8)
|
|
84
|
+
add_compiler_flag '-std=gnu99'
|
|
85
|
+
|
|
101
86
|
# Gets really noisy when we include the MJIT header, let's omit it
|
|
102
87
|
add_compiler_flag '-Wno-unused-function'
|
|
103
88
|
|
|
@@ -108,24 +93,95 @@ add_compiler_flag '-Wno-declaration-after-statement'
|
|
|
108
93
|
# cause a segfault later. Let's ensure that never happens.
|
|
109
94
|
add_compiler_flag '-Werror-implicit-function-declaration'
|
|
110
95
|
|
|
96
|
+
# Warn on unused parameters to functions. Use `DDTRACE_UNUSED` to mark things as known-to-not-be-used.
|
|
97
|
+
add_compiler_flag '-Wunused-parameter'
|
|
98
|
+
|
|
99
|
+
# The native extension is not intended to expose any symbols/functions for other native libraries to use;
|
|
100
|
+
# the sole exception being `Init_ddtrace_profiling_native_extension` which needs to be visible for Ruby to call it when
|
|
101
|
+
# it `dlopen`s the library.
|
|
102
|
+
#
|
|
103
|
+
# By setting this compiler flag, we tell it to assume that everything is private unless explicitly stated.
|
|
104
|
+
# For more details see https://gcc.gnu.org/wiki/Visibility
|
|
105
|
+
add_compiler_flag '-fvisibility=hidden'
|
|
106
|
+
|
|
107
|
+
# Enable all other compiler warnings
|
|
108
|
+
add_compiler_flag '-Wall'
|
|
109
|
+
add_compiler_flag '-Wextra'
|
|
110
|
+
|
|
111
111
|
if RUBY_PLATFORM.include?('linux')
|
|
112
112
|
# Supposedly, the correct way to do this is
|
|
113
113
|
# ```
|
|
114
114
|
# have_library 'pthread'
|
|
115
115
|
# have_func 'pthread_getcpuclockid'
|
|
116
116
|
# ```
|
|
117
|
-
# but it broke the build on Windows and on older Ruby versions (2.
|
|
117
|
+
# but it broke the build on Windows and on older Ruby versions (2.2)
|
|
118
118
|
# so instead we just assume that we have the function we need on Linux, and nowhere else
|
|
119
119
|
$defs << '-DHAVE_PTHREAD_GETCPUCLOCKID'
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
+
# On older Rubies, there was no struct rb_native_thread. See private_vm_api_acccess.c for details.
|
|
123
|
+
$defs << '-DNO_RB_NATIVE_THREAD' if RUBY_VERSION < '3.2'
|
|
124
|
+
|
|
125
|
+
# On older Rubies, we need to use a backported version of this function. See private_vm_api_access.h for details.
|
|
126
|
+
$defs << '-DUSE_BACKPORTED_RB_PROFILE_FRAME_METHOD_NAME' if RUBY_VERSION < '3'
|
|
127
|
+
|
|
128
|
+
# On older Rubies, we need to use rb_thread_t instead of rb_execution_context_t
|
|
129
|
+
$defs << '-DUSE_THREAD_INSTEAD_OF_EXECUTION_CONTEXT' if RUBY_VERSION < '2.5'
|
|
130
|
+
|
|
131
|
+
# On older Rubies...
|
|
132
|
+
if RUBY_VERSION < '2.4'
|
|
133
|
+
# ...we need to use RUBY_VM_NORMAL_ISEQ_P instead of VM_FRAME_RUBYFRAME_P
|
|
134
|
+
$defs << '-DUSE_ISEQ_P_INSTEAD_OF_RUBYFRAME_P'
|
|
135
|
+
# ...we use a legacy copy of rb_vm_frame_method_entry
|
|
136
|
+
$defs << '-DUSE_LEGACY_RB_VM_FRAME_METHOD_ENTRY'
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# For REALLY OLD Rubies...
|
|
140
|
+
if RUBY_VERSION < '2.3'
|
|
141
|
+
# ...there was no rb_time_timespec_new function
|
|
142
|
+
$defs << '-DNO_RB_TIME_TIMESPEC_NEW'
|
|
143
|
+
# ...the VM changed enough that we need an alternative legacy rb_profile_frames
|
|
144
|
+
$defs << '-DUSE_LEGACY_RB_PROFILE_FRAMES'
|
|
145
|
+
# ... you couldn't name threads
|
|
146
|
+
$defs << '-DNO_THREAD_NAMES'
|
|
147
|
+
# ...the ruby_thread_has_gvl_p function was not exposed to users outside of the VM
|
|
148
|
+
$defs << '-DNO_THREAD_HAS_GVL'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# If we got here, libdatadog is available and loaded
|
|
152
|
+
ENV['PKG_CONFIG_PATH'] = "#{ENV['PKG_CONFIG_PATH']}:#{Libdatadog.pkgconfig_folder}"
|
|
153
|
+
Logging.message(" [ddtrace] PKG_CONFIG_PATH set to #{ENV['PKG_CONFIG_PATH'].inspect}\n")
|
|
154
|
+
|
|
155
|
+
unless pkg_config('ddprof_ffi_with_rpath')
|
|
156
|
+
skip_building_extension!(
|
|
157
|
+
if Datadog::Profiling::NativeExtensionHelpers::Supported.pkg_config_missing?
|
|
158
|
+
Datadog::Profiling::NativeExtensionHelpers::Supported::PKG_CONFIG_IS_MISSING
|
|
159
|
+
else
|
|
160
|
+
# Less specific error message
|
|
161
|
+
Datadog::Profiling::NativeExtensionHelpers::Supported::FAILED_TO_CONFIGURE_LIBDATADOG
|
|
162
|
+
end
|
|
163
|
+
)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# See comments on the helper method being used for why we need to additionally set this.
|
|
167
|
+
# The extremely excessive escaping around ORIGIN below seems to be correct and was determined after a lot of
|
|
168
|
+
# experimentation. We need to get these special characters across a lot of tools untouched...
|
|
169
|
+
$LDFLAGS += \
|
|
170
|
+
' -Wl,-rpath,$$$\\\\{ORIGIN\\}/' \
|
|
171
|
+
"#{Datadog::Profiling::NativeExtensionHelpers.libdatadog_folder_relative_to_native_lib_folder}"
|
|
172
|
+
Logging.message(" [ddtrace] After pkg-config $LDFLAGS were set to: #{$LDFLAGS.inspect}\n")
|
|
173
|
+
|
|
174
|
+
Logging.message(" [ddtrace] Using compiler:\n")
|
|
175
|
+
xsystem("#{CONFIG['CC']} --version")
|
|
176
|
+
Logging.message(" [ddtrace] End of compiler information\n")
|
|
177
|
+
|
|
122
178
|
# Tag the native extension library with the Ruby version and Ruby platform.
|
|
123
179
|
# This makes it easier for development (avoids "oops I forgot to rebuild when I switched my Ruby") and ensures that
|
|
124
180
|
# the wrong library is never loaded.
|
|
125
181
|
# When requiring, we need to use the exact same string, including the version and the platform.
|
|
126
182
|
EXTENSION_NAME = "ddtrace_profiling_native_extension.#{RUBY_VERSION}_#{RUBY_PLATFORM}".freeze
|
|
127
183
|
|
|
128
|
-
if CAN_USE_MJIT_HEADER
|
|
184
|
+
if Datadog::Profiling::NativeExtensionHelpers::CAN_USE_MJIT_HEADER
|
|
129
185
|
mjit_header_file_name = "rb_mjit_min_header-#{RUBY_VERSION}.h"
|
|
130
186
|
|
|
131
187
|
# Validate that the mjit header can actually be compiled on this system. We learned via
|
|
@@ -137,61 +193,32 @@ if CAN_USE_MJIT_HEADER
|
|
|
137
193
|
original_common_headers = MakeMakefile::COMMON_HEADERS
|
|
138
194
|
MakeMakefile::COMMON_HEADERS = ''.freeze
|
|
139
195
|
unless have_macro('RUBY_MJIT_H', mjit_header_file_name)
|
|
140
|
-
|
|
141
|
-
+------------------------------------------------------------------------------+
|
|
142
|
-
| WARNING: Unable to compile a needed component for ddtrace native extension. |
|
|
143
|
-
| Your C compiler or Ruby VM just-in-time compiler seems to be broken. |
|
|
144
|
-
| |
|
|
145
|
-
| You will be NOT be able to use ddtrace profiling features, |
|
|
146
|
-
| but all other features will work fine! |
|
|
147
|
-
| |
|
|
148
|
-
| For help solving this issue, please contact Datadog support at |
|
|
149
|
-
| <https://docs.datadoghq.com/help/>. |
|
|
150
|
-
+------------------------------------------------------------------------------+
|
|
151
|
-
|
|
152
|
-
))
|
|
153
|
-
skip_building_extension!
|
|
196
|
+
skip_building_extension!(Datadog::Profiling::NativeExtensionHelpers::Supported::COMPILATION_BROKEN)
|
|
154
197
|
end
|
|
155
198
|
MakeMakefile::COMMON_HEADERS = original_common_headers
|
|
156
199
|
|
|
157
|
-
$defs <<
|
|
200
|
+
$defs << "-DRUBY_MJIT_HEADER='\"#{mjit_header_file_name}\"'"
|
|
158
201
|
|
|
159
202
|
# NOTE: This needs to come after all changes to $defs
|
|
160
203
|
create_header
|
|
161
204
|
|
|
162
|
-
# The MJIT header is always (afaik?) suffixed with the exact Ruby VM version,
|
|
163
|
-
# including patch (e.g. 2.7.2). Thus, we add to the header file a definition
|
|
164
|
-
# containing the exact file, so that it can be used in a #include in the C code.
|
|
165
|
-
header_contents =
|
|
166
|
-
File.read($extconf_h)
|
|
167
|
-
.sub('#endif',
|
|
168
|
-
<<-EXTCONF_H.strip
|
|
169
|
-
#define RUBY_MJIT_HEADER "#{mjit_header_file_name}"
|
|
170
|
-
|
|
171
|
-
#endif
|
|
172
|
-
EXTCONF_H
|
|
173
|
-
)
|
|
174
|
-
File.open($extconf_h, 'w') { |file| file.puts(header_contents) }
|
|
175
|
-
|
|
176
205
|
create_makefile EXTENSION_NAME
|
|
177
206
|
else
|
|
178
207
|
# On older Rubies, we use the debase-ruby_core_source gem to get access to private VM headers.
|
|
179
208
|
# This gem ships source code copies of these VM headers for the different Ruby VM versions;
|
|
180
209
|
# see https://github.com/ruby-debug/debase-ruby_core_source for details
|
|
181
210
|
|
|
182
|
-
thread_native_for_ruby_2_1 = proc { true }
|
|
183
|
-
if RUBY_VERSION < '2.2'
|
|
184
|
-
# This header became public in Ruby 2.2, but we need to pull it from the private headers folder for 2.1
|
|
185
|
-
thread_native_for_ruby_2_1 = proc { have_header('thread_native.h') }
|
|
186
|
-
$defs << '-DRUBY_2_1_WORKAROUND'
|
|
187
|
-
end
|
|
188
|
-
|
|
189
211
|
create_header
|
|
190
212
|
|
|
191
213
|
require 'debase/ruby_core_source'
|
|
192
214
|
dir_config('ruby') # allow user to pass in non-standard core include directory
|
|
193
215
|
|
|
194
216
|
Debase::RubyCoreSource
|
|
195
|
-
.create_makefile_with_core(
|
|
217
|
+
.create_makefile_with_core(
|
|
218
|
+
proc { have_header('vm_core.h') && have_header('iseq.h') },
|
|
219
|
+
EXTENSION_NAME,
|
|
220
|
+
)
|
|
196
221
|
end
|
|
222
|
+
|
|
223
|
+
# rubocop:enable Style/GlobalVars
|
|
197
224
|
# rubocop:enable Style/StderrPuts
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
#include <ruby.h>
|
|
2
|
+
#include <ruby/thread.h>
|
|
3
|
+
#include <ddprof/ffi.h>
|
|
4
|
+
#include "helpers.h"
|
|
5
|
+
#include "libdatadog_helpers.h"
|
|
6
|
+
#include "ruby_helpers.h"
|
|
7
|
+
|
|
8
|
+
// Used to report profiling data to Datadog.
|
|
9
|
+
// This file implements the native bits of the Datadog::Profiling::HttpTransport class
|
|
10
|
+
|
|
11
|
+
static VALUE ok_symbol = Qnil; // :ok in Ruby
|
|
12
|
+
static VALUE error_symbol = Qnil; // :error in Ruby
|
|
13
|
+
|
|
14
|
+
static ID agentless_id; // id of :agentless in Ruby
|
|
15
|
+
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
|
|
18
|
+
|
|
19
|
+
static VALUE http_transport_class = Qnil;
|
|
20
|
+
|
|
21
|
+
struct call_exporter_without_gvl_arguments {
|
|
22
|
+
ddprof_ffi_ProfileExporterV3 *exporter;
|
|
23
|
+
ddprof_ffi_Request *request;
|
|
24
|
+
ddprof_ffi_CancellationToken *cancel_token;
|
|
25
|
+
ddprof_ffi_SendResult result;
|
|
26
|
+
bool send_ran;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
inline static ddprof_ffi_ByteSlice byte_slice_from_ruby_string(VALUE string);
|
|
30
|
+
static VALUE _native_validate_exporter(VALUE self, VALUE exporter_configuration);
|
|
31
|
+
static ddprof_ffi_NewProfileExporterV3Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array);
|
|
32
|
+
static VALUE handle_exporter_failure(ddprof_ffi_NewProfileExporterV3Result exporter_result);
|
|
33
|
+
static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration);
|
|
34
|
+
static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array);
|
|
35
|
+
static void safely_log_failure_to_process_tag(ddprof_ffi_Vec_tag tags, VALUE err_details);
|
|
36
|
+
static VALUE _native_do_export(
|
|
37
|
+
VALUE self,
|
|
38
|
+
VALUE exporter_configuration,
|
|
39
|
+
VALUE upload_timeout_milliseconds,
|
|
40
|
+
VALUE start_timespec_seconds,
|
|
41
|
+
VALUE start_timespec_nanoseconds,
|
|
42
|
+
VALUE finish_timespec_seconds,
|
|
43
|
+
VALUE finish_timespec_nanoseconds,
|
|
44
|
+
VALUE pprof_file_name,
|
|
45
|
+
VALUE pprof_data,
|
|
46
|
+
VALUE code_provenance_file_name,
|
|
47
|
+
VALUE code_provenance_data,
|
|
48
|
+
VALUE tags_as_array
|
|
49
|
+
);
|
|
50
|
+
static void *call_exporter_without_gvl(void *call_args);
|
|
51
|
+
static void interrupt_exporter_call(void *cancel_token);
|
|
52
|
+
|
|
53
|
+
void http_transport_init(VALUE profiling_module) {
|
|
54
|
+
http_transport_class = rb_define_class_under(profiling_module, "HttpTransport", rb_cObject);
|
|
55
|
+
|
|
56
|
+
rb_define_singleton_method(http_transport_class, "_native_validate_exporter", _native_validate_exporter, 1);
|
|
57
|
+
rb_define_singleton_method(http_transport_class, "_native_do_export", _native_do_export, 11);
|
|
58
|
+
|
|
59
|
+
ok_symbol = ID2SYM(rb_intern_const("ok"));
|
|
60
|
+
error_symbol = ID2SYM(rb_intern_const("error"));
|
|
61
|
+
agentless_id = rb_intern_const("agentless");
|
|
62
|
+
agent_id = rb_intern_const("agent");
|
|
63
|
+
log_failure_to_process_tag_id = rb_intern_const("log_failure_to_process_tag");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
inline static ddprof_ffi_ByteSlice byte_slice_from_ruby_string(VALUE string) {
|
|
67
|
+
ENFORCE_TYPE(string, T_STRING);
|
|
68
|
+
ddprof_ffi_ByteSlice byte_slice = {.ptr = (uint8_t *) StringValuePtr(string), .len = RSTRING_LEN(string)};
|
|
69
|
+
return byte_slice;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
static VALUE _native_validate_exporter(DDTRACE_UNUSED VALUE _self, VALUE exporter_configuration) {
|
|
73
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
74
|
+
ddprof_ffi_NewProfileExporterV3Result exporter_result = create_exporter(exporter_configuration, rb_ary_new());
|
|
75
|
+
|
|
76
|
+
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
77
|
+
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
78
|
+
|
|
79
|
+
// We don't actually need the exporter for now -- we just wanted to validate that we could create it with the
|
|
80
|
+
// settings we were given
|
|
81
|
+
ddprof_ffi_NewProfileExporterV3Result_drop(exporter_result);
|
|
82
|
+
|
|
83
|
+
return rb_ary_new_from_args(2, ok_symbol, Qnil);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
static ddprof_ffi_NewProfileExporterV3Result create_exporter(VALUE exporter_configuration, VALUE tags_as_array) {
|
|
87
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
88
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
89
|
+
|
|
90
|
+
// This needs to be called BEFORE convert_tags since it can raise an exception and thus cause the ddprof_ffi_Vec_tag
|
|
91
|
+
// to be leaked.
|
|
92
|
+
ddprof_ffi_EndpointV3 endpoint = endpoint_from(exporter_configuration);
|
|
93
|
+
|
|
94
|
+
ddprof_ffi_Vec_tag tags = convert_tags(tags_as_array);
|
|
95
|
+
|
|
96
|
+
ddprof_ffi_NewProfileExporterV3Result exporter_result =
|
|
97
|
+
ddprof_ffi_ProfileExporterV3_new(DDPROF_FFI_CHARSLICE_C("ruby"), &tags, endpoint);
|
|
98
|
+
|
|
99
|
+
ddprof_ffi_Vec_tag_drop(tags);
|
|
100
|
+
|
|
101
|
+
return exporter_result;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
static VALUE handle_exporter_failure(ddprof_ffi_NewProfileExporterV3Result exporter_result) {
|
|
105
|
+
if (exporter_result.tag == DDPROF_FFI_NEW_PROFILE_EXPORTER_V3_RESULT_OK) return Qnil;
|
|
106
|
+
|
|
107
|
+
VALUE err_details = ruby_string_from_vec_u8(exporter_result.err);
|
|
108
|
+
|
|
109
|
+
ddprof_ffi_NewProfileExporterV3Result_drop(exporter_result);
|
|
110
|
+
|
|
111
|
+
return rb_ary_new_from_args(2, error_symbol, err_details);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static ddprof_ffi_EndpointV3 endpoint_from(VALUE exporter_configuration) {
|
|
115
|
+
ENFORCE_TYPE(exporter_configuration, T_ARRAY);
|
|
116
|
+
|
|
117
|
+
ID working_mode = SYM2ID(rb_ary_entry(exporter_configuration, 0)); // SYM2ID verifies its input so we can do this safely
|
|
118
|
+
|
|
119
|
+
if (working_mode != agentless_id && working_mode != agent_id) {
|
|
120
|
+
rb_raise(rb_eArgError, "Failed to initialize transport: Unexpected working mode, expected :agentless or :agent");
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (working_mode == agentless_id) {
|
|
124
|
+
VALUE site = rb_ary_entry(exporter_configuration, 1);
|
|
125
|
+
VALUE api_key = rb_ary_entry(exporter_configuration, 2);
|
|
126
|
+
ENFORCE_TYPE(site, T_STRING);
|
|
127
|
+
ENFORCE_TYPE(api_key, T_STRING);
|
|
128
|
+
|
|
129
|
+
return ddprof_ffi_EndpointV3_agentless(char_slice_from_ruby_string(site), char_slice_from_ruby_string(api_key));
|
|
130
|
+
} else { // agent_id
|
|
131
|
+
VALUE base_url = rb_ary_entry(exporter_configuration, 1);
|
|
132
|
+
ENFORCE_TYPE(base_url, T_STRING);
|
|
133
|
+
|
|
134
|
+
return ddprof_ffi_EndpointV3_agent(char_slice_from_ruby_string(base_url));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
__attribute__((warn_unused_result))
|
|
139
|
+
static ddprof_ffi_Vec_tag convert_tags(VALUE tags_as_array) {
|
|
140
|
+
ENFORCE_TYPE(tags_as_array, T_ARRAY);
|
|
141
|
+
|
|
142
|
+
long tags_count = RARRAY_LEN(tags_as_array);
|
|
143
|
+
ddprof_ffi_Vec_tag tags = ddprof_ffi_Vec_tag_new();
|
|
144
|
+
|
|
145
|
+
for (long i = 0; i < tags_count; i++) {
|
|
146
|
+
VALUE name_value_pair = rb_ary_entry(tags_as_array, i);
|
|
147
|
+
|
|
148
|
+
if (!RB_TYPE_P(name_value_pair, T_ARRAY)) {
|
|
149
|
+
ddprof_ffi_Vec_tag_drop(tags);
|
|
150
|
+
ENFORCE_TYPE(name_value_pair, T_ARRAY);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Note: We can index the array without checking its size first because rb_ary_entry returns Qnil if out of bounds
|
|
154
|
+
VALUE tag_name = rb_ary_entry(name_value_pair, 0);
|
|
155
|
+
VALUE tag_value = rb_ary_entry(name_value_pair, 1);
|
|
156
|
+
|
|
157
|
+
if (!(RB_TYPE_P(tag_name, T_STRING) && RB_TYPE_P(tag_value, T_STRING))) {
|
|
158
|
+
ddprof_ffi_Vec_tag_drop(tags);
|
|
159
|
+
ENFORCE_TYPE(tag_name, T_STRING);
|
|
160
|
+
ENFORCE_TYPE(tag_value, T_STRING);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
ddprof_ffi_PushTagResult push_result =
|
|
164
|
+
ddprof_ffi_Vec_tag_push(&tags, char_slice_from_ruby_string(tag_name), char_slice_from_ruby_string(tag_value));
|
|
165
|
+
|
|
166
|
+
if (push_result.tag == DDPROF_FFI_PUSH_TAG_RESULT_ERR) {
|
|
167
|
+
VALUE err_details = ruby_string_from_vec_u8(push_result.err);
|
|
168
|
+
ddprof_ffi_PushTagResult_drop(push_result);
|
|
169
|
+
|
|
170
|
+
// libdatadog validates tags and may catch invalid tags that ddtrace didn't actually catch.
|
|
171
|
+
// We warn users about such tags, and then just ignore them.
|
|
172
|
+
safely_log_failure_to_process_tag(tags, err_details);
|
|
173
|
+
} else {
|
|
174
|
+
ddprof_ffi_PushTagResult_drop(push_result);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return tags;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
static VALUE log_failure_to_process_tag(VALUE err_details) {
|
|
182
|
+
return rb_funcall(http_transport_class, log_failure_to_process_tag_id, 1, err_details);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Since we are calling into Ruby code, it may raise an exception. This method ensure that dynamically-allocated tags
|
|
186
|
+
// get cleaned before propagating the exception.
|
|
187
|
+
static void safely_log_failure_to_process_tag(ddprof_ffi_Vec_tag tags, VALUE err_details) {
|
|
188
|
+
int exception_state;
|
|
189
|
+
rb_protect(log_failure_to_process_tag, err_details, &exception_state);
|
|
190
|
+
|
|
191
|
+
if (exception_state) { // An exception was raised
|
|
192
|
+
ddprof_ffi_Vec_tag_drop(tags); // clean up
|
|
193
|
+
rb_jump_tag(exception_state); // "Re-raise" exception
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Note: This function handles a bunch of libdatadog dynamically-allocated objects, so it MUST not use any Ruby APIs
|
|
198
|
+
// which can raise exceptions, otherwise the objects will be leaked.
|
|
199
|
+
static VALUE perform_export(
|
|
200
|
+
ddprof_ffi_NewProfileExporterV3Result valid_exporter_result, // Must be called with a valid exporter result
|
|
201
|
+
ddprof_ffi_Timespec start,
|
|
202
|
+
ddprof_ffi_Timespec finish,
|
|
203
|
+
ddprof_ffi_Slice_file slice_files,
|
|
204
|
+
ddprof_ffi_Vec_tag *additional_tags,
|
|
205
|
+
uint64_t timeout_milliseconds
|
|
206
|
+
) {
|
|
207
|
+
ddprof_ffi_ProfileExporterV3 *exporter = valid_exporter_result.ok;
|
|
208
|
+
ddprof_ffi_CancellationToken *cancel_token = ddprof_ffi_CancellationToken_new();
|
|
209
|
+
ddprof_ffi_Request *request =
|
|
210
|
+
ddprof_ffi_ProfileExporterV3_build(exporter, start, finish, slice_files, additional_tags, timeout_milliseconds);
|
|
211
|
+
|
|
212
|
+
// We'll release the Global VM Lock while we're calling send, so that the Ruby VM can continue to work while this
|
|
213
|
+
// is pending
|
|
214
|
+
struct call_exporter_without_gvl_arguments args =
|
|
215
|
+
{.exporter = exporter, .request = request, .cancel_token = cancel_token, .send_ran = false};
|
|
216
|
+
|
|
217
|
+
// We use rb_thread_call_without_gvl2 instead of rb_thread_call_without_gvl as the gvl2 variant never raises any
|
|
218
|
+
// exceptions.
|
|
219
|
+
//
|
|
220
|
+
// (With rb_thread_call_without_gvl, if someone calls Thread#kill or something like it on the current thread,
|
|
221
|
+
// the exception will be raised without us being able to clean up dynamically-allocated stuff, which would leak.)
|
|
222
|
+
//
|
|
223
|
+
// Instead, we take care of our own exception checking, and delay the exception raising (`rb_jump_tag` call) until
|
|
224
|
+
// after we cleaned up any dynamically-allocated resources.
|
|
225
|
+
//
|
|
226
|
+
// We run rb_thread_call_without_gvl2 in a loop since an "interrupt" may cause it to return before even running
|
|
227
|
+
// our code. In such a case, we retry the call -- unless the interrupt was caused by an exception being pending,
|
|
228
|
+
// and in that case we also give up and break out of the loop.
|
|
229
|
+
int pending_exception = 0;
|
|
230
|
+
|
|
231
|
+
while (!args.send_ran && !pending_exception) {
|
|
232
|
+
rb_thread_call_without_gvl2(call_exporter_without_gvl, &args, interrupt_exporter_call, cancel_token);
|
|
233
|
+
|
|
234
|
+
// To make sure we don't leak memory, we never check for pending exceptions if send ran
|
|
235
|
+
if (!args.send_ran) pending_exception = check_if_pending_exception();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Cleanup exporter and token, no longer needed
|
|
239
|
+
ddprof_ffi_CancellationToken_drop(cancel_token);
|
|
240
|
+
ddprof_ffi_NewProfileExporterV3Result_drop(valid_exporter_result);
|
|
241
|
+
|
|
242
|
+
if (pending_exception) {
|
|
243
|
+
// If we got here send did not run, so we need to explicitly dispose of the request
|
|
244
|
+
ddprof_ffi_Request_drop(request);
|
|
245
|
+
|
|
246
|
+
// Let Ruby propagate the exception. This will not return.
|
|
247
|
+
rb_jump_tag(pending_exception);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
ddprof_ffi_SendResult result = args.result;
|
|
251
|
+
bool success = result.tag == DDPROF_FFI_SEND_RESULT_HTTP_RESPONSE;
|
|
252
|
+
|
|
253
|
+
VALUE ruby_status = success ? ok_symbol : error_symbol;
|
|
254
|
+
VALUE ruby_result = success ? UINT2NUM(result.http_response.code) : ruby_string_from_vec_u8(result.err);
|
|
255
|
+
|
|
256
|
+
ddprof_ffi_SendResult_drop(args.result);
|
|
257
|
+
// The request itself does not need to be freed as libdatadog takes care of it as part of sending.
|
|
258
|
+
|
|
259
|
+
return rb_ary_new_from_args(2, ruby_status, ruby_result);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
static VALUE _native_do_export(
|
|
263
|
+
DDTRACE_UNUSED VALUE _self,
|
|
264
|
+
VALUE exporter_configuration,
|
|
265
|
+
VALUE upload_timeout_milliseconds,
|
|
266
|
+
VALUE start_timespec_seconds,
|
|
267
|
+
VALUE start_timespec_nanoseconds,
|
|
268
|
+
VALUE finish_timespec_seconds,
|
|
269
|
+
VALUE finish_timespec_nanoseconds,
|
|
270
|
+
VALUE pprof_file_name,
|
|
271
|
+
VALUE pprof_data,
|
|
272
|
+
VALUE code_provenance_file_name,
|
|
273
|
+
VALUE code_provenance_data,
|
|
274
|
+
VALUE tags_as_array
|
|
275
|
+
) {
|
|
276
|
+
ENFORCE_TYPE(upload_timeout_milliseconds, T_FIXNUM);
|
|
277
|
+
ENFORCE_TYPE(start_timespec_seconds, T_FIXNUM);
|
|
278
|
+
ENFORCE_TYPE(start_timespec_nanoseconds, T_FIXNUM);
|
|
279
|
+
ENFORCE_TYPE(finish_timespec_seconds, T_FIXNUM);
|
|
280
|
+
ENFORCE_TYPE(finish_timespec_nanoseconds, T_FIXNUM);
|
|
281
|
+
ENFORCE_TYPE(pprof_file_name, T_STRING);
|
|
282
|
+
ENFORCE_TYPE(pprof_data, T_STRING);
|
|
283
|
+
ENFORCE_TYPE(code_provenance_file_name, T_STRING);
|
|
284
|
+
|
|
285
|
+
// Code provenance can be disabled and in that case will be set to nil
|
|
286
|
+
bool have_code_provenance = !NIL_P(code_provenance_data);
|
|
287
|
+
if (have_code_provenance) ENFORCE_TYPE(code_provenance_data, T_STRING);
|
|
288
|
+
|
|
289
|
+
uint64_t timeout_milliseconds = NUM2ULONG(upload_timeout_milliseconds);
|
|
290
|
+
|
|
291
|
+
ddprof_ffi_Timespec start =
|
|
292
|
+
{.seconds = NUM2LONG(start_timespec_seconds), .nanoseconds = NUM2UINT(start_timespec_nanoseconds)};
|
|
293
|
+
ddprof_ffi_Timespec finish =
|
|
294
|
+
{.seconds = NUM2LONG(finish_timespec_seconds), .nanoseconds = NUM2UINT(finish_timespec_nanoseconds)};
|
|
295
|
+
|
|
296
|
+
int files_to_report = 1 + (have_code_provenance ? 1 : 0);
|
|
297
|
+
ddprof_ffi_File files[files_to_report];
|
|
298
|
+
ddprof_ffi_Slice_file slice_files = {.ptr = files, .len = files_to_report};
|
|
299
|
+
|
|
300
|
+
files[0] = (ddprof_ffi_File) {
|
|
301
|
+
.name = char_slice_from_ruby_string(pprof_file_name),
|
|
302
|
+
.file = byte_slice_from_ruby_string(pprof_data)
|
|
303
|
+
};
|
|
304
|
+
if (have_code_provenance) {
|
|
305
|
+
files[1] = (ddprof_ffi_File) {
|
|
306
|
+
.name = char_slice_from_ruby_string(code_provenance_file_name),
|
|
307
|
+
.file = byte_slice_from_ruby_string(code_provenance_data)
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
ddprof_ffi_Vec_tag *null_additional_tags = NULL;
|
|
312
|
+
|
|
313
|
+
ddprof_ffi_NewProfileExporterV3Result exporter_result = create_exporter(exporter_configuration, tags_as_array);
|
|
314
|
+
// Note: Do not add anything that can raise exceptions after this line, as otherwise the exporter memory will leak
|
|
315
|
+
|
|
316
|
+
VALUE failure_tuple = handle_exporter_failure(exporter_result);
|
|
317
|
+
if (!NIL_P(failure_tuple)) return failure_tuple;
|
|
318
|
+
|
|
319
|
+
return perform_export(exporter_result, start, finish, slice_files, null_additional_tags, timeout_milliseconds);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
static void *call_exporter_without_gvl(void *call_args) {
|
|
323
|
+
struct call_exporter_without_gvl_arguments *args = (struct call_exporter_without_gvl_arguments*) call_args;
|
|
324
|
+
|
|
325
|
+
args->result = ddprof_ffi_ProfileExporterV3_send(args->exporter, args->request, args->cancel_token);
|
|
326
|
+
args->send_ran = true;
|
|
327
|
+
|
|
328
|
+
return NULL; // Unused
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Called by Ruby when it wants to interrupt call_exporter_without_gvl above, e.g. when the app wants to exit cleanly
|
|
332
|
+
static void interrupt_exporter_call(void *cancel_token) {
|
|
333
|
+
ddprof_ffi_CancellationToken_cancel((ddprof_ffi_CancellationToken *) cancel_token);
|
|
334
|
+
}
|