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
data/ddtrace.gemspec
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
|
|
3
|
-
lib = File.expand_path('../lib', __FILE__)
|
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
-
require 'ddtrace/version'
|
|
6
|
-
|
|
7
|
-
Gem::Specification.new do |spec|
|
|
8
|
-
spec.name = 'ddtrace'
|
|
9
|
-
spec.version = DDTrace::VERSION::STRING
|
|
10
|
-
spec.required_ruby_version = [">= #{DDTrace::VERSION::MINIMUM_RUBY_VERSION}", "< #{DDTrace::VERSION::MAXIMUM_RUBY_VERSION}"]
|
|
11
|
-
spec.required_rubygems_version = '>= 2.0.0'
|
|
12
|
-
spec.authors = ['Datadog, Inc.']
|
|
13
|
-
spec.email = ['dev@datadoghq.com']
|
|
14
|
-
|
|
15
|
-
spec.summary = 'Datadog tracing code for your Ruby applications'
|
|
16
|
-
spec.description = <<-EOS.gsub(/^[\s]+/, '')
|
|
17
|
-
ddtrace is Datadog’s tracing client for Ruby. It is used to trace requests
|
|
18
|
-
as they flow across web servers, databases and microservices so that developers
|
|
19
|
-
have great visiblity into bottlenecks and troublesome requests.
|
|
20
|
-
EOS
|
|
21
|
-
|
|
22
|
-
spec.homepage = 'https://github.com/DataDog/dd-trace-rb'
|
|
23
|
-
spec.license = 'BSD-3-Clause'
|
|
24
|
-
|
|
25
|
-
if spec.respond_to?(:metadata)
|
|
26
|
-
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
27
|
-
else
|
|
28
|
-
raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
spec.files =
|
|
32
|
-
`git ls-files -z`
|
|
33
|
-
.split("\x0")
|
|
34
|
-
.reject { |f| f.match(%r{^(test|spec|features|[.]circleci|[.]github|[.]dd-ci|benchmarks|gemfiles|integration|tasks|sorbet|yard)/}) }
|
|
35
|
-
.reject do |f|
|
|
36
|
-
['.dockerignore', '.env', '.gitattributes', '.gitlab-ci.yml', '.rspec', '.rubocop.yml',
|
|
37
|
-
'.rubocop_todo.yml', '.simplecov', 'Appraisals', 'Gemfile', 'Rakefile', 'docker-compose.yml', '.pryrc', '.yardopts'].include?(f)
|
|
38
|
-
end
|
|
39
|
-
spec.executables = ['ddtracerb']
|
|
40
|
-
spec.require_paths = ['lib']
|
|
41
|
-
|
|
42
|
-
# Important note: This `if` ONLY works for development. When packaging up the gem, Ruby runs this code, and hardcodes
|
|
43
|
-
# the output in the `.gem` file that gets uploaded to rubygems. So the decision here gets hardcoded, we don't actually
|
|
44
|
-
# pick a version depending on the Ruby customers are running, as it may appear.
|
|
45
|
-
# For more context, see the discussion in
|
|
46
|
-
# * https://github.com/DataDog/dd-trace-rb/pull/1739
|
|
47
|
-
# * https://github.com/DataDog/dd-trace-rb/pull/1336
|
|
48
|
-
if RUBY_VERSION >= '2.2.0'
|
|
49
|
-
spec.add_dependency 'msgpack'
|
|
50
|
-
else
|
|
51
|
-
# msgpack 1.4 fails for Ruby 2.1: https://github.com/msgpack/msgpack-ruby/issues/205
|
|
52
|
-
spec.add_dependency 'msgpack', '< 1.4'
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Used by the profiler native extension to support older Rubies (see NativeExtensionDesign.md for notes)
|
|
56
|
-
#
|
|
57
|
-
# Most versions of this gem work for us, but 0.10.16 includes an important fix for Ruby 2.5.4 to 2.5.9
|
|
58
|
-
# (https://github.com/ruby-debug/debase-ruby_core_source/pull/6) so we should keep that as a lower bound going
|
|
59
|
-
# forward.
|
|
60
|
-
#
|
|
61
|
-
# we're pinning it at the latest available version and will manually bump the dependency as needed.
|
|
62
|
-
spec.add_dependency 'debase-ruby_core_source', '= 0.10.16'
|
|
63
|
-
|
|
64
|
-
# Used by appsec
|
|
65
|
-
spec.add_dependency 'libddwaf', '~> 1.3.0.2.0'
|
|
66
|
-
|
|
67
|
-
# Used by profiling
|
|
68
|
-
spec.add_dependency 'libddprof', '~> 0.6.0.1.0'
|
|
69
|
-
|
|
70
|
-
spec.extensions = ['ext/ddtrace_profiling_native_extension/extconf.rb', 'ext/ddtrace_profiling_loader/extconf.rb']
|
|
71
|
-
end
|
data/docs/0.x-trace.png
DELETED
|
Binary file
|
data/docs/1.0-trace.png
DELETED
|
Binary file
|
data/docs/AutoInstrumentation.md
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# Auto Instrumentation
|
|
2
|
-
|
|
3
|
-
`ddtrace` can automatically instrument all available libraries, without requiring the manual setup of each one.
|
|
4
|
-
|
|
5
|
-
## Rails
|
|
6
|
-
|
|
7
|
-
Add the following to your `Gemfile`/`gems.rb` file:
|
|
8
|
-
|
|
9
|
-
```ruby
|
|
10
|
-
source 'https://rubygems.org'
|
|
11
|
-
gem 'ddtrace', require: 'ddtrace/auto_instrument'
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Ruby
|
|
15
|
-
|
|
16
|
-
Require `'ddtrace/auto_instrument'` after all gems that you'd like to instrument have been loaded:
|
|
17
|
-
|
|
18
|
-
```ruby
|
|
19
|
-
# Example libraries with supported integrations
|
|
20
|
-
require 'sinatra'
|
|
21
|
-
require 'faraday'
|
|
22
|
-
require 'redis'
|
|
23
|
-
|
|
24
|
-
require 'ddtrace/auto_instrument'
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Additional configuration
|
|
28
|
-
|
|
29
|
-
You can reconfigure, override, or disable any specific integration settings by adding
|
|
30
|
-
a [`Datadog.configure`](GettingStarted.md#integration-instrumentation) call after `ddtrace/auto_instrument` is activated.
|
|
31
|
-
|
|
32
|
-
## Custom integrations
|
|
33
|
-
|
|
34
|
-
Custom integrations that want to support auto instrumentation need to be registered
|
|
35
|
-
(e.g. invoke their {Datadog::Tracing::Contrib::Registerable::ClassMethods#register_as} method) before
|
|
36
|
-
the tracer requires `'ddtrace/auto_instrument'`.
|
data/docs/Deprecation.md
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Deprecation
|
|
2
|
-
|
|
3
|
-
Deprecated API objects are scheduled to be **removed in the next major version release**.
|
|
4
|
-
|
|
5
|
-
Deprecated objects can still be safely used until the next major version.
|
|
6
|
-
|
|
7
|
-
Objects will receive the deprecation tag in a minor version release,
|
|
8
|
-
allowing for deprecation warnings to be surfaced to users before the next major release.
|
data/docs/DevelopmentGuide.md
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
# Developing
|
|
2
|
-
|
|
3
|
-
This guide covers some of the common how-tos and technical reference material for developing changes within the trace library.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
- [Setting up](#setting-up)
|
|
8
|
-
- [Testing](#testing)
|
|
9
|
-
- [Writing tests](#writing-tests)
|
|
10
|
-
- [Running tests](#running-tests)
|
|
11
|
-
- [Checking code quality](#checking-code-quality)
|
|
12
|
-
- [Running benchmarks](#running-benchmarks)
|
|
13
|
-
- [Type checking](#type-checking)
|
|
14
|
-
- [Appendix](#appendix)
|
|
15
|
-
- [Writing new integrations](#writing-new-integrations)
|
|
16
|
-
- [Custom transport adapters](#custom-transport-adapters)
|
|
17
|
-
|
|
18
|
-
## Setting up
|
|
19
|
-
|
|
20
|
-
*NOTE: To test locally, you must have `Docker` and `Docker Compose` installed. See the [Docker documentation](https://docs.docker.com/compose/install/) for details.*
|
|
21
|
-
|
|
22
|
-
The trace library uses Docker Compose to create a Ruby environment to develop and test within, as well as containers for any dependencies that might be necessary for certain kinds of tests.
|
|
23
|
-
|
|
24
|
-
To start a development environment, choose a target Ruby version then run the following:
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
# In the root directory of the project...
|
|
28
|
-
cd ~/dd-trace-rb
|
|
29
|
-
|
|
30
|
-
# Create and start a Ruby 2.3 test environment with its dependencies
|
|
31
|
-
docker-compose run --rm tracer-2.3 /bin/bash
|
|
32
|
-
|
|
33
|
-
# Then inside the container (e.g. `root@2a73c6d8673e:/app`)...
|
|
34
|
-
# Install the library dependencies
|
|
35
|
-
bundle install
|
|
36
|
-
|
|
37
|
-
# Install build targets
|
|
38
|
-
appraisal install
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Then within this container you can [run tests](#running-tests), or [run code quality checks](#checking-code-quality).
|
|
42
|
-
|
|
43
|
-
## Testing
|
|
44
|
-
|
|
45
|
-
The test suite uses [RSpec](https://rspec.info/) tests to verify the correctness of both the core trace library and its integrations.
|
|
46
|
-
|
|
47
|
-
### Writing tests
|
|
48
|
-
|
|
49
|
-
New tests should be written as RSpec tests in the `spec/ddtrace` folder. Test files should generally mirror the structure of `lib`.
|
|
50
|
-
|
|
51
|
-
All changes should be covered by a corresponding RSpec tests. Unit tests are preferred, and integration tests are accepted where appropriate (e.g. acceptance tests, verifying compatibility with datastores, etc) but should be kept to a minimum.
|
|
52
|
-
|
|
53
|
-
**Considerations for CI**
|
|
54
|
-
|
|
55
|
-
All tests should run in CI. When adding new `spec.rb` files, you may need to add a test task to ensure your test file is run in CI.
|
|
56
|
-
|
|
57
|
-
- Ensure that there is a corresponding Rake task defined in `Rakefile` under the the `spec` namespace, whose pattern matches your test file.
|
|
58
|
-
- Verify the Rake task is configured to run for the appropriate Ruby runtimes in the `ci` Rake task.
|
|
59
|
-
|
|
60
|
-
### Running tests
|
|
61
|
-
|
|
62
|
-
Simplest way to run tests is to run `bundle exec rake ci`, which will run the entire test suite, just as CI does.
|
|
63
|
-
|
|
64
|
-
**For the core library**
|
|
65
|
-
|
|
66
|
-
Run the tests for the core library with:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
$ bundle exec rake spec:main
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**For integrations**
|
|
73
|
-
|
|
74
|
-
Integrations which interact with dependencies not listed in the `ddtrace` gemspec will need to load these dependencies to run their tests.
|
|
75
|
-
|
|
76
|
-
To do so, load the dependencies using [Appraisal](https://github.com/thoughtbot/appraisal). You can see a list of available appraisals with `bundle exec appraisal list`, or examine the `Appraisals` file.
|
|
77
|
-
|
|
78
|
-
Then to run tests, prefix the test commain with the appraisal. For example:
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
# Runs tests for Rails 3.2 + Postgres
|
|
82
|
-
$ bundle exec appraisal rails32-postgres spec:rails
|
|
83
|
-
# Runs tests for Redis
|
|
84
|
-
$ bundle exec appraisal contrib rake spec:redis
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
**Passing arguments to tests**
|
|
88
|
-
|
|
89
|
-
When running RSpec tests, you may pass additional args as parameters to the Rake task. For example:
|
|
90
|
-
|
|
91
|
-
```
|
|
92
|
-
# Runs Redis tests with seed 1234
|
|
93
|
-
$ bundle exec appraisal contrib rake spec:redis'[--seed,1234]'
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
This can be useful for replicating conditions from CI or isolating certain tests.
|
|
97
|
-
|
|
98
|
-
**Checking test coverage**
|
|
99
|
-
|
|
100
|
-
You can check test code coverage by creating a report _after_ running a test suite:
|
|
101
|
-
```
|
|
102
|
-
# Run the desired test suite
|
|
103
|
-
$ bundle exec appraisal contrib rake spec:redis
|
|
104
|
-
# Generate report for the suite executed
|
|
105
|
-
$ bundle exec rake coverage:report
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
A webpage will be generated at `coverage/report/index.html` with the resulting report.
|
|
109
|
-
|
|
110
|
-
Because you are likely not running all tests locally, your report will contain partial coverage results.
|
|
111
|
-
You *must* check the CI step `coverage` for the complete test coverage report, ensuring coverage is not
|
|
112
|
-
decreased.
|
|
113
|
-
|
|
114
|
-
**Ensuring tests don't leak resources**
|
|
115
|
-
|
|
116
|
-
Tests execution can create resources that are hard to track: threads, sockets, files, etc. Because these resources can come
|
|
117
|
-
from the both the test setup as well as the code under test, making sure all resources are properly disposed is important
|
|
118
|
-
to prevent the application from inadvertently creating cumulative resources during its execution.
|
|
119
|
-
|
|
120
|
-
When running tests that utilize threads, you might see an error message similar to this one:
|
|
121
|
-
|
|
122
|
-
```
|
|
123
|
-
Test leaked 1 thread: "Datadog::Workers::AsyncTransport integration tests"
|
|
124
|
-
Ensure all threads are terminated when test finishes:
|
|
125
|
-
1: #<Thread:0x00007fcbc99863d0 /Users/marco.costa/work/dd-trace-rb/spec/spec_helper.rb:145 sleep> (Thread)
|
|
126
|
-
Thread Creation Site:
|
|
127
|
-
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'new'
|
|
128
|
-
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:245:in 'block (4 levels) in <top (required)>'
|
|
129
|
-
Thread Backtrace:
|
|
130
|
-
./dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'sleep'
|
|
131
|
-
.dd-trace-rb/spec/ddtrace/workers_integration_spec.rb:262:in 'block (5 levels) in <top (required)>'
|
|
132
|
-
./dd-trace-rb/spec/spec_helper.rb:147:in 'block in initialize'
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
This means that this test did not finish all threads by the time the test had finished. In this case, the thread
|
|
136
|
-
creation can be traced to `workers_integration_spec.rb:245:in 'new'`. The thread itself is sleeping at `workers_integration_spec.rb:262:in 'sleep'`.
|
|
137
|
-
|
|
138
|
-
The actionable in this case would be to ensure that the thread created in `workers_integration_spec.rb:245` is properly terminated by invoking `Thread#join` during the test tear down, which will wait for the thread to finish before returning.
|
|
139
|
-
|
|
140
|
-
Depending on the situation, the thread in question might need to be forced to terminate. It's recommended to have a mechanism in place to terminate it (a shared variable that changes value when the thread should exit), but as a last resort, `Thread#terminate` forces the thread to finish. Keep in mind that regardless of the termination method, `Thread#join` must be called to ensure that the thread has completely finished its shutdown process.
|
|
141
|
-
|
|
142
|
-
### Checking code quality
|
|
143
|
-
|
|
144
|
-
**Linting**
|
|
145
|
-
|
|
146
|
-
The trace library uses Rubocop to enforce [code style](https://github.com/bbatsov/ruby-style-guide) and quality. To check, run:
|
|
147
|
-
|
|
148
|
-
```
|
|
149
|
-
$ bundle exec rake rubocop
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### Running benchmarks
|
|
153
|
-
|
|
154
|
-
If your changes can have a measurable performance impact, we recommend running our benchmark suite:
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
$ bundle exec rake spec:benchmark
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Results are printed to STDOUT as well as written to the `./tmp/benchmark/` directory.
|
|
161
|
-
|
|
162
|
-
## Type checking
|
|
163
|
-
|
|
164
|
-
This library uses the [Sorbet](https://sorbet.org/) type checker. Sorbet can be run with `bundle exec srb tc` (or `bundle exec rake
|
|
165
|
-
typecheck`). There's also Language Server Protocol support, if your editor supports it.
|
|
166
|
-
|
|
167
|
-
Type checking can be controlled on a file-by-file manner, using a `# typed: ...` comment. The default (when none is provided) is assuming `# typed: false`.
|
|
168
|
-
|
|
169
|
-
Things to note:
|
|
170
|
-
|
|
171
|
-
* For compatibility with older Rubies, we use Sorbet but do not yet allow type annotations in the codebase. If Sorbet is blocking you, feel free to use `# typed: false` or `# typed: ignore` with a quick note on why this was needed. In many cases, Sorbet can typecheck a file correctly with no extra type annotations.
|
|
172
|
-
|
|
173
|
-
* Most integration-specific code will reference optional external dependencies which Sorbet cannot see into. You'll probably need to use `# typed: false` or `# typed: ignore` for those files as well.
|
|
174
|
-
|
|
175
|
-
## Appendix
|
|
176
|
-
|
|
177
|
-
### Writing new integrations
|
|
178
|
-
|
|
179
|
-
Integrations are extensions to the trace library that add support for external dependencies (gems); they typically add auto-instrumentation to popular gems and frameworks. You will find many of our integrations in the `contrib` folder.
|
|
180
|
-
|
|
181
|
-
Some general guidelines for adding new integrations:
|
|
182
|
-
|
|
183
|
-
- An integration can either be added directly to `dd-trace-rb`, or developed as its own gem that depends on `ddtrace`.
|
|
184
|
-
- Integrations should implement the configuration API for easy, consistent implementation. (See existing integrations as examples of this.)
|
|
185
|
-
- All new integrations require documentation, unit/integration tests written in RSpec, and passing CI builds.
|
|
186
|
-
- It's highly encouraged to share screenshots or other demos of how the new integration looks and works.
|
|
187
|
-
|
|
188
|
-
To get started quickly, it's perfectly fine to copy-paste an existing integration to use as a template, then modify it to match your needs. This is usually the fastest, easiest way to bootstrap a new integration and makes the time-to-first-trace often very quick, usually less than an hour if it's a simple implementation.
|
|
189
|
-
|
|
190
|
-
Once you have it working in your application, you can [add unit tests](#writing-tests), [run them locally](#running-tests), and [check for code quality](#checking-code-quality) using Docker Compose.
|
|
191
|
-
|
|
192
|
-
Then [open a pull request](../CONTRIBUTING.md#have-a-patch) and be sure to add the following to the description:
|
|
193
|
-
|
|
194
|
-
- [Documentation](./GettingStarted.md) for the integration, including versions supported.
|
|
195
|
-
- Links to the repository/website of the library being integrated
|
|
196
|
-
- Screenshots showing a sample trace
|
|
197
|
-
- Any additional code snippets, sample apps, benchmarks, or other resources that demonstrate its implementation are a huge plus!
|
|
198
|
-
|
|
199
|
-
### Custom transport adapters
|
|
200
|
-
|
|
201
|
-
The tracer can be configured with transports that customize how data is sent and where it is sent to. This is done through the use of adapters: classes that receive generic requests, process them, and return appropriate responses.
|
|
202
|
-
|
|
203
|
-
#### Developing HTTP transport adapters
|
|
204
|
-
|
|
205
|
-
To create a custom HTTP adapter, define a class that responds to `call(env)` which returns a kind of `Datadog::Transport::Response`:
|
|
206
|
-
|
|
207
|
-
```ruby
|
|
208
|
-
require 'ddtrace/transport/response'
|
|
209
|
-
|
|
210
|
-
class CustomAdapter
|
|
211
|
-
# Sends HTTP request
|
|
212
|
-
# env: Datadog::Transport::HTTP::Env
|
|
213
|
-
def call(env)
|
|
214
|
-
# Add custom code here to send data.
|
|
215
|
-
# Then return a Response object.
|
|
216
|
-
Response.new
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
class Response
|
|
220
|
-
include Datadog::Transport::Response
|
|
221
|
-
|
|
222
|
-
# Implement the following methods as appropriate
|
|
223
|
-
# for your adapter.
|
|
224
|
-
|
|
225
|
-
# Return a String
|
|
226
|
-
def payload; end
|
|
227
|
-
|
|
228
|
-
# Return true/false
|
|
229
|
-
# Return nil if it does not apply
|
|
230
|
-
def ok?; end
|
|
231
|
-
def unsupported?; end
|
|
232
|
-
def not_found?; end
|
|
233
|
-
def client_error?; end
|
|
234
|
-
def server_error?; end
|
|
235
|
-
def internal_error?; end
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
Optionally, you can register the adapter as a well-known type:
|
|
241
|
-
|
|
242
|
-
```ruby
|
|
243
|
-
Datadog::Transport::HTTP::Builder::REGISTRY.set(CustomAdapter, :custom)
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
Then pass an adapter instance to the tracer configuration:
|
|
247
|
-
|
|
248
|
-
```ruby
|
|
249
|
-
Datadog.configure do |c|
|
|
250
|
-
c.tracing.transport_options = proc { |t|
|
|
251
|
-
# By name
|
|
252
|
-
t.adapter :custom
|
|
253
|
-
|
|
254
|
-
# By instance
|
|
255
|
-
custom_adapter = CustomAdapter.new
|
|
256
|
-
t.adapter custom_adapter
|
|
257
|
-
}
|
|
258
|
-
end
|
|
259
|
-
```
|