ls-trace 0.1.2 → 0.2.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/.circleci/config.yml +419 -544
- data/.circleci/images/primary/Dockerfile-2.7.0 +73 -0
- data/.circleci/images/primary/Dockerfile-jruby-9.2 +77 -0
- data/.env +2 -0
- data/.gitignore +2 -0
- data/.gitlab-ci.yml +27 -0
- data/.rubocop.yml +8 -0
- data/.simplecov +38 -0
- data/Appraisals +299 -48
- data/CHANGELOG.md +3 -4
- data/LICENSE +4 -22
- data/LICENSE.Apache +200 -0
- data/LICENSE.BSD3 +24 -0
- data/NOTICE +4 -0
- data/README.md +4 -3
- data/Rakefile +561 -405
- data/ddtrace.gemspec +13 -4
- data/docker-compose.yml +96 -2
- data/docs/DevelopmentGuide.md +17 -1
- data/docs/GettingStarted.md +433 -138
- data/lib/ddtrace.rb +15 -0
- data/lib/ddtrace/analytics.rb +7 -0
- data/lib/ddtrace/buffer.rb +9 -9
- data/lib/ddtrace/chunker.rb +34 -0
- data/lib/ddtrace/configuration.rb +59 -5
- data/lib/ddtrace/configuration/base.rb +4 -2
- data/lib/ddtrace/configuration/components.rb +151 -0
- data/lib/ddtrace/configuration/option.rb +12 -3
- data/lib/ddtrace/configuration/option_definition.rb +1 -5
- data/lib/ddtrace/configuration/options.rb +6 -1
- data/lib/ddtrace/configuration/pin_setup.rb +3 -2
- data/lib/ddtrace/configuration/settings.rb +214 -40
- data/lib/ddtrace/context.rb +84 -63
- data/lib/ddtrace/context_flush.rb +51 -114
- data/lib/ddtrace/context_provider.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/action_cable/event.rb +65 -0
- data/lib/ddtrace/contrib/action_cable/events.rb +33 -0
- data/lib/ddtrace/contrib/action_cable/events/broadcast.rb +49 -0
- data/lib/ddtrace/contrib/action_cable/events/perform_action.rb +55 -0
- data/lib/ddtrace/contrib/action_cable/events/transmit.rb +50 -0
- data/lib/ddtrace/contrib/action_cable/ext.rb +26 -0
- data/lib/ddtrace/contrib/action_cable/instrumentation.rb +31 -0
- data/lib/ddtrace/contrib/action_cable/integration.rb +38 -0
- data/lib/ddtrace/contrib/action_cable/patcher.rb +27 -0
- data/lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/action_pack/action_controller/patcher.rb +3 -15
- data/lib/ddtrace/contrib/action_pack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_pack/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_pack/integration.rb +5 -3
- data/lib/ddtrace/contrib/action_pack/patcher.rb +3 -9
- data/lib/ddtrace/contrib/action_view/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/action_view/event.rb +39 -0
- data/lib/ddtrace/contrib/action_view/events.rb +30 -0
- data/lib/ddtrace/contrib/action_view/events/render_partial.rb +45 -0
- data/lib/ddtrace/contrib/action_view/events/render_template.rb +48 -0
- data/lib/ddtrace/contrib/action_view/ext.rb +5 -2
- data/lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb +9 -13
- data/lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb +16 -16
- data/lib/ddtrace/contrib/action_view/integration.rb +5 -3
- data/lib/ddtrace/contrib/action_view/patcher.rb +19 -25
- data/lib/ddtrace/contrib/active_model_serializers/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_model_serializers/event.rb +3 -0
- data/lib/ddtrace/contrib/active_model_serializers/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_model_serializers/integration.rb +6 -5
- data/lib/ddtrace/contrib/active_model_serializers/patcher.rb +3 -10
- data/lib/ddtrace/contrib/active_record/configuration/resolver.rb +4 -5
- data/lib/ddtrace/contrib/active_record/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_record/events/instantiation.rb +4 -1
- data/lib/ddtrace/contrib/active_record/events/sql.rb +1 -1
- data/lib/ddtrace/contrib/active_record/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_record/integration.rb +5 -3
- data/lib/ddtrace/contrib/active_record/patcher.rb +3 -9
- data/lib/ddtrace/contrib/active_support/cache/instrumentation.rb +2 -2
- data/lib/ddtrace/contrib/active_support/cache/patcher.rb +10 -24
- data/lib/ddtrace/contrib/active_support/cache/redis.rb +1 -1
- data/lib/ddtrace/contrib/active_support/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/active_support/ext.rb +5 -2
- data/lib/ddtrace/contrib/active_support/integration.rb +5 -3
- data/lib/ddtrace/contrib/active_support/notifications/event.rb +3 -1
- data/lib/ddtrace/contrib/active_support/notifications/subscription.rb +3 -3
- data/lib/ddtrace/contrib/active_support/patcher.rb +3 -9
- data/lib/ddtrace/contrib/analytics.rb +5 -1
- data/lib/ddtrace/contrib/aws/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/aws/ext.rb +5 -2
- data/lib/ddtrace/contrib/aws/integration.rb +8 -2
- data/lib/ddtrace/contrib/aws/patcher.rb +15 -15
- data/lib/ddtrace/contrib/concurrent_ruby/configuration/settings.rb +5 -0
- data/lib/ddtrace/contrib/concurrent_ruby/context_composite_executor_service.rb +9 -3
- data/lib/ddtrace/contrib/concurrent_ruby/ext.rb +1 -0
- data/lib/ddtrace/contrib/concurrent_ruby/integration.rb +8 -2
- data/lib/ddtrace/contrib/concurrent_ruby/patcher.rb +4 -11
- data/lib/ddtrace/contrib/configurable.rb +30 -13
- data/lib/ddtrace/contrib/configuration/resolver.rb +7 -3
- data/lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb +39 -0
- data/lib/ddtrace/contrib/configuration/settings.rb +20 -1
- data/lib/ddtrace/contrib/dalli/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/dalli/ext.rb +5 -2
- data/lib/ddtrace/contrib/dalli/integration.rb +5 -3
- data/lib/ddtrace/contrib/dalli/patcher.rb +6 -16
- data/lib/ddtrace/contrib/dalli/quantize.rb +1 -1
- data/lib/ddtrace/contrib/delayed_job/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/delayed_job/ext.rb +5 -2
- data/lib/ddtrace/contrib/delayed_job/integration.rb +8 -2
- data/lib/ddtrace/contrib/delayed_job/patcher.rb +4 -10
- data/lib/ddtrace/contrib/delayed_job/plugin.rb +4 -0
- data/lib/ddtrace/contrib/elasticsearch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/elasticsearch/ext.rb +5 -2
- data/lib/ddtrace/contrib/elasticsearch/integration.rb +5 -3
- data/lib/ddtrace/contrib/elasticsearch/patcher.rb +10 -17
- data/lib/ddtrace/contrib/ethon/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/ethon/easy_patch.rb +22 -13
- data/lib/ddtrace/contrib/ethon/ext.rb +5 -2
- data/lib/ddtrace/contrib/ethon/integration.rb +14 -2
- data/lib/ddtrace/contrib/ethon/patcher.rb +7 -9
- data/lib/ddtrace/contrib/excon/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/excon/ext.rb +5 -2
- data/lib/ddtrace/contrib/excon/integration.rb +13 -2
- data/lib/ddtrace/contrib/excon/middleware.rb +15 -12
- data/lib/ddtrace/contrib/excon/patcher.rb +4 -11
- data/lib/ddtrace/contrib/extensions.rb +39 -5
- data/lib/ddtrace/contrib/faraday/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/faraday/connection.rb +18 -0
- data/lib/ddtrace/contrib/faraday/ext.rb +5 -2
- data/lib/ddtrace/contrib/faraday/integration.rb +10 -3
- data/lib/ddtrace/contrib/faraday/middleware.rb +24 -34
- data/lib/ddtrace/contrib/faraday/patcher.rb +26 -19
- data/lib/ddtrace/contrib/grape/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/grape/endpoint.rb +14 -5
- data/lib/ddtrace/contrib/grape/ext.rb +5 -2
- data/lib/ddtrace/contrib/grape/integration.rb +6 -3
- data/lib/ddtrace/contrib/grape/patcher.rb +9 -15
- data/lib/ddtrace/contrib/graphql/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/graphql/ext.rb +5 -2
- data/lib/ddtrace/contrib/graphql/integration.rb +6 -5
- data/lib/ddtrace/contrib/graphql/patcher.rb +11 -14
- data/lib/ddtrace/contrib/grpc/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/grpc/datadog_interceptor.rb +1 -1
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/client.rb +2 -4
- data/lib/ddtrace/contrib/grpc/datadog_interceptor/server.rb +5 -2
- data/lib/ddtrace/contrib/grpc/ext.rb +5 -2
- data/lib/ddtrace/contrib/grpc/integration.rb +5 -3
- data/lib/ddtrace/contrib/grpc/patcher.rb +9 -19
- data/lib/ddtrace/contrib/http/circuit_breaker.rb +8 -32
- data/lib/ddtrace/contrib/http/configuration/settings.rb +8 -2
- data/lib/ddtrace/contrib/http/ext.rb +5 -2
- data/lib/ddtrace/contrib/http/instrumentation.rb +89 -28
- data/lib/ddtrace/contrib/http/integration.rb +13 -0
- data/lib/ddtrace/contrib/http/patcher.rb +3 -9
- data/lib/ddtrace/contrib/http_annotation_helper.rb +10 -0
- data/lib/ddtrace/contrib/httprb/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/httprb/ext.rb +17 -0
- data/lib/ddtrace/contrib/httprb/instrumentation.rb +160 -0
- data/lib/ddtrace/contrib/httprb/integration.rb +43 -0
- data/lib/ddtrace/contrib/httprb/patcher.rb +35 -0
- data/lib/ddtrace/contrib/kafka/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/kafka/consumer_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/consumer_group_event.rb +14 -0
- data/lib/ddtrace/contrib/kafka/event.rb +51 -0
- data/lib/ddtrace/contrib/kafka/events.rb +44 -0
- data/lib/ddtrace/contrib/kafka/events/connection/request.rb +34 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb +41 -0
- data/lib/ddtrace/contrib/kafka/events/consumer/process_message.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb +39 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb +29 -0
- data/lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb +32 -0
- data/lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb +35 -0
- data/lib/ddtrace/contrib/kafka/ext.rb +41 -0
- data/lib/ddtrace/contrib/kafka/integration.rb +39 -0
- data/lib/ddtrace/contrib/kafka/patcher.rb +26 -0
- data/lib/ddtrace/contrib/mongodb/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mongodb/ext.rb +5 -2
- data/lib/ddtrace/contrib/mongodb/instrumentation.rb +1 -2
- data/lib/ddtrace/contrib/mongodb/integration.rb +5 -3
- data/lib/ddtrace/contrib/mongodb/patcher.rb +5 -11
- data/lib/ddtrace/contrib/mongodb/subscribers.rb +2 -2
- data/lib/ddtrace/contrib/mysql2/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/mysql2/ext.rb +5 -2
- data/lib/ddtrace/contrib/mysql2/instrumentation.rb +1 -1
- data/lib/ddtrace/contrib/mysql2/integration.rb +8 -2
- data/lib/ddtrace/contrib/mysql2/patcher.rb +3 -9
- data/lib/ddtrace/contrib/patchable.rb +21 -4
- data/lib/ddtrace/contrib/patcher.rb +44 -10
- data/lib/ddtrace/contrib/presto/configuration/settings.rb +30 -0
- data/lib/ddtrace/contrib/presto/ext.rb +28 -0
- data/lib/ddtrace/contrib/presto/instrumentation.rb +107 -0
- data/lib/ddtrace/contrib/presto/integration.rb +38 -0
- data/lib/ddtrace/contrib/presto/patcher.rb +30 -0
- data/lib/ddtrace/contrib/que/configuration/settings.rb +42 -0
- data/lib/ddtrace/contrib/que/ext.rb +30 -0
- data/lib/ddtrace/contrib/que/integration.rb +42 -0
- data/lib/ddtrace/contrib/que/patcher.rb +24 -0
- data/lib/ddtrace/contrib/que/tracer.rb +56 -0
- data/lib/ddtrace/contrib/racecar/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/racecar/event.rb +4 -0
- data/lib/ddtrace/contrib/racecar/events.rb +2 -0
- data/lib/ddtrace/contrib/racecar/events/consume.rb +27 -0
- data/lib/ddtrace/contrib/racecar/ext.rb +6 -2
- data/lib/ddtrace/contrib/racecar/integration.rb +6 -3
- data/lib/ddtrace/contrib/racecar/patcher.rb +4 -10
- data/lib/ddtrace/contrib/rack/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rack/ext.rb +5 -2
- data/lib/ddtrace/contrib/rack/integration.rb +8 -2
- data/lib/ddtrace/contrib/rack/middlewares.rb +23 -14
- data/lib/ddtrace/contrib/rack/patcher.rb +57 -22
- data/lib/ddtrace/contrib/rack/request_queue.rb +1 -1
- data/lib/ddtrace/contrib/rails/configuration/settings.rb +23 -10
- data/lib/ddtrace/contrib/rails/ext.rb +7 -2
- data/lib/ddtrace/contrib/rails/framework.rb +59 -35
- data/lib/ddtrace/contrib/rails/integration.rb +12 -5
- data/lib/ddtrace/contrib/rails/log_injection.rb +81 -0
- data/lib/ddtrace/contrib/rails/middlewares.rb +7 -2
- data/lib/ddtrace/contrib/rails/patcher.rb +19 -8
- data/lib/ddtrace/contrib/rake/configuration/settings.rb +7 -3
- data/lib/ddtrace/contrib/rake/ext.rb +5 -2
- data/lib/ddtrace/contrib/rake/instrumentation.rb +6 -2
- data/lib/ddtrace/contrib/rake/integration.rb +8 -2
- data/lib/ddtrace/contrib/rake/patcher.rb +4 -10
- data/lib/ddtrace/contrib/redis/configuration/resolver.rb +36 -0
- data/lib/ddtrace/contrib/redis/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/redis/ext.rb +5 -2
- data/lib/ddtrace/contrib/redis/integration.rb +9 -3
- data/lib/ddtrace/contrib/redis/patcher.rb +20 -17
- data/lib/ddtrace/contrib/redis/quantize.rb +1 -1
- data/lib/ddtrace/contrib/redis/vendor/resolver.rb +159 -0
- data/lib/ddtrace/contrib/resque/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/resque/ext.rb +5 -2
- data/lib/ddtrace/contrib/resque/integration.rb +12 -2
- data/lib/ddtrace/contrib/resque/patcher.rb +4 -10
- data/lib/ddtrace/contrib/resque/resque_job.rb +6 -2
- data/lib/ddtrace/contrib/rest_client/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/rest_client/ext.rb +5 -2
- data/lib/ddtrace/contrib/rest_client/integration.rb +9 -2
- data/lib/ddtrace/contrib/rest_client/patcher.rb +5 -7
- data/lib/ddtrace/contrib/rest_client/request_patch.rb +2 -2
- data/lib/ddtrace/contrib/sequel/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sequel/database.rb +1 -1
- data/lib/ddtrace/contrib/sequel/ext.rb +5 -2
- data/lib/ddtrace/contrib/sequel/integration.rb +8 -2
- data/lib/ddtrace/contrib/sequel/patcher.rb +4 -10
- data/lib/ddtrace/contrib/sequel/utils.rb +19 -1
- data/lib/ddtrace/contrib/shoryuken/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/shoryuken/ext.rb +5 -2
- data/lib/ddtrace/contrib/shoryuken/integration.rb +11 -7
- data/lib/ddtrace/contrib/shoryuken/patcher.rb +4 -10
- data/lib/ddtrace/contrib/shoryuken/tracer.rb +4 -0
- data/lib/ddtrace/contrib/sidekiq/configuration/settings.rb +12 -2
- data/lib/ddtrace/contrib/sidekiq/ext.rb +8 -2
- data/lib/ddtrace/contrib/sidekiq/integration.rb +5 -3
- data/lib/ddtrace/contrib/sidekiq/patcher.rb +19 -18
- data/lib/ddtrace/contrib/sidekiq/server_tracer.rb +12 -3
- data/lib/ddtrace/contrib/sidekiq/tracing.rb +19 -2
- data/lib/ddtrace/contrib/sinatra/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sinatra/env.rb +25 -4
- data/lib/ddtrace/contrib/sinatra/ext.rb +11 -2
- data/lib/ddtrace/contrib/sinatra/integration.rb +5 -3
- data/lib/ddtrace/contrib/sinatra/patcher.rb +5 -10
- data/lib/ddtrace/contrib/sinatra/tracer.rb +79 -34
- data/lib/ddtrace/contrib/sinatra/tracer_middleware.rb +48 -15
- data/lib/ddtrace/contrib/sneakers/configuration/settings.rb +32 -0
- data/lib/ddtrace/contrib/sneakers/ext.rb +22 -0
- data/lib/ddtrace/contrib/sneakers/integration.rb +41 -0
- data/lib/ddtrace/contrib/sneakers/patcher.rb +24 -0
- data/lib/ddtrace/contrib/sneakers/tracer.rb +58 -0
- data/lib/ddtrace/contrib/sucker_punch/configuration/settings.rb +7 -2
- data/lib/ddtrace/contrib/sucker_punch/ext.rb +5 -2
- data/lib/ddtrace/contrib/sucker_punch/instrumentation.rb +14 -0
- data/lib/ddtrace/contrib/sucker_punch/integration.rb +5 -3
- data/lib/ddtrace/contrib/sucker_punch/patcher.rb +8 -14
- data/lib/ddtrace/correlation.rb +15 -5
- data/lib/ddtrace/diagnostics/environment_logger.rb +278 -0
- data/lib/ddtrace/diagnostics/health.rb +11 -8
- data/lib/ddtrace/encoding.rb +15 -11
- data/lib/ddtrace/environment.rb +21 -3
- data/lib/ddtrace/event.rb +52 -0
- data/lib/ddtrace/ext/analytics.rb +1 -0
- data/lib/ddtrace/ext/correlation.rb +11 -0
- data/lib/ddtrace/ext/diagnostics.rb +11 -0
- data/lib/ddtrace/ext/environment.rb +16 -0
- data/lib/ddtrace/ext/forced_tracing.rb +1 -1
- data/lib/ddtrace/ext/sampling.rb +16 -0
- data/lib/ddtrace/ext/transport.rb +1 -0
- data/lib/ddtrace/logger.rb +4 -3
- data/lib/ddtrace/metrics.rb +12 -5
- data/lib/ddtrace/monkey.rb +1 -1
- data/lib/ddtrace/opentelemetry/extensions.rb +13 -0
- data/lib/ddtrace/opentelemetry/span.rb +33 -0
- data/lib/ddtrace/opentracer/global_tracer.rb +1 -1
- data/lib/ddtrace/pin.rb +40 -16
- data/lib/ddtrace/pipeline.rb +1 -1
- data/lib/ddtrace/pipeline/span_filter.rb +15 -15
- data/lib/ddtrace/propagation/http_propagator.rb +2 -2
- data/lib/ddtrace/runtime/cgroup.rb +1 -1
- data/lib/ddtrace/runtime/container.rb +1 -1
- data/lib/ddtrace/runtime/metrics.rb +23 -6
- data/lib/ddtrace/sampler.rb +126 -29
- data/lib/ddtrace/sampling.rb +2 -0
- data/lib/ddtrace/sampling/matcher.rb +57 -0
- data/lib/ddtrace/sampling/rate_limiter.rb +127 -0
- data/lib/ddtrace/sampling/rule.rb +61 -0
- data/lib/ddtrace/sampling/rule_sampler.rb +125 -0
- data/lib/ddtrace/span.rb +54 -7
- data/lib/ddtrace/sync_writer.rb +13 -8
- data/lib/ddtrace/tracer.rb +72 -92
- data/lib/ddtrace/transport/http.rb +16 -1
- data/lib/ddtrace/transport/http/adapters/net.rb +8 -0
- data/lib/ddtrace/transport/http/adapters/test.rb +6 -0
- data/lib/ddtrace/transport/http/adapters/unix_socket.rb +4 -0
- data/lib/ddtrace/transport/http/api/instance.rb +4 -0
- data/lib/ddtrace/transport/http/builder.rb +3 -5
- data/lib/ddtrace/transport/http/client.rb +7 -64
- 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 +10 -7
- data/lib/ddtrace/transport/io.rb +26 -0
- data/lib/ddtrace/transport/io/client.rb +76 -0
- data/lib/ddtrace/transport/io/response.rb +25 -0
- data/lib/ddtrace/transport/io/traces.rb +91 -0
- data/lib/ddtrace/transport/response.rb +11 -0
- data/lib/ddtrace/transport/statistics.rb +2 -2
- data/lib/ddtrace/transport/traces.rb +160 -10
- data/lib/ddtrace/utils.rb +1 -1
- data/lib/ddtrace/version.rb +2 -2
- data/lib/ddtrace/worker.rb +20 -0
- data/lib/ddtrace/workers.rb +5 -13
- data/lib/ddtrace/workers/async.rb +165 -0
- data/lib/ddtrace/workers/loop.rb +105 -0
- data/lib/ddtrace/workers/polling.rb +48 -0
- data/lib/ddtrace/workers/queue.rb +39 -0
- data/lib/ddtrace/workers/runtime_metrics.rb +47 -0
- data/lib/ddtrace/workers/trace_writer.rb +202 -0
- data/lib/ddtrace/writer.rb +56 -38
- metadata +185 -25
- data/lib/ddtrace/provider.rb +0 -21
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'forwardable'
|
|
2
|
+
|
|
3
|
+
require 'ddtrace/runtime/metrics'
|
|
4
|
+
|
|
5
|
+
require 'ddtrace/worker'
|
|
6
|
+
require 'ddtrace/workers/polling'
|
|
7
|
+
|
|
8
|
+
module Datadog
|
|
9
|
+
module Workers
|
|
10
|
+
# Emits runtime metrics asynchronously on a timed loop
|
|
11
|
+
class RuntimeMetrics < Worker
|
|
12
|
+
extend Forwardable
|
|
13
|
+
include Workers::Polling
|
|
14
|
+
|
|
15
|
+
attr_reader \
|
|
16
|
+
:metrics
|
|
17
|
+
|
|
18
|
+
def initialize(options = {})
|
|
19
|
+
@metrics = options.fetch(:metrics, Runtime::Metrics.new)
|
|
20
|
+
|
|
21
|
+
# Workers::Async::Thread settings
|
|
22
|
+
self.fork_policy = options.fetch(:fork_policy, Workers::Async::Thread::FORK_POLICY_STOP)
|
|
23
|
+
|
|
24
|
+
# Workers::IntervalLoop settings
|
|
25
|
+
self.interval = options[:interval] if options.key?(:interval)
|
|
26
|
+
self.back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
|
|
27
|
+
self.back_off_max = options[:back_off_max] if options.key?(:back_off_max)
|
|
28
|
+
|
|
29
|
+
self.enabled = options.fetch(:enabled, false)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def perform
|
|
33
|
+
metrics.flush
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def associate_with_span(*args)
|
|
38
|
+
# Start the worker
|
|
39
|
+
metrics.associate_with_span(*args).tap { perform }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def_delegators \
|
|
43
|
+
:metrics,
|
|
44
|
+
:register_service
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
require 'ddtrace/logger'
|
|
2
|
+
require 'ddtrace/transport/http'
|
|
3
|
+
|
|
4
|
+
require 'ddtrace/event'
|
|
5
|
+
require 'ddtrace/worker'
|
|
6
|
+
require 'ddtrace/workers/polling'
|
|
7
|
+
require 'ddtrace/workers/queue'
|
|
8
|
+
|
|
9
|
+
module Datadog
|
|
10
|
+
module Workers
|
|
11
|
+
# Writes traces to transport synchronously
|
|
12
|
+
class TraceWriter < Worker
|
|
13
|
+
attr_reader \
|
|
14
|
+
:transport
|
|
15
|
+
|
|
16
|
+
def initialize(options = {})
|
|
17
|
+
transport_options = options.fetch(:transport_options, {})
|
|
18
|
+
|
|
19
|
+
if transport_options.is_a?(Proc)
|
|
20
|
+
transport_options = { on_build: transport_options }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
transport_options[:hostname] = options[:hostname] if options.key?(:hostname)
|
|
24
|
+
transport_options[:port] = options[:port] if options.key?(:port)
|
|
25
|
+
|
|
26
|
+
@transport = options.fetch(:transport) do
|
|
27
|
+
Transport::HTTP.default(transport_options)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def perform(traces)
|
|
32
|
+
write_traces(traces)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def write(trace)
|
|
36
|
+
write_traces([trace])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def write_traces(traces)
|
|
40
|
+
traces = process_traces(traces)
|
|
41
|
+
flush_traces(traces)
|
|
42
|
+
rescue StandardError => e
|
|
43
|
+
Datadog.logger.error(
|
|
44
|
+
"Error while writing traces: dropped #{traces.length} items. Cause: #{e} Location: #{e.backtrace.first}"
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def process_traces(traces)
|
|
49
|
+
# Run traces through the processing pipeline
|
|
50
|
+
traces = Pipeline.process!(traces)
|
|
51
|
+
|
|
52
|
+
# Inject hostname if configured to do so
|
|
53
|
+
inject_hostname!(traces) if Datadog.configuration.report_hostname
|
|
54
|
+
|
|
55
|
+
traces
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def flush_traces(traces)
|
|
59
|
+
transport.send_traces(traces).tap do |response|
|
|
60
|
+
flush_completed.publish(response)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def inject_hostname!(traces)
|
|
65
|
+
traces.each do |trace|
|
|
66
|
+
next if trace.first.nil?
|
|
67
|
+
|
|
68
|
+
hostname = Datadog::Runtime::Socket.hostname
|
|
69
|
+
unless hostname.nil? || hostname.empty?
|
|
70
|
+
trace.first.set_tag(Ext::NET::TAG_HOSTNAME, hostname)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# TODO: Register `Datadog::Diagnostics::EnvironmentLogger.log!`
|
|
76
|
+
# TODO: as a flush_completed subscriber when the `TraceWriter`
|
|
77
|
+
# TODO: instantiation code is implemented.
|
|
78
|
+
def flush_completed
|
|
79
|
+
@flush_completed ||= FlushCompleted.new
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Flush completed event for worker
|
|
83
|
+
class FlushCompleted < Event
|
|
84
|
+
def initialize
|
|
85
|
+
super(:flush_completed)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def publish(response)
|
|
89
|
+
super(response)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Writes traces to transport asynchronously,
|
|
95
|
+
# using a thread & buffer.
|
|
96
|
+
class AsyncTraceWriter < TraceWriter
|
|
97
|
+
include Workers::Queue
|
|
98
|
+
include Workers::Polling
|
|
99
|
+
|
|
100
|
+
DEFAULT_BUFFER_MAX_SIZE = 1000
|
|
101
|
+
FORK_POLICY_ASYNC = :async
|
|
102
|
+
FORK_POLICY_SYNC = :sync
|
|
103
|
+
|
|
104
|
+
attr_writer \
|
|
105
|
+
:async
|
|
106
|
+
|
|
107
|
+
def initialize(options = {})
|
|
108
|
+
# Workers::TraceWriter settings
|
|
109
|
+
super
|
|
110
|
+
|
|
111
|
+
# Workers::Polling settings
|
|
112
|
+
self.enabled = options.fetch(:enabled, true)
|
|
113
|
+
|
|
114
|
+
# Workers::Async::Thread settings
|
|
115
|
+
@async = true
|
|
116
|
+
self.fork_policy = options.fetch(:fork_policy, FORK_POLICY_ASYNC)
|
|
117
|
+
|
|
118
|
+
# Workers::IntervalLoop settings
|
|
119
|
+
self.loop_base_interval = options[:interval] if options.key?(:interval)
|
|
120
|
+
self.loop_back_off_ratio = options[:back_off_ratio] if options.key?(:back_off_ratio)
|
|
121
|
+
self.loop_back_off_max = options[:back_off_max] if options.key?(:back_off_max)
|
|
122
|
+
|
|
123
|
+
# Workers::Queue settings
|
|
124
|
+
@buffer_size = options.fetch(:buffer_size, DEFAULT_BUFFER_MAX_SIZE)
|
|
125
|
+
self.buffer = TraceBuffer.new(@buffer_size)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# NOTE: #perform is wrapped by other modules:
|
|
129
|
+
# Polling --> Async --> IntervalLoop --> AsyncTraceWriter --> TraceWriter
|
|
130
|
+
def perform(traces)
|
|
131
|
+
super(traces).tap do |responses|
|
|
132
|
+
loop_back_off! if responses.find(&:server_error?)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def stop(*args)
|
|
137
|
+
buffer.close if running?
|
|
138
|
+
super
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def enqueue(trace)
|
|
142
|
+
buffer.push(trace)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def dequeue
|
|
146
|
+
# Wrap results in Array because they are
|
|
147
|
+
# splatted as args against TraceWriter#perform.
|
|
148
|
+
[buffer.pop]
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def work_pending?
|
|
152
|
+
!buffer.empty?
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def async?
|
|
156
|
+
@async == true
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def fork_policy=(policy)
|
|
160
|
+
# Translate to Workers::Async::Thread policy
|
|
161
|
+
thread_fork_policy = case policy
|
|
162
|
+
when Workers::Async::Thread::FORK_POLICY_STOP
|
|
163
|
+
policy
|
|
164
|
+
when FORK_POLICY_SYNC
|
|
165
|
+
# Stop the async thread because the writer
|
|
166
|
+
# will bypass and run synchronously.
|
|
167
|
+
Workers::Async::Thread::FORK_POLICY_STOP
|
|
168
|
+
else
|
|
169
|
+
Workers::Async::Thread::FORK_POLICY_RESTART
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Update thread fork policy
|
|
173
|
+
super(thread_fork_policy)
|
|
174
|
+
|
|
175
|
+
# Update local policy
|
|
176
|
+
@writer_fork_policy = policy
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def after_fork
|
|
180
|
+
# In multiprocess environments, forks will share the same buffer until its written to.
|
|
181
|
+
# A.K.A. copy-on-write. We don't want forks to write traces generated from another process.
|
|
182
|
+
# Instead, we reset it after the fork. (Make sure any enqueue operations happen after this.)
|
|
183
|
+
self.buffer = TraceBuffer.new(@buffer_size)
|
|
184
|
+
|
|
185
|
+
# Switch to synchronous mode if configured to do so.
|
|
186
|
+
# In some cases synchronous writing is preferred because the fork will be short lived.
|
|
187
|
+
@async = false if @writer_fork_policy == FORK_POLICY_SYNC
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def write(trace)
|
|
191
|
+
# Start worker thread. If the process has forked, it will trigger #after_fork to
|
|
192
|
+
# reconfigure the worker accordingly.
|
|
193
|
+
# NOTE: It's important we do this before queuing or it will drop the current trace,
|
|
194
|
+
# because #after_fork resets the buffer.
|
|
195
|
+
perform
|
|
196
|
+
|
|
197
|
+
# Queue the trace if running asynchronously, otherwise short-circuit and write it directly.
|
|
198
|
+
async? ? enqueue(trace) : write_traces([trace])
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
data/lib/ddtrace/writer.rb
CHANGED
|
@@ -4,15 +4,16 @@ require 'ddtrace/ext/net'
|
|
|
4
4
|
require 'ddtrace/runtime/socket'
|
|
5
5
|
|
|
6
6
|
require 'ddtrace/transport/http'
|
|
7
|
+
require 'ddtrace/transport/io'
|
|
7
8
|
require 'ddtrace/encoding'
|
|
8
9
|
require 'ddtrace/workers'
|
|
10
|
+
require 'ddtrace/diagnostics/environment_logger'
|
|
9
11
|
|
|
10
12
|
module Datadog
|
|
11
13
|
# Processor that sends traces and metadata to the agent
|
|
12
14
|
class Writer
|
|
13
15
|
attr_reader \
|
|
14
16
|
:priority_sampler,
|
|
15
|
-
:runtime_metrics,
|
|
16
17
|
:transport,
|
|
17
18
|
:worker
|
|
18
19
|
|
|
@@ -33,11 +34,6 @@ module Datadog
|
|
|
33
34
|
Transport::HTTP.default(transport_options)
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
# Runtime metrics
|
|
37
|
-
@runtime_metrics = options.fetch(:runtime_metrics) do
|
|
38
|
-
Runtime::Metrics.new
|
|
39
|
-
end
|
|
40
|
-
|
|
41
37
|
# handles the thread creation after an eventual fork
|
|
42
38
|
@mutex_after_fork = Mutex.new
|
|
43
39
|
@pid = nil
|
|
@@ -48,29 +44,42 @@ module Datadog
|
|
|
48
44
|
@worker = nil
|
|
49
45
|
end
|
|
50
46
|
|
|
51
|
-
# spawns a worker for spans; they share the same transport which is thread-safe
|
|
52
47
|
def start
|
|
53
|
-
@
|
|
48
|
+
@mutex_after_fork.synchronize do
|
|
49
|
+
pid = Process.pid
|
|
50
|
+
return if @worker && pid == @pid
|
|
51
|
+
@pid = pid
|
|
52
|
+
start_worker
|
|
53
|
+
true
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# spawns a worker for spans; they share the same transport which is thread-safe
|
|
58
|
+
def start_worker
|
|
54
59
|
@trace_handler = ->(items, transport) { send_spans(items, transport) }
|
|
55
|
-
@runtime_metrics_handler = -> { send_runtime_metrics }
|
|
56
60
|
@worker = Datadog::Workers::AsyncTransport.new(
|
|
57
61
|
transport: @transport,
|
|
58
62
|
buffer_size: @buff_size,
|
|
59
63
|
on_trace: @trace_handler,
|
|
60
|
-
on_runtime_metrics: @runtime_metrics_handler,
|
|
61
64
|
interval: @flush_interval
|
|
62
65
|
)
|
|
63
66
|
|
|
64
|
-
@worker.start
|
|
67
|
+
@worker.start
|
|
65
68
|
end
|
|
66
69
|
|
|
67
|
-
# stops worker for spans.
|
|
68
70
|
def stop
|
|
69
|
-
|
|
71
|
+
@mutex_after_fork.synchronize { stop_worker }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def stop_worker
|
|
75
|
+
return if @worker.nil?
|
|
70
76
|
@worker.stop
|
|
71
77
|
@worker = nil
|
|
78
|
+
true
|
|
72
79
|
end
|
|
73
80
|
|
|
81
|
+
private :start_worker, :stop_worker
|
|
82
|
+
|
|
74
83
|
# flush spans to the trace-agent, handles spans only
|
|
75
84
|
def send_spans(traces, transport)
|
|
76
85
|
return true if traces.empty?
|
|
@@ -78,33 +87,28 @@ module Datadog
|
|
|
78
87
|
# Inject hostname if configured to do so
|
|
79
88
|
inject_hostname!(traces) if Datadog.configuration.report_hostname
|
|
80
89
|
|
|
81
|
-
# Send traces
|
|
82
|
-
|
|
90
|
+
# Send traces and get responses
|
|
91
|
+
responses = transport.send_traces(traces)
|
|
83
92
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
# Update priority sampler
|
|
88
|
-
unless priority_sampler.nil? || response.service_rates.nil?
|
|
89
|
-
priority_sampler.update(response.service_rates)
|
|
90
|
-
end
|
|
93
|
+
# Tally up successful flushes
|
|
94
|
+
responses.reject { |x| x.internal_error? || x.server_error? }.each do |response|
|
|
95
|
+
@traces_flushed += response.trace_count
|
|
91
96
|
end
|
|
92
97
|
|
|
93
|
-
#
|
|
94
|
-
|
|
95
|
-
end
|
|
98
|
+
# Update priority sampler
|
|
99
|
+
update_priority_sampler(responses.last)
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
return unless Datadog.configuration.runtime_metrics_enabled
|
|
101
|
+
record_environment_information!(responses)
|
|
99
102
|
|
|
100
|
-
|
|
103
|
+
# Return if server error occurred.
|
|
104
|
+
!responses.find(&:server_error?)
|
|
101
105
|
end
|
|
102
106
|
|
|
103
107
|
# enqueue the trace for submission to the API
|
|
104
108
|
def write(trace, services = nil)
|
|
105
109
|
unless services.nil?
|
|
106
110
|
Datadog::Patcher.do_once('Writer#write') do
|
|
107
|
-
Datadog
|
|
111
|
+
Datadog.logger.warn(%(
|
|
108
112
|
write: Writing services has been deprecated and no longer need to be provided.
|
|
109
113
|
write(traces, services) can be updated to write(traces)
|
|
110
114
|
))
|
|
@@ -119,18 +123,22 @@ module Datadog
|
|
|
119
123
|
#
|
|
120
124
|
# This check ensures that if a process doesn't own the current +Writer+, async workers
|
|
121
125
|
# will be initialized again (but only once for each process).
|
|
122
|
-
pid
|
|
123
|
-
if pid != @pid # avoid using Mutex when pids are equal
|
|
124
|
-
@mutex_after_fork.synchronize do
|
|
125
|
-
# we should start threads because the worker doesn't own this
|
|
126
|
-
start if pid != @pid
|
|
127
|
-
end
|
|
128
|
-
end
|
|
126
|
+
start if @worker.nil? || @pid != Process.pid
|
|
129
127
|
|
|
128
|
+
# TODO: Remove this, and have the tracer pump traces directly to runtime metrics
|
|
129
|
+
# instead of working through the trace writer.
|
|
130
130
|
# Associate root span with runtime metrics
|
|
131
|
-
runtime_metrics.
|
|
131
|
+
if Datadog.configuration.runtime_metrics.enabled && !trace.empty?
|
|
132
|
+
Datadog.runtime_metrics.associate_with_span(trace.first)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
worker_local = @worker
|
|
132
136
|
|
|
133
|
-
|
|
137
|
+
if worker_local
|
|
138
|
+
worker_local.enqueue_trace(trace)
|
|
139
|
+
else
|
|
140
|
+
Datadog.logger.debug('Writer either failed to start or was stopped before #write could complete')
|
|
141
|
+
end
|
|
134
142
|
end
|
|
135
143
|
|
|
136
144
|
# stats returns a dictionary of stats about the writer.
|
|
@@ -153,5 +161,15 @@ module Datadog
|
|
|
153
161
|
end
|
|
154
162
|
end
|
|
155
163
|
end
|
|
164
|
+
|
|
165
|
+
def update_priority_sampler(response)
|
|
166
|
+
return unless response && !response.internal_error? && priority_sampler && response.service_rates
|
|
167
|
+
|
|
168
|
+
priority_sampler.update(response.service_rates)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def record_environment_information!(responses)
|
|
172
|
+
Diagnostics::EnvironmentLogger.log!(responses)
|
|
173
|
+
end
|
|
156
174
|
end
|
|
157
175
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ls-trace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- lightstep
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-09-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -122,6 +122,34 @@ dependencies:
|
|
|
122
122
|
- - '='
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
124
|
version: 5.10.1
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: minitest-around
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - '='
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 0.5.0
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - '='
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: 0.5.0
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: minitest-stub_any_instance
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - '='
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: 1.0.2
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - '='
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: 1.0.2
|
|
125
153
|
- !ruby/object:Gem::Dependency
|
|
126
154
|
name: appraisal
|
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,20 +206,6 @@ dependencies:
|
|
|
178
206
|
- - ">="
|
|
179
207
|
- !ruby/object:Gem::Version
|
|
180
208
|
version: '0'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: ruby-prof
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - ">="
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '0'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - ">="
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '0'
|
|
195
209
|
- !ruby/object:Gem::Dependency
|
|
196
210
|
name: sqlite3
|
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -234,6 +248,48 @@ dependencies:
|
|
|
234
248
|
- - "~>"
|
|
235
249
|
- !ruby/object:Gem::Version
|
|
236
250
|
version: 2.4.0
|
|
251
|
+
- !ruby/object:Gem::Dependency
|
|
252
|
+
name: benchmark-ips
|
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
|
254
|
+
requirements:
|
|
255
|
+
- - "~>"
|
|
256
|
+
- !ruby/object:Gem::Version
|
|
257
|
+
version: '2.8'
|
|
258
|
+
type: :development
|
|
259
|
+
prerelease: false
|
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
+
requirements:
|
|
262
|
+
- - "~>"
|
|
263
|
+
- !ruby/object:Gem::Version
|
|
264
|
+
version: '2.8'
|
|
265
|
+
- !ruby/object:Gem::Dependency
|
|
266
|
+
name: benchmark-memory
|
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
|
268
|
+
requirements:
|
|
269
|
+
- - "~>"
|
|
270
|
+
- !ruby/object:Gem::Version
|
|
271
|
+
version: '0.1'
|
|
272
|
+
type: :development
|
|
273
|
+
prerelease: false
|
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
275
|
+
requirements:
|
|
276
|
+
- - "~>"
|
|
277
|
+
- !ruby/object:Gem::Version
|
|
278
|
+
version: '0.1'
|
|
279
|
+
- !ruby/object:Gem::Dependency
|
|
280
|
+
name: memory_profiler
|
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
|
282
|
+
requirements:
|
|
283
|
+
- - "~>"
|
|
284
|
+
- !ruby/object:Gem::Version
|
|
285
|
+
version: '0.9'
|
|
286
|
+
type: :development
|
|
287
|
+
prerelease: false
|
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
289
|
+
requirements:
|
|
290
|
+
- - "~>"
|
|
291
|
+
- !ruby/object:Gem::Version
|
|
292
|
+
version: '0.9'
|
|
237
293
|
- !ruby/object:Gem::Dependency
|
|
238
294
|
name: redcarpet
|
|
239
295
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,20 +332,34 @@ dependencies:
|
|
|
276
332
|
- - "~>"
|
|
277
333
|
- !ruby/object:Gem::Version
|
|
278
334
|
version: 0.4.9.2
|
|
335
|
+
- !ruby/object:Gem::Dependency
|
|
336
|
+
name: simplecov
|
|
337
|
+
requirement: !ruby/object:Gem::Requirement
|
|
338
|
+
requirements:
|
|
339
|
+
- - "~>"
|
|
340
|
+
- !ruby/object:Gem::Version
|
|
341
|
+
version: '0.17'
|
|
342
|
+
type: :development
|
|
343
|
+
prerelease: false
|
|
344
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
345
|
+
requirements:
|
|
346
|
+
- - "~>"
|
|
347
|
+
- !ruby/object:Gem::Version
|
|
348
|
+
version: '0.17'
|
|
279
349
|
- !ruby/object:Gem::Dependency
|
|
280
350
|
name: warning
|
|
281
351
|
requirement: !ruby/object:Gem::Requirement
|
|
282
352
|
requirements:
|
|
283
|
-
- - "
|
|
353
|
+
- - "~>"
|
|
284
354
|
- !ruby/object:Gem::Version
|
|
285
|
-
version: '
|
|
355
|
+
version: '1'
|
|
286
356
|
type: :development
|
|
287
357
|
prerelease: false
|
|
288
358
|
version_requirements: !ruby/object:Gem::Requirement
|
|
289
359
|
requirements:
|
|
290
|
-
- - "
|
|
360
|
+
- - "~>"
|
|
291
361
|
- !ruby/object:Gem::Version
|
|
292
|
-
version: '
|
|
362
|
+
version: '1'
|
|
293
363
|
description: |
|
|
294
364
|
ls-trace is LightStep's fork of Datadog’s tracing client for Ruby. It
|
|
295
365
|
is used to trace requests as they flow across web servers, databases and
|
|
@@ -309,18 +379,25 @@ files:
|
|
|
309
379
|
- ".circleci/images/primary/Dockerfile-2.4.6"
|
|
310
380
|
- ".circleci/images/primary/Dockerfile-2.5.6"
|
|
311
381
|
- ".circleci/images/primary/Dockerfile-2.6.4"
|
|
382
|
+
- ".circleci/images/primary/Dockerfile-2.7.0"
|
|
383
|
+
- ".circleci/images/primary/Dockerfile-jruby-9.2"
|
|
312
384
|
- ".dockerignore"
|
|
313
385
|
- ".env"
|
|
314
386
|
- ".github/CODEOWNERS"
|
|
315
387
|
- ".gitignore"
|
|
388
|
+
- ".gitlab-ci.yml"
|
|
316
389
|
- ".rspec"
|
|
317
390
|
- ".rubocop.yml"
|
|
391
|
+
- ".simplecov"
|
|
318
392
|
- ".yardopts"
|
|
319
393
|
- Appraisals
|
|
320
394
|
- CHANGELOG.md
|
|
321
395
|
- CONTRIBUTING.md
|
|
322
396
|
- Gemfile
|
|
323
397
|
- LICENSE
|
|
398
|
+
- LICENSE.Apache
|
|
399
|
+
- LICENSE.BSD3
|
|
400
|
+
- NOTICE
|
|
324
401
|
- README.md
|
|
325
402
|
- Rakefile
|
|
326
403
|
- benchmarks/postgres_database.yml
|
|
@@ -336,8 +413,10 @@ files:
|
|
|
336
413
|
- lib/ddtrace/augmentation/method_wrapping.rb
|
|
337
414
|
- lib/ddtrace/augmentation/shim.rb
|
|
338
415
|
- lib/ddtrace/buffer.rb
|
|
416
|
+
- lib/ddtrace/chunker.rb
|
|
339
417
|
- lib/ddtrace/configuration.rb
|
|
340
418
|
- lib/ddtrace/configuration/base.rb
|
|
419
|
+
- lib/ddtrace/configuration/components.rb
|
|
341
420
|
- lib/ddtrace/configuration/dependency_resolver.rb
|
|
342
421
|
- lib/ddtrace/configuration/option.rb
|
|
343
422
|
- lib/ddtrace/configuration/option_definition.rb
|
|
@@ -348,6 +427,17 @@ files:
|
|
|
348
427
|
- lib/ddtrace/configuration/settings.rb
|
|
349
428
|
- lib/ddtrace/context.rb
|
|
350
429
|
- lib/ddtrace/context_flush.rb
|
|
430
|
+
- lib/ddtrace/context_provider.rb
|
|
431
|
+
- lib/ddtrace/contrib/action_cable/configuration/settings.rb
|
|
432
|
+
- lib/ddtrace/contrib/action_cable/event.rb
|
|
433
|
+
- lib/ddtrace/contrib/action_cable/events.rb
|
|
434
|
+
- lib/ddtrace/contrib/action_cable/events/broadcast.rb
|
|
435
|
+
- lib/ddtrace/contrib/action_cable/events/perform_action.rb
|
|
436
|
+
- lib/ddtrace/contrib/action_cable/events/transmit.rb
|
|
437
|
+
- lib/ddtrace/contrib/action_cable/ext.rb
|
|
438
|
+
- lib/ddtrace/contrib/action_cable/instrumentation.rb
|
|
439
|
+
- lib/ddtrace/contrib/action_cable/integration.rb
|
|
440
|
+
- lib/ddtrace/contrib/action_cable/patcher.rb
|
|
351
441
|
- lib/ddtrace/contrib/action_pack/action_controller/instrumentation.rb
|
|
352
442
|
- lib/ddtrace/contrib/action_pack/action_controller/patcher.rb
|
|
353
443
|
- lib/ddtrace/contrib/action_pack/configuration/settings.rb
|
|
@@ -356,6 +446,10 @@ files:
|
|
|
356
446
|
- lib/ddtrace/contrib/action_pack/patcher.rb
|
|
357
447
|
- lib/ddtrace/contrib/action_pack/utils.rb
|
|
358
448
|
- lib/ddtrace/contrib/action_view/configuration/settings.rb
|
|
449
|
+
- lib/ddtrace/contrib/action_view/event.rb
|
|
450
|
+
- lib/ddtrace/contrib/action_view/events.rb
|
|
451
|
+
- lib/ddtrace/contrib/action_view/events/render_partial.rb
|
|
452
|
+
- lib/ddtrace/contrib/action_view/events/render_template.rb
|
|
359
453
|
- lib/ddtrace/contrib/action_view/ext.rb
|
|
360
454
|
- lib/ddtrace/contrib/action_view/instrumentation/partial_renderer.rb
|
|
361
455
|
- lib/ddtrace/contrib/action_view/instrumentation/template_renderer.rb
|
|
@@ -406,6 +500,7 @@ files:
|
|
|
406
500
|
- lib/ddtrace/contrib/concurrent_ruby/patcher.rb
|
|
407
501
|
- lib/ddtrace/contrib/configurable.rb
|
|
408
502
|
- lib/ddtrace/contrib/configuration/resolver.rb
|
|
503
|
+
- lib/ddtrace/contrib/configuration/resolvers/pattern_resolver.rb
|
|
409
504
|
- lib/ddtrace/contrib/configuration/settings.rb
|
|
410
505
|
- lib/ddtrace/contrib/dalli/configuration/settings.rb
|
|
411
506
|
- lib/ddtrace/contrib/dalli/ext.rb
|
|
@@ -436,6 +531,7 @@ files:
|
|
|
436
531
|
- lib/ddtrace/contrib/excon/patcher.rb
|
|
437
532
|
- lib/ddtrace/contrib/extensions.rb
|
|
438
533
|
- lib/ddtrace/contrib/faraday/configuration/settings.rb
|
|
534
|
+
- lib/ddtrace/contrib/faraday/connection.rb
|
|
439
535
|
- lib/ddtrace/contrib/faraday/ext.rb
|
|
440
536
|
- lib/ddtrace/contrib/faraday/integration.rb
|
|
441
537
|
- lib/ddtrace/contrib/faraday/middleware.rb
|
|
@@ -465,7 +561,30 @@ files:
|
|
|
465
561
|
- lib/ddtrace/contrib/http/instrumentation.rb
|
|
466
562
|
- lib/ddtrace/contrib/http/integration.rb
|
|
467
563
|
- lib/ddtrace/contrib/http/patcher.rb
|
|
564
|
+
- lib/ddtrace/contrib/http_annotation_helper.rb
|
|
565
|
+
- lib/ddtrace/contrib/httprb/configuration/settings.rb
|
|
566
|
+
- lib/ddtrace/contrib/httprb/ext.rb
|
|
567
|
+
- lib/ddtrace/contrib/httprb/instrumentation.rb
|
|
568
|
+
- lib/ddtrace/contrib/httprb/integration.rb
|
|
569
|
+
- lib/ddtrace/contrib/httprb/patcher.rb
|
|
468
570
|
- lib/ddtrace/contrib/integration.rb
|
|
571
|
+
- lib/ddtrace/contrib/kafka/configuration/settings.rb
|
|
572
|
+
- lib/ddtrace/contrib/kafka/consumer_event.rb
|
|
573
|
+
- lib/ddtrace/contrib/kafka/consumer_group_event.rb
|
|
574
|
+
- lib/ddtrace/contrib/kafka/event.rb
|
|
575
|
+
- lib/ddtrace/contrib/kafka/events.rb
|
|
576
|
+
- lib/ddtrace/contrib/kafka/events/connection/request.rb
|
|
577
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_batch.rb
|
|
578
|
+
- lib/ddtrace/contrib/kafka/events/consumer/process_message.rb
|
|
579
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/heartbeat.rb
|
|
580
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/join_group.rb
|
|
581
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/leave_group.rb
|
|
582
|
+
- lib/ddtrace/contrib/kafka/events/consumer_group/sync_group.rb
|
|
583
|
+
- lib/ddtrace/contrib/kafka/events/produce_operation/send_messages.rb
|
|
584
|
+
- lib/ddtrace/contrib/kafka/events/producer/deliver_messages.rb
|
|
585
|
+
- lib/ddtrace/contrib/kafka/ext.rb
|
|
586
|
+
- lib/ddtrace/contrib/kafka/integration.rb
|
|
587
|
+
- lib/ddtrace/contrib/kafka/patcher.rb
|
|
469
588
|
- lib/ddtrace/contrib/mongodb/configuration/settings.rb
|
|
470
589
|
- lib/ddtrace/contrib/mongodb/ext.rb
|
|
471
590
|
- lib/ddtrace/contrib/mongodb/instrumentation.rb
|
|
@@ -480,10 +599,21 @@ files:
|
|
|
480
599
|
- lib/ddtrace/contrib/mysql2/patcher.rb
|
|
481
600
|
- lib/ddtrace/contrib/patchable.rb
|
|
482
601
|
- lib/ddtrace/contrib/patcher.rb
|
|
602
|
+
- lib/ddtrace/contrib/presto/configuration/settings.rb
|
|
603
|
+
- lib/ddtrace/contrib/presto/ext.rb
|
|
604
|
+
- lib/ddtrace/contrib/presto/instrumentation.rb
|
|
605
|
+
- lib/ddtrace/contrib/presto/integration.rb
|
|
606
|
+
- lib/ddtrace/contrib/presto/patcher.rb
|
|
607
|
+
- lib/ddtrace/contrib/que/configuration/settings.rb
|
|
608
|
+
- lib/ddtrace/contrib/que/ext.rb
|
|
609
|
+
- lib/ddtrace/contrib/que/integration.rb
|
|
610
|
+
- lib/ddtrace/contrib/que/patcher.rb
|
|
611
|
+
- lib/ddtrace/contrib/que/tracer.rb
|
|
483
612
|
- lib/ddtrace/contrib/racecar/configuration/settings.rb
|
|
484
613
|
- lib/ddtrace/contrib/racecar/event.rb
|
|
485
614
|
- lib/ddtrace/contrib/racecar/events.rb
|
|
486
615
|
- lib/ddtrace/contrib/racecar/events/batch.rb
|
|
616
|
+
- lib/ddtrace/contrib/racecar/events/consume.rb
|
|
487
617
|
- lib/ddtrace/contrib/racecar/events/message.rb
|
|
488
618
|
- lib/ddtrace/contrib/racecar/ext.rb
|
|
489
619
|
- lib/ddtrace/contrib/racecar/integration.rb
|
|
@@ -498,6 +628,7 @@ files:
|
|
|
498
628
|
- lib/ddtrace/contrib/rails/ext.rb
|
|
499
629
|
- lib/ddtrace/contrib/rails/framework.rb
|
|
500
630
|
- lib/ddtrace/contrib/rails/integration.rb
|
|
631
|
+
- lib/ddtrace/contrib/rails/log_injection.rb
|
|
501
632
|
- lib/ddtrace/contrib/rails/middlewares.rb
|
|
502
633
|
- lib/ddtrace/contrib/rails/patcher.rb
|
|
503
634
|
- lib/ddtrace/contrib/rails/railtie.rb
|
|
@@ -507,12 +638,14 @@ files:
|
|
|
507
638
|
- lib/ddtrace/contrib/rake/instrumentation.rb
|
|
508
639
|
- lib/ddtrace/contrib/rake/integration.rb
|
|
509
640
|
- lib/ddtrace/contrib/rake/patcher.rb
|
|
641
|
+
- lib/ddtrace/contrib/redis/configuration/resolver.rb
|
|
510
642
|
- lib/ddtrace/contrib/redis/configuration/settings.rb
|
|
511
643
|
- lib/ddtrace/contrib/redis/ext.rb
|
|
512
644
|
- lib/ddtrace/contrib/redis/integration.rb
|
|
513
645
|
- lib/ddtrace/contrib/redis/patcher.rb
|
|
514
646
|
- lib/ddtrace/contrib/redis/quantize.rb
|
|
515
647
|
- lib/ddtrace/contrib/redis/tags.rb
|
|
648
|
+
- lib/ddtrace/contrib/redis/vendor/resolver.rb
|
|
516
649
|
- lib/ddtrace/contrib/registerable.rb
|
|
517
650
|
- lib/ddtrace/contrib/registry.rb
|
|
518
651
|
- lib/ddtrace/contrib/resque/configuration/settings.rb
|
|
@@ -552,6 +685,11 @@ files:
|
|
|
552
685
|
- lib/ddtrace/contrib/sinatra/patcher.rb
|
|
553
686
|
- lib/ddtrace/contrib/sinatra/tracer.rb
|
|
554
687
|
- lib/ddtrace/contrib/sinatra/tracer_middleware.rb
|
|
688
|
+
- lib/ddtrace/contrib/sneakers/configuration/settings.rb
|
|
689
|
+
- lib/ddtrace/contrib/sneakers/ext.rb
|
|
690
|
+
- lib/ddtrace/contrib/sneakers/integration.rb
|
|
691
|
+
- lib/ddtrace/contrib/sneakers/patcher.rb
|
|
692
|
+
- lib/ddtrace/contrib/sneakers/tracer.rb
|
|
555
693
|
- lib/ddtrace/contrib/sucker_punch/configuration/settings.rb
|
|
556
694
|
- lib/ddtrace/contrib/sucker_punch/exception_handler.rb
|
|
557
695
|
- lib/ddtrace/contrib/sucker_punch/ext.rb
|
|
@@ -559,6 +697,7 @@ files:
|
|
|
559
697
|
- lib/ddtrace/contrib/sucker_punch/integration.rb
|
|
560
698
|
- lib/ddtrace/contrib/sucker_punch/patcher.rb
|
|
561
699
|
- lib/ddtrace/correlation.rb
|
|
700
|
+
- lib/ddtrace/diagnostics/environment_logger.rb
|
|
562
701
|
- lib/ddtrace/diagnostics/health.rb
|
|
563
702
|
- lib/ddtrace/distributed_tracing/headers/b3.rb
|
|
564
703
|
- lib/ddtrace/distributed_tracing/headers/b3_single.rb
|
|
@@ -568,10 +707,13 @@ files:
|
|
|
568
707
|
- lib/ddtrace/encoding.rb
|
|
569
708
|
- lib/ddtrace/environment.rb
|
|
570
709
|
- lib/ddtrace/error.rb
|
|
710
|
+
- lib/ddtrace/event.rb
|
|
571
711
|
- lib/ddtrace/ext/analytics.rb
|
|
572
712
|
- lib/ddtrace/ext/app_types.rb
|
|
713
|
+
- lib/ddtrace/ext/correlation.rb
|
|
573
714
|
- lib/ddtrace/ext/diagnostics.rb
|
|
574
715
|
- lib/ddtrace/ext/distributed.rb
|
|
716
|
+
- lib/ddtrace/ext/environment.rb
|
|
575
717
|
- lib/ddtrace/ext/errors.rb
|
|
576
718
|
- lib/ddtrace/ext/forced_tracing.rb
|
|
577
719
|
- lib/ddtrace/ext/http.rb
|
|
@@ -580,12 +722,15 @@ files:
|
|
|
580
722
|
- lib/ddtrace/ext/net.rb
|
|
581
723
|
- lib/ddtrace/ext/priority.rb
|
|
582
724
|
- lib/ddtrace/ext/runtime.rb
|
|
725
|
+
- lib/ddtrace/ext/sampling.rb
|
|
583
726
|
- lib/ddtrace/ext/sql.rb
|
|
584
727
|
- lib/ddtrace/ext/transport.rb
|
|
585
728
|
- lib/ddtrace/forced_tracing.rb
|
|
586
729
|
- lib/ddtrace/logger.rb
|
|
587
730
|
- lib/ddtrace/metrics.rb
|
|
588
731
|
- lib/ddtrace/monkey.rb
|
|
732
|
+
- lib/ddtrace/opentelemetry/extensions.rb
|
|
733
|
+
- lib/ddtrace/opentelemetry/span.rb
|
|
589
734
|
- lib/ddtrace/opentracer.rb
|
|
590
735
|
- lib/ddtrace/opentracer/binary_propagator.rb
|
|
591
736
|
- lib/ddtrace/opentracer/carrier.rb
|
|
@@ -609,7 +754,6 @@ files:
|
|
|
609
754
|
- lib/ddtrace/pipeline/span_processor.rb
|
|
610
755
|
- lib/ddtrace/propagation/grpc_propagator.rb
|
|
611
756
|
- lib/ddtrace/propagation/http_propagator.rb
|
|
612
|
-
- lib/ddtrace/provider.rb
|
|
613
757
|
- lib/ddtrace/quantization/hash.rb
|
|
614
758
|
- lib/ddtrace/quantization/http.rb
|
|
615
759
|
- lib/ddtrace/runtime/cgroup.rb
|
|
@@ -622,6 +766,11 @@ files:
|
|
|
622
766
|
- lib/ddtrace/runtime/socket.rb
|
|
623
767
|
- lib/ddtrace/runtime/thread_count.rb
|
|
624
768
|
- lib/ddtrace/sampler.rb
|
|
769
|
+
- lib/ddtrace/sampling.rb
|
|
770
|
+
- lib/ddtrace/sampling/matcher.rb
|
|
771
|
+
- lib/ddtrace/sampling/rate_limiter.rb
|
|
772
|
+
- lib/ddtrace/sampling/rule.rb
|
|
773
|
+
- lib/ddtrace/sampling/rule_sampler.rb
|
|
625
774
|
- lib/ddtrace/span.rb
|
|
626
775
|
- lib/ddtrace/sync_writer.rb
|
|
627
776
|
- lib/ddtrace/tracer.rb
|
|
@@ -642,6 +791,10 @@ files:
|
|
|
642
791
|
- lib/ddtrace/transport/http/response.rb
|
|
643
792
|
- lib/ddtrace/transport/http/statistics.rb
|
|
644
793
|
- lib/ddtrace/transport/http/traces.rb
|
|
794
|
+
- lib/ddtrace/transport/io.rb
|
|
795
|
+
- lib/ddtrace/transport/io/client.rb
|
|
796
|
+
- lib/ddtrace/transport/io/response.rb
|
|
797
|
+
- lib/ddtrace/transport/io/traces.rb
|
|
645
798
|
- lib/ddtrace/transport/parcel.rb
|
|
646
799
|
- lib/ddtrace/transport/request.rb
|
|
647
800
|
- lib/ddtrace/transport/response.rb
|
|
@@ -652,7 +805,14 @@ files:
|
|
|
652
805
|
- lib/ddtrace/utils/time.rb
|
|
653
806
|
- lib/ddtrace/vendor/active_record/connection_specification.rb
|
|
654
807
|
- lib/ddtrace/version.rb
|
|
808
|
+
- lib/ddtrace/worker.rb
|
|
655
809
|
- lib/ddtrace/workers.rb
|
|
810
|
+
- lib/ddtrace/workers/async.rb
|
|
811
|
+
- lib/ddtrace/workers/loop.rb
|
|
812
|
+
- lib/ddtrace/workers/polling.rb
|
|
813
|
+
- lib/ddtrace/workers/queue.rb
|
|
814
|
+
- lib/ddtrace/workers/runtime_metrics.rb
|
|
815
|
+
- lib/ddtrace/workers/trace_writer.rb
|
|
656
816
|
- lib/ddtrace/writer.rb
|
|
657
817
|
- lib/ls-trace.rb
|
|
658
818
|
- tasks/release_gem.rake
|
|
@@ -661,7 +821,7 @@ licenses:
|
|
|
661
821
|
- BSD-3-Clause
|
|
662
822
|
metadata:
|
|
663
823
|
allowed_push_host: https://rubygems.org
|
|
664
|
-
post_install_message:
|
|
824
|
+
post_install_message:
|
|
665
825
|
rdoc_options: []
|
|
666
826
|
require_paths:
|
|
667
827
|
- lib
|
|
@@ -674,10 +834,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
674
834
|
requirements:
|
|
675
835
|
- - ">="
|
|
676
836
|
- !ruby/object:Gem::Version
|
|
677
|
-
version:
|
|
837
|
+
version: 2.0.0
|
|
678
838
|
requirements: []
|
|
679
839
|
rubygems_version: 3.0.3
|
|
680
|
-
signing_key:
|
|
840
|
+
signing_key:
|
|
681
841
|
specification_version: 4
|
|
682
842
|
summary: LightStep fork of dd-trace for tracing code for your Ruby applications
|
|
683
843
|
test_files: []
|