ddtrace 1.2.0 → 1.3.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 +47 -1
- data/LICENSE-3rdparty.csv +2 -0
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +1 -1
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +9 -2
- data/ext/ddtrace_profiling_native_extension/clock_id.h +20 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +30 -1
- data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +10 -1
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +148 -28
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +6 -0
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +11 -7
- data/ext/ddtrace_profiling_native_extension/extconf.rb +24 -19
- data/ext/ddtrace_profiling_native_extension/helpers.h +12 -0
- data/ext/ddtrace_profiling_native_extension/http_transport.c +40 -47
- data/ext/ddtrace_profiling_native_extension/{libddprof_helpers.h → libdatadog_helpers.h} +2 -1
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +36 -20
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +30 -29
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +2 -5
- data/ext/ddtrace_profiling_native_extension/profiling.c +2 -3
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +25 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +33 -1
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +292 -18
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +1 -1
- data/lib/datadog/appsec/autoload.rb +4 -2
- data/lib/datadog/appsec/configuration.rb +1 -1
- data/lib/datadog/appsec/contrib/auto_instrument.rb +0 -2
- data/lib/datadog/appsec/contrib/configuration/settings.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/configuration/settings.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +6 -6
- data/lib/datadog/appsec/contrib/rack/integration.rb +5 -5
- data/lib/datadog/appsec/contrib/rack/patcher.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +1 -1
- data/lib/datadog/appsec/contrib/rack/request_body_middleware.rb +2 -2
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +3 -3
- data/lib/datadog/appsec/contrib/rails/configuration/settings.rb +2 -2
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +4 -4
- data/lib/datadog/appsec/contrib/rails/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/rails/patcher.rb +16 -12
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +1 -1
- data/lib/datadog/appsec/contrib/sinatra/configuration/settings.rb +2 -2
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +5 -5
- data/lib/datadog/appsec/contrib/sinatra/integration.rb +4 -4
- data/lib/datadog/appsec/contrib/sinatra/patcher.rb +16 -12
- data/lib/datadog/appsec/event.rb +3 -3
- data/lib/datadog/appsec/extensions.rb +1 -1
- data/lib/datadog/appsec/processor.rb +1 -1
- data/lib/datadog/appsec/reactive/engine.rb +2 -2
- data/lib/datadog/appsec/reactive/operation.rb +3 -3
- data/lib/datadog/appsec.rb +5 -5
- data/lib/datadog/ci/configuration/components.rb +1 -1
- data/lib/datadog/ci/configuration/settings.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +5 -5
- data/lib/datadog/ci/contrib/cucumber/instrumentation.rb +1 -1
- data/lib/datadog/ci/contrib/cucumber/integration.rb +3 -3
- data/lib/datadog/ci/contrib/cucumber/patcher.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +2 -2
- data/lib/datadog/ci/contrib/rspec/example.rb +5 -5
- data/lib/datadog/ci/contrib/rspec/integration.rb +3 -3
- data/lib/datadog/ci/contrib/rspec/patcher.rb +2 -2
- data/lib/datadog/ci/ext/environment.rb +8 -6
- data/lib/datadog/ci/extensions.rb +4 -4
- data/lib/datadog/ci/flush.rb +2 -2
- data/lib/datadog/ci/test.rb +3 -3
- data/lib/datadog/ci.rb +6 -6
- data/lib/datadog/core/buffer/cruby.rb +1 -1
- data/lib/datadog/core/buffer/thread_safe.rb +1 -1
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +6 -6
- data/lib/datadog/core/configuration/base.rb +2 -2
- data/lib/datadog/core/configuration/components.rb +26 -43
- data/lib/datadog/core/configuration/option_definition.rb +1 -1
- data/lib/datadog/core/configuration/option_definition_set.rb +1 -1
- data/lib/datadog/core/configuration/options.rb +3 -3
- data/lib/datadog/core/configuration/settings.rb +9 -7
- data/lib/datadog/core/configuration.rb +4 -4
- data/lib/datadog/core/diagnostics/environment_logger.rb +1 -1
- data/lib/datadog/core/diagnostics/health.rb +2 -2
- data/lib/datadog/core/environment/cgroup.rb +1 -1
- data/lib/datadog/core/environment/container.rb +1 -1
- data/lib/datadog/core/environment/ext.rb +1 -1
- data/lib/datadog/core/environment/identity.rb +2 -2
- data/lib/datadog/core/environment/platform.rb +1 -1
- data/lib/datadog/core/environment/socket.rb +1 -1
- data/lib/datadog/core/error.rb +1 -1
- data/lib/datadog/core/extensions.rb +1 -1
- data/lib/datadog/core/metrics/client.rb +8 -8
- data/lib/datadog/core/metrics/options.rb +3 -3
- data/lib/datadog/core/runtime/metrics.rb +6 -6
- data/lib/datadog/core/utils/object_set.rb +1 -1
- data/lib/datadog/core/utils/string_table.rb +1 -1
- data/lib/datadog/core/utils/time.rb +3 -3
- data/lib/datadog/core/utils.rb +2 -2
- data/lib/datadog/core/vendor/multipart-post/multipart/post/multipartable.rb +2 -2
- data/lib/datadog/core/vendor/multipart-post/net/http/post/multipart.rb +3 -3
- data/lib/datadog/core/workers/async.rb +1 -1
- data/lib/datadog/core/workers/polling.rb +2 -2
- data/lib/datadog/core/workers/runtime_metrics.rb +4 -4
- data/lib/datadog/core.rb +50 -50
- data/lib/datadog/kit.rb +1 -1
- data/lib/datadog/opentracer/distributed_headers.rb +2 -2
- data/lib/datadog/opentracer/rack_propagator.rb +11 -7
- data/lib/datadog/opentracer/span.rb +1 -1
- data/lib/datadog/opentracer/text_map_propagator.rb +9 -6
- data/lib/datadog/opentracer/thread_local_scope_manager.rb +1 -1
- data/lib/datadog/opentracer/tracer.rb +19 -15
- data/lib/datadog/opentracer.rb +16 -16
- data/lib/datadog/profiling/buffer.rb +3 -3
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +4 -19
- data/lib/datadog/profiling/collectors/old_stack.rb +7 -7
- data/lib/datadog/profiling/collectors/stack.rb +3 -8
- data/lib/datadog/profiling/encoding/profile.rb +1 -1
- data/lib/datadog/profiling/events/stack.rb +1 -1
- data/lib/datadog/profiling/exporter.rb +17 -9
- data/lib/datadog/profiling/ext/forking.rb +36 -37
- data/lib/datadog/profiling/ext.rb +1 -0
- data/lib/datadog/profiling/flush.rb +0 -3
- data/lib/datadog/profiling/http_transport.rb +4 -3
- data/lib/datadog/profiling/old_recorder.rb +2 -7
- data/lib/datadog/profiling/pprof/builder.rb +4 -4
- data/lib/datadog/profiling/pprof/converter.rb +1 -1
- data/lib/datadog/profiling/pprof/message_set.rb +1 -1
- data/lib/datadog/profiling/pprof/stack_sample.rb +4 -4
- data/lib/datadog/profiling/pprof/string_table.rb +1 -1
- data/lib/datadog/profiling/pprof/template.rb +5 -5
- data/lib/datadog/profiling/preload.rb +1 -1
- data/lib/datadog/profiling/scheduler.rb +5 -4
- data/lib/datadog/profiling/stack_recorder.rb +14 -4
- data/lib/datadog/profiling/tag_builder.rb +6 -1
- data/lib/datadog/profiling/tasks/setup.rb +2 -2
- data/lib/datadog/profiling/trace_identifiers/ddtrace.rb +2 -2
- data/lib/datadog/profiling/trace_identifiers/helper.rb +1 -1
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +5 -5
- data/lib/datadog/profiling/transport/http/api/instance.rb +2 -2
- data/lib/datadog/profiling/transport/http/api/spec.rb +1 -1
- data/lib/datadog/profiling/transport/http/api.rb +5 -5
- data/lib/datadog/profiling/transport/http/builder.rb +3 -3
- data/lib/datadog/profiling/transport/http/client.rb +2 -2
- data/lib/datadog/profiling/transport/http/response.rb +1 -1
- data/lib/datadog/profiling/transport/http.rb +21 -15
- data/lib/datadog/profiling.rb +20 -20
- data/lib/datadog/tracing/analytics.rb +1 -1
- data/lib/datadog/tracing/buffer.rb +5 -5
- data/lib/datadog/tracing/context.rb +1 -1
- data/lib/datadog/tracing/context_provider.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_cable/event.rb +4 -5
- data/lib/datadog/tracing/contrib/action_cable/events/broadcast.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events/perform_action.rb +3 -3
- data/lib/datadog/tracing/contrib/action_cable/events/transmit.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/events.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/action_cable/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_cable/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/event.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/deliver.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events/process.rb +3 -3
- data/lib/datadog/tracing/contrib/action_mailer/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_mailer/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_mailer/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +6 -6
- data/lib/datadog/tracing/contrib/action_pack/action_controller/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_pack/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/action_pack/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/event.rb +1 -1
- data/lib/datadog/tracing/contrib/action_view/events/render_partial.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events/render_template.rb +5 -5
- data/lib/datadog/tracing/contrib/action_view/events.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/partial_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/instrumentation/template_renderer.rb +2 -2
- data/lib/datadog/tracing/contrib/action_view/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/action_view/patcher.rb +7 -7
- data/lib/datadog/tracing/contrib/action_view/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/active_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/event.rb +3 -3
- data/lib/datadog/tracing/contrib/active_job/events/discard.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_at.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/enqueue_retry.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/perform.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events/retry_stopped.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/events.rb +6 -6
- data/lib/datadog/tracing/contrib/active_job/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/active_job/log_injection.rb +0 -2
- data/lib/datadog/tracing/contrib/active_job/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/active_model_serializers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/event.rb +4 -5
- data/lib/datadog/tracing/contrib/active_model_serializers/events/render.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/events/serialize.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_model_serializers/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/active_model_serializers/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/active_record/configuration/resolver.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/active_record/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_record/events/instantiation.rb +4 -4
- data/lib/datadog/tracing/contrib/active_record/events/sql.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/events.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/active_record/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_record/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/cache/instrumentation.rb +19 -9
- data/lib/datadog/tracing/contrib/active_support/cache/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/cache/redis.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/active_support/integration.rb +5 -5
- data/lib/datadog/tracing/contrib/active_support/notifications/event.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/notifications/subscriber.rb +1 -1
- data/lib/datadog/tracing/contrib/active_support/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/analytics.rb +1 -1
- data/lib/datadog/tracing/contrib/auto_instrument.rb +4 -4
- data/lib/datadog/tracing/contrib/aws/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/aws/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/aws/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/concurrent_ruby/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/concurrent_ruby/future_patch.rb +1 -1
- data/lib/datadog/tracing/contrib/concurrent_ruby/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/concurrent_ruby/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/configurable.rb +2 -2
- data/lib/datadog/tracing/contrib/configuration/resolvers/pattern_resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +4 -5
- data/lib/datadog/tracing/contrib/dalli/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/dalli/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/delayed_job/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/delayed_job/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/delayed_job/patcher.rb +8 -2
- data/lib/datadog/tracing/contrib/delayed_job/plugin.rb +3 -4
- data/lib/datadog/tracing/contrib/delayed_job/server_internal_tracer/worker.rb +32 -0
- data/lib/datadog/tracing/contrib/elasticsearch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/elasticsearch/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +6 -7
- data/lib/datadog/tracing/contrib/elasticsearch/quantize.rb +1 -1
- data/lib/datadog/tracing/contrib/ethon/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/ethon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +3 -4
- data/lib/datadog/tracing/contrib/ethon/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/excon/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/excon/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/excon/middleware.rb +6 -7
- data/lib/datadog/tracing/contrib/excon/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/extensions.rb +3 -3
- data/lib/datadog/tracing/contrib/faraday/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/faraday/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +5 -6
- data/lib/datadog/tracing/contrib/faraday/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/grape/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +4 -5
- data/lib/datadog/tracing/contrib/grape/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grape/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/graphql/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/graphql/patcher.rb +2 -3
- data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +4 -4
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +6 -6
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +3 -4
- data/lib/datadog/tracing/contrib/grpc/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/grpc/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/http/circuit_breaker.rb +1 -2
- data/lib/datadog/tracing/contrib/http/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/http/integration.rb +6 -6
- data/lib/datadog/tracing/contrib/http/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httpclient/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +4 -5
- data/lib/datadog/tracing/contrib/httpclient/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httpclient/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/httprb/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +4 -5
- data/lib/datadog/tracing/contrib/httprb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/httprb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/event.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/connection/request.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_batch.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer/process_message.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/heartbeat.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/join_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/leave_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/consumer_group/sync_group.rb +4 -4
- data/lib/datadog/tracing/contrib/kafka/events/produce_operation/send_messages.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/events/producer/deliver_messages.rb +2 -2
- data/lib/datadog/tracing/contrib/kafka/events.rb +9 -9
- data/lib/datadog/tracing/contrib/kafka/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/kafka/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/lograge/instrumentation.rb +1 -2
- data/lib/datadog/tracing/contrib/lograge/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/lograge/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/mongodb/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/mongodb/instrumentation.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/mongodb/parsers.rb +1 -1
- data/lib/datadog/tracing/contrib/mongodb/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +4 -4
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/mysql2/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/mysql2/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/pg/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/pg/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/presto/instrumentation.rb +2 -3
- data/lib/datadog/tracing/contrib/presto/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/presto/patcher.rb +4 -4
- data/lib/datadog/tracing/contrib/qless/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/qless/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/qless/patcher.rb +1 -2
- data/lib/datadog/tracing/contrib/qless/qless_job.rb +2 -3
- data/lib/datadog/tracing/contrib/qless/tracer_cleaner.rb +0 -2
- data/lib/datadog/tracing/contrib/que/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/que/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/que/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/que/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/racecar/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/event.rb +4 -5
- data/lib/datadog/tracing/contrib/racecar/events/batch.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/consume.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events/message.rb +2 -2
- data/lib/datadog/tracing/contrib/racecar/events.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/racecar/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/rack/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rack/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +24 -20
- data/lib/datadog/tracing/contrib/rack/patcher.rb +4 -2
- data/lib/datadog/tracing/contrib/rails/auto_instrument_railtie.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/rails/framework.rb +16 -21
- data/lib/datadog/tracing/contrib/rails/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/rails/log_injection.rb +0 -2
- data/lib/datadog/tracing/contrib/rails/middlewares.rb +1 -2
- data/lib/datadog/tracing/contrib/rails/patcher.rb +7 -8
- data/lib/datadog/tracing/contrib/rails/railtie.rb +3 -3
- data/lib/datadog/tracing/contrib/rails/utils.rb +1 -1
- data/lib/datadog/tracing/contrib/rake/configuration/settings.rb +17 -2
- data/lib/datadog/tracing/contrib/rake/instrumentation.rb +12 -7
- data/lib/datadog/tracing/contrib/rake/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rake/patcher.rb +3 -4
- data/lib/datadog/tracing/contrib/redis/configuration/resolver.rb +1 -1
- data/lib/datadog/tracing/contrib/redis/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +6 -7
- data/lib/datadog/tracing/contrib/redis/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/redis/patcher.rb +6 -6
- data/lib/datadog/tracing/contrib/redis/tags.rb +3 -4
- data/lib/datadog/tracing/contrib/resque/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/resque/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/resque/resque_job.rb +3 -4
- data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/rest_client/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +4 -5
- data/lib/datadog/tracing/contrib/semantic_logger/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/semantic_logger/instrumentation.rb +1 -2
- data/lib/datadog/tracing/contrib/semantic_logger/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/semantic_logger/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sequel/database.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/dataset.rb +4 -5
- data/lib/datadog/tracing/contrib/sequel/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/patcher.rb +3 -3
- data/lib/datadog/tracing/contrib/sequel/utils.rb +2 -2
- data/lib/datadog/tracing/contrib/shoryuken/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/shoryuken/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/shoryuken/patcher.rb +1 -1
- data/lib/datadog/tracing/contrib/shoryuken/tracer.rb +1 -1
- data/lib/datadog/tracing/contrib/sidekiq/client_tracer.rb +4 -5
- data/lib/datadog/tracing/contrib/sidekiq/configuration/settings.rb +3 -3
- data/lib/datadog/tracing/contrib/sidekiq/ext.rb +6 -0
- data/lib/datadog/tracing/contrib/sidekiq/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sidekiq/patcher.rb +14 -7
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/heartbeat.rb +19 -1
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/{scheduled_push.rb → redis_info.rb} +5 -6
- data/lib/datadog/tracing/contrib/sidekiq/server_internal_tracer/scheduled_poller.rb +53 -0
- data/lib/datadog/tracing/contrib/sidekiq/server_tracer.rb +5 -6
- data/lib/datadog/tracing/contrib/sidekiq/tracing.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/env.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/framework.rb +0 -2
- data/lib/datadog/tracing/contrib/sinatra/headers.rb +1 -1
- data/lib/datadog/tracing/contrib/sinatra/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +5 -5
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +7 -8
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +6 -7
- data/lib/datadog/tracing/contrib/sneakers/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/integration.rb +4 -4
- data/lib/datadog/tracing/contrib/sneakers/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sneakers/tracer.rb +2 -3
- data/lib/datadog/tracing/contrib/status_code_matcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/configuration/settings.rb +2 -2
- data/lib/datadog/tracing/contrib/sucker_punch/instrumentation.rb +3 -4
- data/lib/datadog/tracing/contrib/sucker_punch/integration.rb +3 -3
- data/lib/datadog/tracing/contrib/sucker_punch/patcher.rb +4 -5
- data/lib/datadog/tracing/contrib.rb +48 -48
- data/lib/datadog/tracing/correlation.rb +1 -1
- data/lib/datadog/tracing/distributed/headers/b3.rb +4 -4
- data/lib/datadog/tracing/distributed/headers/b3_single.rb +4 -4
- data/lib/datadog/tracing/distributed/headers/datadog.rb +3 -3
- data/lib/datadog/tracing/distributed/headers/parser.rb +1 -1
- data/lib/datadog/tracing/distributed/helpers.rb +2 -2
- data/lib/datadog/tracing/distributed/metadata/b3.rb +4 -4
- data/lib/datadog/tracing/distributed/metadata/b3_single.rb +4 -4
- data/lib/datadog/tracing/distributed/metadata/datadog.rb +2 -2
- data/lib/datadog/tracing/distributed/metadata/parser.rb +1 -1
- data/lib/datadog/tracing/event.rb +1 -1
- data/lib/datadog/tracing/metadata/analytics.rb +2 -2
- data/lib/datadog/tracing/metadata/errors.rb +2 -2
- data/lib/datadog/tracing/metadata/tagging.rb +2 -2
- data/lib/datadog/tracing/metadata.rb +3 -3
- data/lib/datadog/tracing/pipeline/span_filter.rb +10 -6
- data/lib/datadog/tracing/pipeline.rb +3 -3
- data/lib/datadog/tracing/propagation/grpc.rb +6 -6
- data/lib/datadog/tracing/propagation/http.rb +8 -8
- data/lib/datadog/tracing/runtime/metrics.rb +1 -1
- data/lib/datadog/tracing/sampling/all_sampler.rb +1 -1
- data/lib/datadog/tracing/sampling/priority_sampler.rb +5 -5
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +2 -2
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +3 -3
- data/lib/datadog/tracing/sampling/rate_limiter.rb +1 -1
- data/lib/datadog/tracing/sampling/rate_sampler.rb +5 -5
- data/lib/datadog/tracing/sampling/rule.rb +3 -3
- data/lib/datadog/tracing/sampling/rule_sampler.rb +4 -4
- data/lib/datadog/tracing/span.rb +4 -4
- data/lib/datadog/tracing/span_operation.rb +9 -9
- data/lib/datadog/tracing/sync_writer.rb +5 -5
- data/lib/datadog/tracing/trace_operation.rb +16 -9
- data/lib/datadog/tracing/trace_segment.rb +5 -5
- data/lib/datadog/tracing/tracer.rb +15 -15
- data/lib/datadog/tracing/workers/trace_writer.rb +9 -9
- data/lib/datadog/tracing/workers.rb +3 -3
- data/lib/datadog/tracing/writer.rb +5 -5
- data/lib/datadog/tracing.rb +8 -8
- data/lib/ddtrace/auto_instrument.rb +2 -2
- data/lib/ddtrace/transport/ext.rb +7 -0
- data/lib/ddtrace/transport/http/adapters/net.rb +2 -2
- data/lib/ddtrace/transport/http/adapters/test.rb +1 -1
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +2 -2
- data/lib/ddtrace/transport/http/api/map.rb +1 -1
- data/lib/ddtrace/transport/http/api.rb +4 -4
- data/lib/ddtrace/transport/http/builder.rb +5 -5
- data/lib/ddtrace/transport/http/client.rb +2 -2
- data/lib/ddtrace/transport/http/response.rb +1 -1
- data/lib/ddtrace/transport/http/statistics.rb +1 -1
- data/lib/ddtrace/transport/http/traces.rb +5 -5
- data/lib/ddtrace/transport/http.rb +12 -9
- data/lib/ddtrace/transport/io/client.rb +2 -2
- data/lib/ddtrace/transport/io/response.rb +1 -1
- data/lib/ddtrace/transport/io/traces.rb +3 -3
- data/lib/ddtrace/transport/io.rb +3 -3
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/trace_formatter.rb +5 -5
- data/lib/ddtrace/transport/traces.rb +5 -5
- data/lib/ddtrace/version.rb +1 -1
- data/lib/ddtrace.rb +6 -6
- metadata +14 -22
- data/.editorconfig +0 -22
- data/.gitignore +0 -58
- data/CONTRIBUTING.md +0 -81
- data/ddtrace.gemspec +0 -71
- data/docs/0.x-trace.png +0 -0
- data/docs/1.0-trace.png +0 -0
- data/docs/AutoInstrumentation.md +0 -36
- data/docs/Deprecation.md +0 -8
- data/docs/DevelopmentGuide.md +0 -259
- data/docs/GettingStarted.md +0 -2712
- data/docs/ProfilingDevelopment.md +0 -109
- data/docs/PublicApi.md +0 -14
- data/docs/UpgradeGuide.md +0 -736
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
require_relative '../tracing/context'
|
|
4
|
+
require_relative '../tracing/distributed/headers/ext'
|
|
5
|
+
require_relative '../tracing/trace_operation'
|
|
6
|
+
require_relative 'propagator'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module OpenTracer
|
|
@@ -27,8 +27,11 @@ module Datadog
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Inject Datadog trace properties
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
digest = if span_context.datadog_context && span_context.datadog_context.active_trace
|
|
31
|
+
span_context.datadog_context.active_trace.to_digest
|
|
32
|
+
else
|
|
33
|
+
span_context.datadog_trace_digest
|
|
34
|
+
end
|
|
32
35
|
return unless digest
|
|
33
36
|
|
|
34
37
|
carrier[HTTP_HEADER_ORIGIN] = digest.trace_origin
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require 'time'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative '../tracing/context'
|
|
6
|
+
require_relative '../tracing/tracer'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module OpenTracer
|
|
@@ -52,13 +52,15 @@ module Datadog
|
|
|
52
52
|
# yield the newly-started Scope. If `finish_on_close` is true then the
|
|
53
53
|
# Span will be finished automatically after the block is executed.
|
|
54
54
|
# @return [Scope] The newly-started and activated Scope
|
|
55
|
-
def start_active_span(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
def start_active_span(
|
|
56
|
+
operation_name,
|
|
57
|
+
child_of: nil,
|
|
58
|
+
references: nil,
|
|
59
|
+
start_time: Time.now,
|
|
60
|
+
tags: nil,
|
|
61
|
+
ignore_active_scope: false,
|
|
62
|
+
finish_on_close: true
|
|
63
|
+
)
|
|
62
64
|
|
|
63
65
|
# When meant to automatically determine the parent,
|
|
64
66
|
# Use the active scope first, otherwise fall back to any
|
|
@@ -124,12 +126,14 @@ module Datadog
|
|
|
124
126
|
# References#CHILD_OF reference to the ScopeManager#active.
|
|
125
127
|
# @return [Span] the newly-started Span instance, which has not been
|
|
126
128
|
# automatically registered via the ScopeManager
|
|
127
|
-
def start_span(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
def start_span(
|
|
130
|
+
operation_name,
|
|
131
|
+
child_of: nil,
|
|
132
|
+
references: nil,
|
|
133
|
+
start_time: Time.now,
|
|
134
|
+
tags: nil,
|
|
135
|
+
ignore_active_scope: false
|
|
136
|
+
)
|
|
133
137
|
|
|
134
138
|
# Derive the OpenTracer::SpanContext to inherit from.
|
|
135
139
|
parent_span_context = inherited_span_context(child_of, ignore_active_scope: ignore_active_scope)
|
data/lib/datadog/opentracer.rb
CHANGED
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
require 'opentracing'
|
|
4
4
|
require 'opentracing/carrier'
|
|
5
|
-
|
|
5
|
+
require_relative 'tracing'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
require_relative 'opentracer/carrier'
|
|
8
|
+
require_relative 'opentracer/tracer'
|
|
9
|
+
require_relative 'opentracer/span'
|
|
10
|
+
require_relative 'opentracer/span_context'
|
|
11
|
+
require_relative 'opentracer/span_context_factory'
|
|
12
|
+
require_relative 'opentracer/scope'
|
|
13
|
+
require_relative 'opentracer/scope_manager'
|
|
14
|
+
require_relative 'opentracer/thread_local_scope'
|
|
15
|
+
require_relative 'opentracer/thread_local_scope_manager'
|
|
16
|
+
require_relative 'opentracer/distributed_headers'
|
|
17
|
+
require_relative 'opentracer/propagator'
|
|
18
|
+
require_relative 'opentracer/text_map_propagator'
|
|
19
|
+
require_relative 'opentracer/binary_propagator'
|
|
20
|
+
require_relative 'opentracer/rack_propagator'
|
|
21
|
+
require_relative 'opentracer/global_tracer'
|
|
22
22
|
|
|
23
23
|
# Modify the OpenTracing module functions
|
|
24
24
|
::OpenTracing.singleton_class.prepend(Datadog::OpenTracer::GlobalTracer)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative '../core/buffer/thread_safe'
|
|
4
|
+
require_relative '../core/utils/object_set'
|
|
5
|
+
require_relative '../core/utils/string_table'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Profiling
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
5
5
|
module Collectors
|
|
6
|
-
# Used to periodically
|
|
6
|
+
# Used to periodically sample threads, recording elapsed CPU-time and Wall-time between samples.
|
|
7
|
+
# Triggering of this component (e.g. deciding when to take a sample) is implemented in
|
|
8
|
+
# Collectors::CpuAndWallTimeWorker.
|
|
7
9
|
# The stack collection itself is handled using the Datadog::Profiling::Collectors::Stack.
|
|
10
|
+
# Almost all of this class is implemented as native code.
|
|
8
11
|
#
|
|
9
12
|
# Methods prefixed with _native_ are implemented in `collectors_cpu_and_wall_time.c`
|
|
10
13
|
class CpuAndWallTime
|
|
@@ -12,24 +15,6 @@ module Datadog
|
|
|
12
15
|
self.class._native_initialize(self, recorder, max_frames)
|
|
13
16
|
end
|
|
14
17
|
|
|
15
|
-
# This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
|
|
16
|
-
# It SHOULD NOT be used for other purposes.
|
|
17
|
-
def sample
|
|
18
|
-
self.class._native_sample(self)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
|
|
22
|
-
# It SHOULD NOT be used for other purposes.
|
|
23
|
-
def thread_list
|
|
24
|
-
self.class._native_thread_list
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# This method exists only to enable testing Datadog::Profiling::Collectors::CpuAndWallTime behavior using RSpec.
|
|
28
|
-
# It SHOULD NOT be used for other purposes.
|
|
29
|
-
def per_thread_context
|
|
30
|
-
self.class._native_per_thread_context(self)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
18
|
def inspect
|
|
34
19
|
# Compose Ruby's default inspect with our custom inspect for the native parts
|
|
35
20
|
result = super()
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
require_relative '../../core/utils/only_once'
|
|
4
|
+
require_relative '../../core/utils/time'
|
|
5
|
+
require_relative '../../core/worker'
|
|
6
|
+
require_relative '../../core/workers/polling'
|
|
7
|
+
require_relative '../backtrace_location'
|
|
8
|
+
require_relative '../events/stack'
|
|
9
|
+
require_relative '../native_extension'
|
|
10
10
|
|
|
11
11
|
module Datadog
|
|
12
12
|
module Profiling
|
|
@@ -3,15 +3,10 @@
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
5
5
|
module Collectors
|
|
6
|
-
# Used to gather a stack trace from a given Ruby thread.
|
|
6
|
+
# Used to gather a stack trace from a given Ruby thread. Stores its output on a `StackRecorder`.
|
|
7
7
|
#
|
|
8
|
-
#
|
|
9
|
-
class Stack
|
|
10
|
-
# This method exists only to enable testing Datadog::Profiling::Collectors::Stack behavior using RSpec.
|
|
11
|
-
# It SHOULD NOT be used for other purposes.
|
|
12
|
-
def sample(thread, recorder_instance, metric_values_hash, labels_array, max_frames: 400)
|
|
13
|
-
self.class._native_sample(thread, recorder_instance, metric_values_hash, labels_array, max_frames)
|
|
14
|
-
end
|
|
8
|
+
# This class is not empty; all of this class is implemented as native code.
|
|
9
|
+
class Stack # rubocop:disable Lint/EmptyClass
|
|
15
10
|
end
|
|
16
11
|
end
|
|
17
12
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'ext'
|
|
4
|
+
require_relative '../core/utils/compression'
|
|
5
|
+
require_relative 'tag_builder'
|
|
6
6
|
|
|
7
7
|
module Datadog
|
|
8
8
|
module Profiling
|
|
@@ -22,22 +22,30 @@ module Datadog
|
|
|
22
22
|
attr_reader \
|
|
23
23
|
:pprof_recorder,
|
|
24
24
|
:code_provenance_collector, # The code provenance collector acts both as collector and as a recorder
|
|
25
|
-
:
|
|
25
|
+
:minimum_duration_seconds,
|
|
26
|
+
:time_provider,
|
|
27
|
+
:last_flush_finish_at,
|
|
28
|
+
:created_at
|
|
26
29
|
|
|
27
30
|
public
|
|
28
31
|
|
|
29
32
|
def initialize(
|
|
30
33
|
pprof_recorder:,
|
|
31
34
|
code_provenance_collector:,
|
|
32
|
-
|
|
35
|
+
minimum_duration_seconds: PROFILE_DURATION_THRESHOLD_SECONDS,
|
|
36
|
+
time_provider: Time
|
|
33
37
|
)
|
|
34
38
|
@pprof_recorder = pprof_recorder
|
|
35
39
|
@code_provenance_collector = code_provenance_collector
|
|
36
|
-
@
|
|
40
|
+
@minimum_duration_seconds = minimum_duration_seconds
|
|
41
|
+
@time_provider = time_provider
|
|
42
|
+
@last_flush_finish_at = nil
|
|
43
|
+
@created_at = time_provider.now.utc
|
|
37
44
|
end
|
|
38
45
|
|
|
39
46
|
def flush
|
|
40
47
|
start, finish, uncompressed_pprof = pprof_recorder.serialize
|
|
48
|
+
@last_flush_finish_at = finish
|
|
41
49
|
|
|
42
50
|
return if uncompressed_pprof.nil? # We don't want to report empty profiles
|
|
43
51
|
|
|
@@ -60,14 +68,14 @@ module Datadog
|
|
|
60
68
|
)
|
|
61
69
|
end
|
|
62
70
|
|
|
63
|
-
def
|
|
64
|
-
|
|
71
|
+
def can_flush?
|
|
72
|
+
!duration_below_threshold?(last_flush_finish_at || created_at, time_provider.now.utc)
|
|
65
73
|
end
|
|
66
74
|
|
|
67
75
|
private
|
|
68
76
|
|
|
69
77
|
def duration_below_threshold?(start, finish)
|
|
70
|
-
(finish - start) <
|
|
78
|
+
(finish - start) < minimum_duration_seconds
|
|
71
79
|
end
|
|
72
80
|
end
|
|
73
81
|
end
|
|
@@ -5,6 +5,11 @@ module Datadog
|
|
|
5
5
|
module Ext
|
|
6
6
|
# Monkey patches `Kernel#fork`, adding a `Kernel#at_fork` callback mechanism which is used to restore
|
|
7
7
|
# profiling abilities after the VM forks.
|
|
8
|
+
#
|
|
9
|
+
# Known limitations: Does not handle `BasicObject`s that include `Kernel` directly; e.g.
|
|
10
|
+
# `Class.new(BasicObject) { include(::Kernel); def call; fork { }; end }.new.call`.
|
|
11
|
+
#
|
|
12
|
+
# This will be fixed once we moved to hooking into `Process._fork`
|
|
8
13
|
module Forking
|
|
9
14
|
def self.supported?
|
|
10
15
|
Process.respond_to?(:fork)
|
|
@@ -13,33 +18,22 @@ module Datadog
|
|
|
13
18
|
def self.apply!
|
|
14
19
|
return false unless supported?
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# however, this method rewrite is more invasive and irreversible.
|
|
26
|
-
# It could also have collisions with other libraries that patch.
|
|
27
|
-
# Opt to modify the inheritance of each relevant target instead.
|
|
28
|
-
modules.each do |mod|
|
|
29
|
-
clazz = if mod.class <= Module
|
|
30
|
-
mod.singleton_class
|
|
31
|
-
else
|
|
32
|
-
mod.class
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
clazz.prepend(Kernel)
|
|
36
|
-
end
|
|
21
|
+
[
|
|
22
|
+
::Process.singleton_class, # Process.fork
|
|
23
|
+
::Kernel.singleton_class, # Kernel.fork
|
|
24
|
+
::Object, # fork without explicit receiver (it's defined as a method in ::Kernel)
|
|
25
|
+
# Note: Modifying Object as we do here is irreversible. During tests, this
|
|
26
|
+
# change will stick around even if we otherwise stub `Process` and `Kernel`
|
|
27
|
+
].each { |target| target.prepend(Kernel) }
|
|
28
|
+
|
|
29
|
+
::Process.singleton_class.prepend(ProcessDaemonPatch)
|
|
37
30
|
end
|
|
38
31
|
|
|
39
32
|
# Extensions for kernel
|
|
33
|
+
#
|
|
34
|
+
# TODO: Consider hooking into `Process._fork` on Ruby 3.1+ instead, see
|
|
35
|
+
# https://github.com/ruby/ruby/pull/5017 and https://bugs.ruby-lang.org/issues/17795
|
|
40
36
|
module Kernel
|
|
41
|
-
FORK_STAGES = [:prepare, :parent, :child].freeze
|
|
42
|
-
|
|
43
37
|
def fork
|
|
44
38
|
# If a block is provided, it must be wrapped to trigger callbacks.
|
|
45
39
|
child_block = if block_given?
|
|
@@ -52,9 +46,6 @@ module Datadog
|
|
|
52
46
|
end
|
|
53
47
|
end
|
|
54
48
|
|
|
55
|
-
# Trigger :prepare callback
|
|
56
|
-
ddtrace_at_fork_blocks[:prepare].each(&:call) if ddtrace_at_fork_blocks.key?(:prepare)
|
|
57
|
-
|
|
58
49
|
# Start fork
|
|
59
50
|
# If a block is provided, use the wrapped version.
|
|
60
51
|
result = child_block.nil? ? super : super(&child_block)
|
|
@@ -62,22 +53,14 @@ module Datadog
|
|
|
62
53
|
# Trigger correct callbacks depending on whether we're in the parent or child.
|
|
63
54
|
# If we're in the fork, result = nil: trigger child callbacks.
|
|
64
55
|
# If we're in the parent, result = fork PID: trigger parent callbacks.
|
|
65
|
-
|
|
66
|
-
if result.nil?
|
|
67
|
-
# Trigger :child callback
|
|
68
|
-
ddtrace_at_fork_blocks[:child].each(&:call) if ddtrace_at_fork_blocks.key?(:child)
|
|
69
|
-
else
|
|
70
|
-
# Trigger :parent callback
|
|
71
|
-
ddtrace_at_fork_blocks[:parent].each(&:call) if ddtrace_at_fork_blocks.key?(:parent)
|
|
72
|
-
end
|
|
73
|
-
# rubocop:enable Style/IfInsideElse
|
|
56
|
+
ddtrace_at_fork_blocks[:child].each(&:call) if result.nil? && ddtrace_at_fork_blocks.key?(:child)
|
|
74
57
|
|
|
75
58
|
# Return PID from #fork
|
|
76
59
|
result
|
|
77
60
|
end
|
|
78
61
|
|
|
79
|
-
def at_fork(stage
|
|
80
|
-
raise ArgumentError, 'Bad \'stage\' for ::at_fork' unless
|
|
62
|
+
def at_fork(stage, &block)
|
|
63
|
+
raise ArgumentError, 'Bad \'stage\' for ::at_fork' unless stage == :child
|
|
81
64
|
|
|
82
65
|
ddtrace_at_fork_blocks[stage] = [] unless ddtrace_at_fork_blocks.key?(stage)
|
|
83
66
|
ddtrace_at_fork_blocks[stage] << block
|
|
@@ -93,6 +76,22 @@ module Datadog
|
|
|
93
76
|
# rubocop:enable Style/ClassVars
|
|
94
77
|
end
|
|
95
78
|
end
|
|
79
|
+
|
|
80
|
+
# A call to Process.daemon ( https://rubyapi.org/3.1/o/process#method-c-daemon ) forks the current process and
|
|
81
|
+
# keeps executing code in the child process, killing off the parent, thus effectively replacing it.
|
|
82
|
+
#
|
|
83
|
+
# This monkey patch makes the `Kernel#at_fork` mechanism defined above also work in this situation.
|
|
84
|
+
module ProcessDaemonPatch
|
|
85
|
+
def daemon(*args)
|
|
86
|
+
ddtrace_at_fork_blocks = Datadog::Profiling::Ext::Forking::Kernel.ddtrace_at_fork_blocks
|
|
87
|
+
|
|
88
|
+
result = super
|
|
89
|
+
|
|
90
|
+
ddtrace_at_fork_blocks[:child].each(&:call) if ddtrace_at_fork_blocks.key?(:child)
|
|
91
|
+
|
|
92
|
+
result
|
|
93
|
+
end
|
|
94
|
+
end
|
|
96
95
|
end
|
|
97
96
|
end
|
|
98
97
|
end
|
|
@@ -9,6 +9,7 @@ module Datadog
|
|
|
9
9
|
ENV_AGENTLESS = 'DD_PROFILING_AGENTLESS'.freeze
|
|
10
10
|
ENV_ENDPOINT_COLLECTION_ENABLED = 'DD_PROFILING_ENDPOINT_COLLECTION_ENABLED'.freeze
|
|
11
11
|
|
|
12
|
+
# TODO: Consider removing this once the Ruby-based pprof encoding is removed and replaced by libdatadog
|
|
12
13
|
module Pprof
|
|
13
14
|
LABEL_KEY_LOCAL_ROOT_SPAN_ID = 'local root span id'.freeze
|
|
14
15
|
LABEL_KEY_SPAN_ID = 'span id'.freeze
|
|
@@ -28,7 +28,7 @@ module Datadog
|
|
|
28
28
|
upload_timeout_milliseconds: @upload_timeout_milliseconds,
|
|
29
29
|
|
|
30
30
|
# why "timespec"?
|
|
31
|
-
#
|
|
31
|
+
# libdatadog represents time using POSIX's struct timespec, see
|
|
32
32
|
# https://www.gnu.org/software/libc/manual/html_node/Time-Types.html
|
|
33
33
|
# aka it represents the seconds part separate from the nanoseconds part
|
|
34
34
|
start_timespec_seconds: flush.start.tv_sec,
|
|
@@ -80,8 +80,9 @@ module Datadog
|
|
|
80
80
|
def validate_agent_settings(agent_settings)
|
|
81
81
|
supported_adapters = [Datadog::Transport::Ext::HTTP::ADAPTER, Datadog::Transport::Ext::UnixSocket::ADAPTER]
|
|
82
82
|
unless supported_adapters.include?(agent_settings.adapter)
|
|
83
|
-
raise ArgumentError,
|
|
84
|
-
|
|
83
|
+
raise ArgumentError,
|
|
84
|
+
"Unsupported transport configuration for profiling: Adapter #{agent_settings.adapter} " \
|
|
85
|
+
' is not supported'
|
|
85
86
|
end
|
|
86
87
|
|
|
87
88
|
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
require_relative 'buffer'
|
|
4
|
+
require_relative 'encoding/profile'
|
|
5
5
|
|
|
6
6
|
module Datadog
|
|
7
7
|
module Profiling
|
|
@@ -73,11 +73,6 @@ module Datadog
|
|
|
73
73
|
[start, finish, encoded_pprof]
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
# NOTE: Remember that if the recorder is being accessed by multiple threads, this is an inherently racy operation.
|
|
77
|
-
def empty?
|
|
78
|
-
@buffers.values.all?(&:empty?)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
76
|
# Error when event of an unknown type is used with the OldRecorder
|
|
82
77
|
class UnknownEventError < StandardError
|
|
83
78
|
attr_reader :event_class
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
# typed: true
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
require_relative '../flush'
|
|
6
|
+
require_relative 'message_set'
|
|
7
|
+
require_relative 'string_table'
|
|
8
|
+
require_relative '../../core/utils/time'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module Profiling
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
require_relative '../ext'
|
|
4
|
+
require_relative '../events/stack'
|
|
5
|
+
require_relative 'builder'
|
|
6
|
+
require_relative 'converter'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Profiling
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# typed: false
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
require_relative 'payload'
|
|
4
|
+
require_relative 'message_set'
|
|
5
|
+
require_relative 'builder'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
require_relative '../events/stack'
|
|
8
|
+
require_relative 'stack_sample'
|
|
9
9
|
|
|
10
10
|
module Datadog
|
|
11
11
|
module Profiling
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative '../core/utils/time'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
require_relative '../core/worker'
|
|
6
|
+
require_relative '../core/workers/polling'
|
|
7
7
|
|
|
8
8
|
module Datadog
|
|
9
9
|
module Profiling
|
|
@@ -69,6 +69,7 @@ module Datadog
|
|
|
69
69
|
def after_fork
|
|
70
70
|
# Clear any existing profiling state.
|
|
71
71
|
# We don't want the child process to report profiling data from its parent.
|
|
72
|
+
Datadog.logger.debug('Flushing exporter in child process #after_fork and discarding data')
|
|
72
73
|
exporter.flush
|
|
73
74
|
end
|
|
74
75
|
|
|
@@ -82,7 +83,7 @@ module Datadog
|
|
|
82
83
|
end
|
|
83
84
|
|
|
84
85
|
def work_pending?
|
|
85
|
-
|
|
86
|
+
exporter.can_flush?
|
|
86
87
|
end
|
|
87
88
|
|
|
88
89
|
private
|
|
@@ -2,11 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
module Datadog
|
|
4
4
|
module Profiling
|
|
5
|
-
#
|
|
5
|
+
# Stores stack samples in a native libdatadog data structure and expose Ruby-level serialization APIs
|
|
6
|
+
# Note that `record_sample` is only accessible from native code.
|
|
6
7
|
# Methods prefixed with _native_ are implemented in `stack_recorder.c`
|
|
7
8
|
class StackRecorder
|
|
9
|
+
def initialize
|
|
10
|
+
# This mutex works in addition to the fancy C-level mutexes we have in the native side (see the docs there).
|
|
11
|
+
# It prevents multiple Ruby threads calling serialize at the same time -- something like
|
|
12
|
+
# `10.times { Thread.new { stack_recorder.serialize } }`.
|
|
13
|
+
# This isn't something we expect to happen normally, but because it would break the assumptions of the
|
|
14
|
+
# C-level mutexes (that there is a single serializer thread), we add it here as an extra safeguard against it
|
|
15
|
+
# accidentally happening.
|
|
16
|
+
@no_concurrent_synchronize_mutex = Thread::Mutex.new
|
|
17
|
+
end
|
|
18
|
+
|
|
8
19
|
def serialize
|
|
9
|
-
status, result = self.class._native_serialize(self)
|
|
20
|
+
status, result = @no_concurrent_synchronize_mutex.synchronize { self.class._native_serialize(self) }
|
|
10
21
|
|
|
11
22
|
if status == :ok
|
|
12
23
|
start, finish, encoded_pprof = result
|
|
@@ -23,8 +34,7 @@ module Datadog
|
|
|
23
34
|
end
|
|
24
35
|
end
|
|
25
36
|
|
|
26
|
-
# Used only for Ruby 2.2
|
|
27
|
-
# Called from native code
|
|
37
|
+
# Used only for Ruby 2.2 which doesn't have the native `rb_time_timespec_new` API; called from native code
|
|
28
38
|
def self.ruby_time_from(timespec_seconds, timespec_nanoseconds)
|
|
29
39
|
Time.at(0).utc + timespec_seconds + (timespec_nanoseconds.to_r / 1_000_000_000)
|
|
30
40
|
end
|