From fb2a8afe5d02074442a7fb08ae44f18e53e6aec3 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Mon, 21 Jun 2021 15:22:00 +0100 Subject: [PATCH 01/10] Extract reading of trace identifiers to helper This refactor will enable us to support getting the trace identifiers from more than just datadog traces without adding yet more logic to the stack collector. --- lib/ddtrace/profiling/collectors/stack.rb | 15 +-- .../profiling/trace_identifiers/ddtrace.rb | 41 ++++++ .../profiling/trace_identifiers/helper.rb | 29 +++++ .../profiling/collectors/stack_spec.rb | 117 ++++++------------ .../trace_identifiers/ddtrace_spec.rb | 68 ++++++++++ .../trace_identifiers/helper_spec.rb | 52 ++++++++ 6 files changed, 229 insertions(+), 93 deletions(-) create mode 100644 lib/ddtrace/profiling/trace_identifiers/ddtrace.rb create mode 100644 lib/ddtrace/profiling/trace_identifiers/helper.rb create mode 100644 spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb create mode 100644 spec/ddtrace/profiling/trace_identifiers/helper_spec.rb diff --git a/lib/ddtrace/profiling/collectors/stack.rb b/lib/ddtrace/profiling/collectors/stack.rb index 1c86462e884..dc927588719 100644 --- a/lib/ddtrace/profiling/collectors/stack.rb +++ b/lib/ddtrace/profiling/collectors/stack.rb @@ -1,4 +1,5 @@ require 'ddtrace/profiling/backtrace_location' +require 'ddtrace/profiling/trace_identifiers/helper' require 'ddtrace/profiling/events/stack' require 'ddtrace/utils/only_once' require 'ddtrace/utils/time' @@ -11,7 +12,6 @@ module Collectors # Collects stack trace samples from Ruby threads for both CPU-time (if available) and wall-clock. # Runs on its own background thread. # - # rubocop:disable Metrics/ClassLength class Stack < Worker include Workers::Polling @@ -32,6 +32,7 @@ def initialize( ignore_thread: nil, max_time_usage_pct: DEFAULT_MAX_TIME_USAGE_PCT, thread_api: Thread, + trace_identifiers_helper: Datadog::Profiling::TraceIdentifiers::Helper.new, fork_policy: Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default interval: MIN_INTERVAL, enabled: true @@ -41,6 +42,7 @@ def initialize( @ignore_thread = ignore_thread @max_time_usage_pct = max_time_usage_pct @thread_api = thread_api + @trace_identifiers_helper = trace_identifiers_helper # Workers::Async::Thread settings self.fork_policy = fork_policy @@ -123,7 +125,7 @@ def collect_thread_event(thread, wall_time_interval_ns) locations = convert_backtrace_locations(locations) thread_id = thread.respond_to?(:pthread_thread_id) ? thread.pthread_thread_id : thread.object_id - trace_id, span_id = get_trace_identifiers(thread) + trace_id, span_id = @trace_identifiers_helper.trace_identifiers_for(thread) cpu_time = get_cpu_time_interval!(thread) Events::StackSample.new( @@ -162,14 +164,6 @@ def get_cpu_time_interval!(thread) interval end - def get_trace_identifiers(thread) - return unless thread.is_a?(::Thread) - return unless Datadog.respond_to?(:tracer) && Datadog.tracer.respond_to?(:active_correlation) - - identifier = Datadog.tracer.active_correlation(thread) - [identifier.trace_id, identifier.span_id] - end - def compute_wait_time(used_time) # We took used_time to get the last sample. # @@ -256,7 +250,6 @@ def reset_cpu_time_tracking end end end - # rubocop:enable Metrics/ClassLength end end end diff --git a/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb new file mode 100644 index 00000000000..fe29adec38b --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module Datadog + module Profiling + module TraceIdentifiers + # Used by Datadog::Profiling::TraceIdentifiers::Helper to get the trace identifiers (trace id and span id) for a + # given thread, if there is an active trace for that thread in Datadog.tracer. + class Ddtrace + def initialize(tracer: nil) + @tracer = tracer + end + + def trace_identifiers_for(thread) + current_tracer = tracer + return unless current_tracer + + correlation = current_tracer.active_correlation(thread) + trace_id = correlation.trace_id + span_id = correlation.span_id + + [trace_id, span_id] if trace_id && trace_id != 0 && span_id && span_id != 0 + end + + private + + def tracer + return @tracer if @tracer + + # NOTE: Because the profiler may start working concurrently with tracer initialization, + # we need to be defensive here. + return unless Datadog.respond_to?(:tracer) + + tracer = Datadog.tracer + return unless tracer.respond_to?(:active_correlation) + + @tracer = tracer + end + end + end + end +end diff --git a/lib/ddtrace/profiling/trace_identifiers/helper.rb b/lib/ddtrace/profiling/trace_identifiers/helper.rb new file mode 100644 index 00000000000..2d76b6c6966 --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/helper.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'ddtrace/profiling/trace_identifiers/ddtrace' + +module Datadog + module Profiling + module TraceIdentifiers + # Helper used to retrieve the trace identifiers (trace id and span id) for a given thread, + # if there is an active trace for that thread for the supported tracing APIs. + # + # This data is used to connect profiles to the traces -- samples in a profile will be tagged with this data and + # the profile can be filtered down to look at only the samples for a given trace. + class Helper + def initialize(supported_apis: [::Datadog::Profiling::TraceIdentifiers::Ddtrace.new]) + @supported_apis = supported_apis + end + + def trace_identifiers_for(thread) + @supported_apis.each do |api| + trace_identifiers = api.trace_identifiers_for(thread) + return trace_identifiers unless trace_identifiers.nil? + end + + nil + end + end + end + end +end diff --git a/spec/ddtrace/profiling/collectors/stack_spec.rb b/spec/ddtrace/profiling/collectors/stack_spec.rb index edb46076bb7..a7321e17387 100644 --- a/spec/ddtrace/profiling/collectors/stack_spec.rb +++ b/spec/ddtrace/profiling/collectors/stack_spec.rb @@ -2,18 +2,21 @@ require 'ddtrace/profiling/spec_helper' require 'ddtrace/profiling/collectors/stack' +require 'ddtrace/profiling/trace_identifiers/helper' require 'ddtrace/profiling/recorder' RSpec.describe Datadog::Profiling::Collectors::Stack do subject(:collector) { described_class.new(recorder, **options) } let(:recorder) { instance_double(Datadog::Profiling::Recorder) } - let(:options) { { max_frames: 50 } } + let(:options) { { max_frames: 50, trace_identifiers_helper: trace_identifiers_helper } } let(:buffer) { instance_double(Datadog::Profiling::Buffer) } let(:string_table) { Datadog::Utils::StringTable.new } let(:backtrace_location_cache) { Datadog::Utils::ObjectSet.new } - let(:correlation) { instance_double(Datadog::Correlation::Identifier, trace_id: 0, span_id: 0) } + let(:trace_identifiers_helper) do + instance_double(Datadog::Profiling::TraceIdentifiers::Helper, trace_identifiers_for: nil) + end before do allow(recorder) @@ -29,12 +32,6 @@ .to receive(:cache) .with(:backtrace_locations) .and_return(backtrace_location_cache) - - if Datadog.respond_to?(:tracer) - allow(Datadog.tracer) - .to receive(:active_correlation) - .and_return(correlation) - end end describe '::new' do @@ -285,9 +282,39 @@ let(:base_label) { double('base_label') } let(:lineno) { double('lineno') } let(:path) { double('path') } + let(:trace_identifiers) { nil } let(:backtrace_size) { collector.max_frames } + before do + expect(trace_identifiers_helper).to receive(:trace_identifiers_for).with(thread).and_return(trace_identifiers) + end + + context 'and there is an active trace for the thread' do + let(:trace_identifiers) { [trace_id, span_id] } + + let(:trace_id) { rand(1e12) } + let(:span_id) { rand(1e12) } + + it 'builds an event including the trace id and span id' do + is_expected.to have_attributes( + trace_id: trace_id, + span_id: span_id + ) + end + end + + context 'and there is no active trace for the thread' do + let(:trace_identifiers) { nil } + + it 'builds an event with nil trace id and span id' do + is_expected.to have_attributes( + trace_id: nil, + span_id: nil + ) + end + end + context 'and CPU timing is unavailable' do it 'builds an event without CPU time' do is_expected.to be_a_kind_of(Datadog::Profiling::Events::StackSample) @@ -509,80 +536,6 @@ end end - describe '#get_trace_identifiers' do - subject(:get_trace_identifiers) { collector.get_trace_identifiers(thread) } - - let(:thread) { Thread.new {} } - - after do - thread && thread.join - end - - context 'given a non-thread' do - let(:thread) { nil } - - it { is_expected.to be nil } - end - - context 'when linking is unavailable' do - context 'because the tracer is unavailable' do - let(:datadog) { Module.new { const_set('Utils', Datadog::Utils) } } - - before { stub_const('Datadog', datadog, transfer_nested_constant: true) } - - it { is_expected.to be nil } - end - - context 'because correlations are unavailable' do - let(:tracer) { instance_double(Datadog::Tracer) } - - before { allow(Datadog).to receive(:tracer).and_return(tracer) } - - it { is_expected.to be nil } - end - end - - context 'when linking is available' do - context 'and the trace & span IDs are' do - context 'set' do - let(:correlation) do - instance_double( - Datadog::Correlation::Identifier, - trace_id: rand(1e12), - span_id: rand(1e12) - ) - end - - it { is_expected.to eq([correlation.trace_id, correlation.span_id]) } - end - - context '0' do - let(:correlation) do - instance_double( - Datadog::Correlation::Identifier, - trace_id: 0, - span_id: 0 - ) - end - - it { is_expected.to eq([0, 0]) } - end - - context 'are nil' do - let(:correlation) do - instance_double( - Datadog::Correlation::Identifier, - trace_id: nil, - span_id: nil - ) - end - - it { is_expected.to eq([nil, nil]) } - end - end - end - end - describe '#compute_wait_time' do subject(:compute_wait_time) { collector.compute_wait_time(used_time) } diff --git a/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb b/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb new file mode 100644 index 00000000000..01a855d36ff --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb @@ -0,0 +1,68 @@ +require 'ddtrace/profiling/trace_identifiers/ddtrace' + +require 'ddtrace/correlation' +require 'ddtrace/tracer' + +RSpec.describe Datadog::Profiling::TraceIdentifiers::Ddtrace do + let(:thread) { instance_double(Thread) } + let(:tracer) { instance_double(Datadog::Tracer) } + + subject(:datadog_trace_identifiers) { described_class.new(tracer: tracer) } + + describe '#trace_identifiers_for' do + subject(:trace_identifiers_for) { datadog_trace_identifiers.trace_identifiers_for(thread) } + + context 'when there is an active datadog trace for the thread' do + let(:trace_id) { rand(1e12) } + let(:span_id) { rand(1e12) } + + before do + expect(tracer) + .to receive(:active_correlation) + .with(thread) + .and_return(Datadog::Correlation::Identifier.new(trace_id, span_id)) + end + + it 'returns the identifiers' do + trace_identifiers_for + + expect(trace_identifiers_for).to eq [trace_id, span_id] + end + end + + context 'when there is no active datadog trace for the thread' do + before do + expect(tracer) + .to receive(:active_correlation) + .with(thread) + .and_return(Datadog::Correlation::Identifier.new) + end + + it do + expect(trace_identifiers_for).to be nil + end + end + + context 'when no tracer instance is available' do + let(:tracer) { nil } + + context 'because the tracer is unavailable' do + let(:datadog) { Module.new { const_set('Utils', Datadog::Utils) } } + + before { stub_const('Datadog', datadog, transfer_nested_constant: true) } + + it do + expect(trace_identifiers_for).to be nil + end + end + + context 'because correlations are unavailable' do + before { allow(Datadog).to receive(:tracer).and_return(instance_double(Datadog::Tracer)) } + + it do + expect(trace_identifiers_for).to be nil + end + end + end + end +end diff --git a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb new file mode 100644 index 00000000000..20b6bf924ff --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb @@ -0,0 +1,52 @@ +require 'ddtrace/profiling/trace_identifiers/helper' +require 'ddtrace/profiling/trace_identifiers/ddtrace' + +RSpec.describe Datadog::Profiling::TraceIdentifiers::Helper do + let(:thread) { instance_double(Thread) } + let(:api1) { instance_double(Datadog::Profiling::TraceIdentifiers::Ddtrace, 'api1') } + let(:api2) { instance_double(Datadog::Profiling::TraceIdentifiers::Ddtrace, 'api2') } + + subject(:trace_identifiers_helper) { described_class.new(supported_apis: [api1, api2]) } + + describe '#trace_identifiers_for' do + subject(:trace_identifiers_for) { trace_identifiers_helper.trace_identifiers_for(thread) } + + context 'when the first api provider returns trace identifiers' do + before do + allow(api1).to receive(:trace_identifiers_for).and_return([:api1_trace_id, :api1_span_id]) + end + + it 'returns the first api provider trace identifiers' do + expect(trace_identifiers_for).to eq [:api1_trace_id, :api1_span_id] + end + + it 'does not attempt to read trace identifiers from the second api provider' do + expect(api2).to_not receive(:trace_identifiers_for) + + trace_identifiers_for + end + end + + context 'when the first api provider does not return trace identifiers, but the second one does' do + before do + allow(api1).to receive(:trace_identifiers_for).and_return(nil) + allow(api2).to receive(:trace_identifiers_for).and_return([:api2_trace_id, :api2_span_id]) + end + + it 'returns the second api provider trace identifiers' do + expect(trace_identifiers_for).to eq [:api2_trace_id, :api2_span_id] + end + end + + context 'when no api providers return trace identifiers' do + before do + allow(api1).to receive(:trace_identifiers_for).and_return(nil) + allow(api2).to receive(:trace_identifiers_for).and_return(nil) + end + + it do + expect(trace_identifiers_for).to be nil + end + end + end +end From 6492eb93e88145938423f6254b8deab9e5d54652 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Tue, 22 Jun 2021 14:17:03 +0100 Subject: [PATCH 02/10] Add support for tagging profiles with opentelemetry trace identifiers We are now able to gather the trace identifiers from ongoing traces being done with the opentelemetry gems. Priority is still given to ddtrace traces, and we also take care to impact users that do not use opentelemetry. NOTE: I'm somewhat unsure about adding `opentelemetry-api` to the `Gemfile` vs adding it as an appraisal. All our current appraisals seem to be for tracing integrations, which is not the case, and we do already have an "opentelemetry" rake task that existed so it may be confusing to have it changed into an appraisal (or to have two) so I took the simplest route. Suggestions welcome! --- Gemfile | 1 + .../profiling/trace_identifiers/helper.rb | 9 +- .../trace_identifiers/opentelemetry.rb | 59 ++++++++++ .../trace_identifiers/helper_spec.rb | 10 ++ .../trace_identifiers/opentelemetry_spec.rb | 102 ++++++++++++++++++ 5 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb create mode 100644 spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb diff --git a/Gemfile b/Gemfile index 0cc1e2ce361..8cab16581f1 100644 --- a/Gemfile +++ b/Gemfile @@ -60,6 +60,7 @@ end # TODO: Move this to Appraisals? gem 'dogstatsd-ruby', '< 5.0' gem 'opentracing', '>= 0.4.1' +gem 'opentelemetry-api', '>= 0.17.0' if RUBY_VERSION >= '2.5.0' # Profiler optional dependencies # NOTE: We're excluding versions 3.7.0 and 3.7.1 for the reasons documented in #1424 and the big comment in diff --git a/lib/ddtrace/profiling/trace_identifiers/helper.rb b/lib/ddtrace/profiling/trace_identifiers/helper.rb index 2d76b6c6966..2134c5fb094 100644 --- a/lib/ddtrace/profiling/trace_identifiers/helper.rb +++ b/lib/ddtrace/profiling/trace_identifiers/helper.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require 'ddtrace/profiling/trace_identifiers/ddtrace' +require 'ddtrace/profiling/trace_identifiers/opentelemetry' module Datadog module Profiling @@ -11,7 +12,13 @@ module TraceIdentifiers # This data is used to connect profiles to the traces -- samples in a profile will be tagged with this data and # the profile can be filtered down to look at only the samples for a given trace. class Helper - def initialize(supported_apis: [::Datadog::Profiling::TraceIdentifiers::Ddtrace.new]) + DEFAULT_SUPPORTED_APIS = [ + ::Datadog::Profiling::TraceIdentifiers::Ddtrace, + ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry, + ].freeze + private_constant :DEFAULT_SUPPORTED_APIS + + def initialize(supported_apis: DEFAULT_SUPPORTED_APIS.map(&:new)) @supported_apis = supported_apis end diff --git a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb new file mode 100644 index 00000000000..a5bf070ec1f --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Datadog + module Profiling + module TraceIdentifiers + class OpenTelemetry + def initialize + @available = false + end + + def trace_identifiers_for(thread) + return unless available? + + span = ::OpenTelemetry::Trace.current_span(thread[::OpenTelemetry::Context::KEY]) + + if span && span != ::OpenTelemetry::Trace::Span::INVALID + context = span.context + [ + binary_8_byte_string_to_i(trace_id_to_datadog(context.trace_id)), + binary_8_byte_string_to_i(context.span_id) + ] + end + end + + private + + def available? + return true if @available + + if defined?(::OpenTelemetry) + # Because the profiler can start quite early in the application boot process, it's possible for us to + # observe the OpenTelemetry module, but still be in a situation where the full opentelemetry gem has not + # finished being require'd. + # + # To solve this, we use a require which forces a synchronization point -- this require will not return + # until the gem is fully loaded. + require 'opentelemetry-api' + @available = true + end + + @available + end + + def binary_8_byte_string_to_i(string) + string.unpack1("Q>") + end + + def trace_id_to_datadog(trace_id) + # Datadog converts opentelemetry 16 byte / 128 bit ids to 8 byte / 64 bit ids by dropping the leading 8 bytes, + # see also + # * https://github.com/DataDog/dd-trace-rb/blob/e63e65f19887d011cd957f7e58361f4af0df2050/lib/ddtrace/distributed_tracing/headers/helpers.rb#L28-L31 + # * https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/9c7c329f0877f72befb36c61c47899d5a4525037/exporter/datadogexporter/translate_traces.go#L469 + # * https://github.com/open-telemetry/opentelemetry-specification/issues/525 + trace_id[8..16] + end + end + end + end +end diff --git a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb index 20b6bf924ff..5d3b6c2746e 100644 --- a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb @@ -1,5 +1,6 @@ require 'ddtrace/profiling/trace_identifiers/helper' require 'ddtrace/profiling/trace_identifiers/ddtrace' +require 'ddtrace/profiling/trace_identifiers/opentelemetry' RSpec.describe Datadog::Profiling::TraceIdentifiers::Helper do let(:thread) { instance_double(Thread) } @@ -8,6 +9,15 @@ subject(:trace_identifiers_helper) { described_class.new(supported_apis: [api1, api2]) } + describe '::DEFAULT_SUPPORTED_APIS' do + it 'contains the Datadog and OpenTelemetry trace identifiers' do + expect(described_class.const_get(:DEFAULT_SUPPORTED_APIS)).to eq([ + ::Datadog::Profiling::TraceIdentifiers::Ddtrace, + ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry, + ]) + end + end + describe '#trace_identifiers_for' do subject(:trace_identifiers_for) { trace_identifiers_helper.trace_identifiers_for(thread) } diff --git a/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb new file mode 100644 index 00000000000..ce95cce57d7 --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb @@ -0,0 +1,102 @@ +require 'ddtrace/profiling/trace_identifiers/opentelemetry' + +RSpec.describe Datadog::Profiling::TraceIdentifiers::OpenTelemetry do + before(:all) do + skip 'opentelemetry-api not supported on Ruby < 2.5' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5.0') + + require 'opentelemetry-api' + end + + let(:thread) { Thread.new { sleep } } + + subject(:opentelemetry_trace_identifiers) { described_class.new } + + after do + thread.kill + thread.join + end + + describe '#trace_identifiers_for' do + subject(:trace_identifiers_for) { opentelemetry_trace_identifiers.trace_identifiers_for(thread) } + + context 'when there is an active opentelemetry trace for the thread' do + let!(:thread) do + Thread.new(span_queue) do |span_queue| + OpenTelemetry.tracer_provider.tracer('ddtrace_testing', '1.2.3').in_span('test_span') do |span| + span_queue << span + sleep + end + end + end + let(:span_queue) { Queue.new } + + it 'returns the identifiers as a pair of 64 bit integers' do + span_context = span_queue.pop.context + + expect(trace_identifiers_for) + .to eq [span_context.hex_trace_id[16..-1].to_i(16), span_context.hex_span_id.to_i(16)] + end + end + + context 'when there there is no opentelemetry span (nil) for the thread' do + before do + allow(OpenTelemetry::Trace).to receive(:current_span).and_return(nil) + end + + it do + expect(trace_identifiers_for).to be nil + end + end + + context 'when there there is no opentelemetry span (invalid) for the thread' do + before do + allow(OpenTelemetry::Trace).to receive(:current_span).and_return(OpenTelemetry::Trace::Span::INVALID) + end + + it do + expect(trace_identifiers_for).to be nil + end + end + + context 'when opentelemetry-api gem is not available' do + let!(:original_opentelemetry) { ::OpenTelemetry } + + before do + hide_const('::OpenTelemetry') + end + + it do + expect(trace_identifiers_for).to be nil + end + + context 'but becomes available after the first call' do + let!(:thread) do + Thread.new(span_queue, start_trace_queue) do |span_queue, start_trace_queue| + start_trace_queue.pop # Wait until we're asked to start the trace + + OpenTelemetry.tracer_provider.tracer('ddtrace_testing', '1.2.3').in_span('test_span') do |span| + span_queue << span + sleep + end + end + end + let(:span_queue) { Queue.new } + let(:start_trace_queue) { Queue.new } + + it 'returns the trace identifiers' do + # first call has no identifiers + expect(trace_identifiers_for).to be nil + + # simulate OpenTelemetry becoming available + stub_const('::OpenTelemetry', original_opentelemetry) + + # allow and wait for trace to start + start_trace_queue << true + span_queue.pop.context + + expect(opentelemetry_trace_identifiers.trace_identifiers_for(thread)).to_not be nil + end + end + end + end +end From b3f8d28b2d03284cf500e21f8c3706afa9a4c078 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 09:49:10 +0100 Subject: [PATCH 03/10] Add minimum required version for opentelemetry support This avoids surprises if customers try to use an older version. --- Gemfile | 2 +- .../profiling/trace_identifiers/helper.rb | 2 +- .../trace_identifiers/opentelemetry.rb | 40 +++++++++++++++++-- .../trace_identifiers/helper_spec.rb | 6 +-- .../trace_identifiers/opentelemetry_spec.rb | 20 ++++++++++ 5 files changed, 60 insertions(+), 10 deletions(-) diff --git a/Gemfile b/Gemfile index 8cab16581f1..b7ad45061e4 100644 --- a/Gemfile +++ b/Gemfile @@ -59,8 +59,8 @@ end # Optional extensions # TODO: Move this to Appraisals? gem 'dogstatsd-ruby', '< 5.0' -gem 'opentracing', '>= 0.4.1' gem 'opentelemetry-api', '>= 0.17.0' if RUBY_VERSION >= '2.5.0' +gem 'opentracing', '>= 0.4.1' # Profiler optional dependencies # NOTE: We're excluding versions 3.7.0 and 3.7.1 for the reasons documented in #1424 and the big comment in diff --git a/lib/ddtrace/profiling/trace_identifiers/helper.rb b/lib/ddtrace/profiling/trace_identifiers/helper.rb index 2134c5fb094..ef7bfcad6a7 100644 --- a/lib/ddtrace/profiling/trace_identifiers/helper.rb +++ b/lib/ddtrace/profiling/trace_identifiers/helper.rb @@ -14,7 +14,7 @@ module TraceIdentifiers class Helper DEFAULT_SUPPORTED_APIS = [ ::Datadog::Profiling::TraceIdentifiers::Ddtrace, - ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry, + ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry ].freeze private_constant :DEFAULT_SUPPORTED_APIS diff --git a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb index a5bf070ec1f..0eace9ad9c0 100644 --- a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb +++ b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb @@ -1,11 +1,24 @@ # frozen_string_literal: true +require 'ddtrace/utils/only_once' + module Datadog module Profiling module TraceIdentifiers + # Used by Datadog::Profiling::TraceIdentifiers::Helper to get the trace identifiers (trace id and span id) for a + # given thread, if there is an active trace for that thread in the OpenTelemetry library. + # + # This class MUST be safe to instantiate and call even when the opentelemetry-api library is not installed. class OpenTelemetry + SUPPORTED_VERSIONS = Gem::Requirement.new('>= 0.17.0') + private_constant :SUPPORTED_VERSIONS + + UNSUPPORTED_VERSION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new + private_constant :UNSUPPORTED_VERSION_ONLY_ONCE + def initialize @available = false + @checked_version = false end def trace_identifiers_for(thread) @@ -25,9 +38,9 @@ def trace_identifiers_for(thread) private def available? - return true if @available + return false unless defined?(::OpenTelemetry) - if defined?(::OpenTelemetry) + unless @checked_version # Because the profiler can start quite early in the application boot process, it's possible for us to # observe the OpenTelemetry module, but still be in a situation where the full opentelemetry gem has not # finished being require'd. @@ -35,14 +48,15 @@ def available? # To solve this, we use a require which forces a synchronization point -- this require will not return # until the gem is fully loaded. require 'opentelemetry-api' - @available = true + @available = supported? + @checked_version = true end @available end def binary_8_byte_string_to_i(string) - string.unpack1("Q>") + string.unpack1('Q>') end def trace_id_to_datadog(trace_id) @@ -53,6 +67,24 @@ def trace_id_to_datadog(trace_id) # * https://github.com/open-telemetry/opentelemetry-specification/issues/525 trace_id[8..16] end + + def supported? + if defined?(::OpenTelemetry::VERSION) && + SUPPORTED_VERSIONS.satisfied_by?(Gem::Version.new(::OpenTelemetry::VERSION)) + true + else + UNSUPPORTED_VERSION_ONLY_ONCE.run do + Datadog.logger.warn( + 'Profiler: Incompatible version of opentelemetry-api detected; ' \ + "ensure you have opentelemetry-api #{SUPPORTED_VERSIONS} by adding " \ + "`gem 'opentelemetry-api', '#{SUPPORTED_VERSIONS}'` to your Gemfile or gems.rb file. " \ + 'Linking of OpenTelemetry traces to profiles will not be available. ' + ) + end + + false + end + end end end end diff --git a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb index 5d3b6c2746e..5b3df1efe2c 100644 --- a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb @@ -11,10 +11,8 @@ describe '::DEFAULT_SUPPORTED_APIS' do it 'contains the Datadog and OpenTelemetry trace identifiers' do - expect(described_class.const_get(:DEFAULT_SUPPORTED_APIS)).to eq([ - ::Datadog::Profiling::TraceIdentifiers::Ddtrace, - ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry, - ]) + expect(described_class.const_get(:DEFAULT_SUPPORTED_APIS)) + .to eq([::Datadog::Profiling::TraceIdentifiers::Ddtrace, ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry]) end end diff --git a/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb index ce95cce57d7..8ccab2bc78b 100644 --- a/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb @@ -58,6 +58,26 @@ end end + context 'when an unsupported version of the opentelemetry-api gem is loaded' do + before do + allow(Datadog.logger).to receive(:warn) + stub_const('::OpenTelemetry::VERSION', '0.16.0') + described_class.const_get('UNSUPPORTED_VERSION_ONLY_ONCE').send(:reset_ran_once_state_for_tests) + end + + it 'does not try to invoke the opentelemetry api' do + expect(OpenTelemetry::Trace).to_not receive(:current_span) + + trace_identifiers_for + end + + it 'logs a warning' do + expect(Datadog.logger).to receive(:warn).with(/Incompatible version of opentelemetry-api/) + + trace_identifiers_for + end + end + context 'when opentelemetry-api gem is not available' do let!(:original_opentelemetry) { ::OpenTelemetry } From b69015331bf5a91ef9f2929b6beef74b6c8b0365 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 11:05:59 +0100 Subject: [PATCH 04/10] Add link to Profiler troubleshooting docs --- docs/GettingStarted.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index e47ed2b57b4..59592679553 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -86,6 +86,8 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d - [For application runtime](#for-application-runtime) - [OpenTracing](#opentracing) - [Profiling](#profiling) + - [Troubleshooting](#troubleshooting) + - [Profiling Resque jobs](#profiling-resque-jobs) - [Known issues and suggested configurations](#known-issues-and-suggested-configurations) - [Payload too large](#payload-too-large) - [Stack level too deep](#stack-level-too-deep) @@ -2491,6 +2493,10 @@ However, additional instrumentation provided by Datadog can be activated alongsi To get started with profiling, follow the [Profiler Getting Started Guide](https://docs.datadoghq.com/tracing/profiler/getting_started/?code-lang=ruby). +#### Troubleshooting + +If you run into issues with profiling, please check the [Profiler Troubleshooting Guide](https://docs.datadoghq.com/tracing/profiler/profiler_troubleshooting/?code-lang=ruby). + #### Profiling Resque jobs When profiling [Resque](https://github.com/resque/resque) jobs, you should set the `RUN_AT_EXIT_HOOKS=1` option described in the [Resque](https://github.com/resque/resque/blob/v2.0.0/docs/HOOKS.md#worker-hooks) documentation. From 45db28fe0f23047ae0e7767d18cfddd4016a6c20 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 11:44:48 +0100 Subject: [PATCH 05/10] Add helper for linking of OpenTracing traces to profiles --- docs/GettingStarted.md | 15 +++++++ lib/ddtrace/profiling.rb | 4 ++ .../ext/opentelemetry_trace_linking.rb | 40 +++++++++++++++++++ .../ext/opentelemetry_trace_linking_spec.rb | 40 +++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 lib/ddtrace/profiling/ext/opentelemetry_trace_linking.rb create mode 100644 spec/ddtrace/profiling/ext/opentelemetry_trace_linking_spec.rb diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index 59592679553..e7c5d689c6a 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -2503,6 +2503,21 @@ When profiling [Resque](https://github.com/resque/resque) jobs, you should set t Without this flag, profiles for short-lived Resque jobs will not be available as Resque kills worker processes before they have a chance to submit this information. +#### Linking OpenTelemetry traces with profiles + +Profiler's support for [Investigating Code Hotspots from Traces](https://docs.datadoghq.com/tracing/profiler/connect_traces_and_profiles) +is also available when using the [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-ruby) Ruby libraries. + +To enable this feature, and after following regular steps for enabling profiling, +modify your OpenTelemetry gem configuration to add an additional span processor: + +```ruby +OpenTelemetry::SDK.configure do |c| + c.add_span_processor(Datadog::Profiling::Ext::OpenTelemetryTraceLinking.new) + # ... rest of your configuration for using OpenTelemetry +end +``` + ## Known issues and suggested configurations ### Payload too large diff --git a/lib/ddtrace/profiling.rb b/lib/ddtrace/profiling.rb index a6c39cf56ea..15849df76af 100644 --- a/lib/ddtrace/profiling.rb +++ b/lib/ddtrace/profiling.rb @@ -1,3 +1,7 @@ +# Unlike the rest of the Profiler, this class is always loaded because it's expected to be instanced by users directly, +# and thus should always be available, even when Profiler is disabled or not available. +require 'ddtrace/profiling/ext/opentelemetry_trace_linking' + module Datadog # Contains profiler for generating stack profiles, etc. module Profiling diff --git a/lib/ddtrace/profiling/ext/opentelemetry_trace_linking.rb b/lib/ddtrace/profiling/ext/opentelemetry_trace_linking.rb new file mode 100644 index 00000000000..8e1edab64a4 --- /dev/null +++ b/lib/ddtrace/profiling/ext/opentelemetry_trace_linking.rb @@ -0,0 +1,40 @@ +module Datadog + module Profiling + module Ext + # Provides an OpenTelemetry-compliant SpanProcessor that enables OpenTelemetry traces to be linked with profiles. + # + # DEVELOPMENT NOTES: + # * Unlike most of the rest of the Profiler, this class is directly referenced in the docs and is + # expected to be instantiated by library users. + # * It MUST have no dependency on the rest of Profiler, so that it can be safely used even when Profiler is + # disabled or not available. + # * It MUST not rely on OpenTelemetry being available at all **prior to being instanced**. E.g. this class + # can be loaded even if none of the OpenTelemetry gems are available. + # * The expected API is documented at + # + # and + # + class OpenTelemetryTraceLinking + # https://github.com/open-telemetry/opentelemetry-ruby/blob/bef61b5ae4493f5ac8a3da7d843a5ff79f15f715/sdk/lib/opentelemetry/sdk/trace/export.rb#L16 + SUCCESS = 0 + private_constant :SUCCESS + + def on_start(span, _parent_context) + span.set_attribute(Datadog::Ext::Runtime::TAG_ID, Datadog::Runtime::Identity.id) + end + + def on_finish(*_) + # Nothing to do + end + + def force_flush(**_) + SUCCESS + end + + def shutdown(**_) + SUCCESS + end + end + end + end +end diff --git a/spec/ddtrace/profiling/ext/opentelemetry_trace_linking_spec.rb b/spec/ddtrace/profiling/ext/opentelemetry_trace_linking_spec.rb new file mode 100644 index 00000000000..554a6c0ba6e --- /dev/null +++ b/spec/ddtrace/profiling/ext/opentelemetry_trace_linking_spec.rb @@ -0,0 +1,40 @@ +require 'ddtrace/profiling/ext/opentelemetry_trace_linking' + +RSpec.describe Datadog::Profiling::Ext::OpenTelemetryTraceLinking do + before(:all) do + skip 'opentelemetry-api not supported on Ruby < 2.5' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5.0') + + require 'opentelemetry-api' + end + + subject(:trace_linking) { described_class.new } + + describe '#on_start' do + let(:span) { instance_double(OpenTelemetry::Trace::Span) } + let(:parent_context) { double('Context') } # rubocop:disable RSpec/VerifiedDoubles + + it 'adds the runtime id as an attribute to a span' do + expect(span).to receive(:set_attribute).with(Datadog::Ext::Runtime::TAG_ID, Datadog::Runtime::Identity.id) + + trace_linking.on_start(span, parent_context) + end + end + + describe '#on_finish' do + it 'does nothing' do + trace_linking.on_finish(double('Span')) # rubocop:disable RSpec/VerifiedDoubles + end + end + + describe '#force_flush' do + it do + expect(trace_linking.force_flush(timeout: double('Timeout'))).to be 0 # rubocop:disable RSpec/VerifiedDoubles + end + end + + describe '#shutdown' do + it do + expect(trace_linking.shutdown(timeout: double('Timeout'))).to be 0 # rubocop:disable RSpec/VerifiedDoubles + end + end +end From b92dce55303562e78e00bcdb8e6227ce4898bbfe Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 12:18:11 +0100 Subject: [PATCH 06/10] Document how linking traces to profiles works --- docs/ProfilingDevelopment.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/docs/ProfilingDevelopment.md b/docs/ProfilingDevelopment.md index 77ba39defe0..56a037ffb3a 100644 --- a/docs/ProfilingDevelopment.md +++ b/docs/ProfilingDevelopment.md @@ -16,10 +16,13 @@ Components below live inside <../lib/ddtrace/profiling>: * `Ext::CThread`: Extension used to enable CPU-time profiling via use of Pthread's `getcpuclockid`. * `Ext::Forking`: Monkey patches `Kernel#fork`, adding a `Kernel#at_fork` callback mechanism which is used to restore profiling abilities after the VM forks (such as re-instrumenting the main thread, and restarting profiler threads). +* `Ext::OpenTelemetryTraceLinking`: Helper class to automatically add the runtime id tag to OpenTelemetry traces. + Optionally added by users to their OpenTelemetry gem configuration to enable linking OpenTelemetry traces with profiles. * `Pprof::*` (in <../lib/ddtrace/profiling/pprof>): Converts samples captured in the `Recorder` into the pprof format. * `Tasks::Setup`: Takes care of loading our extensions/monkey patches to handle fork() and CPU profiling. * `Transport::*` (in <../lib/ddtrace/profiling/transport>): Implements transmission of profiling payloads to the Datadog agent or backend. +* `TraceIdentifiers::*`: Used to retrieve trace id and span id from tracers, to be used to connect traces to profiles. * `BacktraceLocation`: Entity class used to represent an entry in a stack trace. * `Buffer`: Bounded buffer used to store profiling events. * `Exporter`: Writes profiling data to a given transport. @@ -86,3 +89,32 @@ takes care of encoding the data and reporting it to the datadog agent (or to the ## How CPU-time profiling works **TODO**: Document our pthread-based approach to getting CPU-time for threads. + +## How linking of traces to profiles works + +The [code hotspots feature](https://docs.datadoghq.com/tracing/profiler/connect_traces_and_profiles) allows users to start +from a trace and then to investigate the profile that corresponds to that trace. + +This works in two steps: +1. Linking a trace to the profile that was gathered while it executed +2. Enabling the filtering of a profile to contain only the samples relating to a given trace/span + +To link a trace to a profile, we must ensure that both have the same `runtime-id` tag. +This tag is in `Datadog::Runtime::Identity.id` and is automatically added by both the tracer and the profiler to reported +traces/profiles. + +(For traces reported using the OpenTelemetry gem, users need to add our `Datadog::Profiling::Ext::OpenTelemetryTraceLinking` +class to their configuration, so that this tag gets added.) + +The profiler backend links a trace covering a given time interval to the profiles covering the same time interval, +whenever they share the same `runtime-id`. + +To further enable filtering of a profile to show only samples related to a given trace/span, each sample taken by the +profiler is tagged with the trace_id and span_id for the given trace/span. + +This is done using the `Datadog::Profiling::TraceIdentifiers::Helper` that retrieves a trace_id and span_id, if +available, from the supported tracers. This helper is called by the `Collectors::Stack` during sampling. + +Note that if a given trace executes too fast, it's possible that the profiler will not contain any samples for that +specific trace. Nevertheless, the linking still works and is useful, as it allows users to explore what was going on their +profile at that time, even if they can't filter down to the specific request. From cbd3fbf7d42f81a3b2ba50505efc61a1720c8655 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 12:30:15 +0100 Subject: [PATCH 07/10] Minor: Add missing item to ToC --- docs/GettingStarted.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/GettingStarted.md b/docs/GettingStarted.md index e7c5d689c6a..8f042121956 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -88,6 +88,7 @@ To contribute, check out the [contribution guidelines][contribution docs] and [d - [Profiling](#profiling) - [Troubleshooting](#troubleshooting) - [Profiling Resque jobs](#profiling-resque-jobs) + - [Linking OpenTelemetry traces with profiles](#linking-opentelemetry-traces-with-profiles) - [Known issues and suggested configurations](#known-issues-and-suggested-configurations) - [Payload too large](#payload-too-large) - [Stack level too deep](#stack-level-too-deep) From 4622b38db38d1f292273ac3b0969811945f1c62f Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Thu, 24 Jun 2021 16:59:31 +0100 Subject: [PATCH 08/10] Add support for OpenTelemetry 1.0.0.rc2 In particular https://github.com/open-telemetry/opentelemetry-ruby/pull/807 changed some of the APIs we were using to get the current span for a thread. To test both 0.17.0 and this new version I moved opentelemetry to appraisals. --- Appraisals | 18 ++ Gemfile | 1 - Rakefile | 25 ++- .../jruby_9.2.0.0_opentelemetry_1_0.gemfile | 35 ++++ ...uby_9.2.0.0_opentelemetry_1_0.gemfile.lock | 163 ++++++++++++++++ ...ruby_9.2.0.0_opentelemetry_pre_1_0.gemfile | 35 ++++ ...9.2.0.0_opentelemetry_pre_1_0.gemfile.lock | 163 ++++++++++++++++ .../jruby_9.2.18.0_opentelemetry_1_0.gemfile | 35 ++++ ...by_9.2.18.0_opentelemetry_1_0.gemfile.lock | 163 ++++++++++++++++ ...uby_9.2.18.0_opentelemetry_pre_1_0.gemfile | 35 ++++ ....2.18.0_opentelemetry_pre_1_0.gemfile.lock | 163 ++++++++++++++++ gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile | 39 ++++ .../ruby_2.5.9_opentelemetry_1_0.gemfile.lock | 171 +++++++++++++++++ .../ruby_2.5.9_opentelemetry_pre_1_0.gemfile | 39 ++++ ...y_2.5.9_opentelemetry_pre_1_0.gemfile.lock | 171 +++++++++++++++++ gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile | 39 ++++ .../ruby_2.6.7_opentelemetry_1_0.gemfile.lock | 173 +++++++++++++++++ .../ruby_2.6.7_opentelemetry_pre_1_0.gemfile | 39 ++++ ...y_2.6.7_opentelemetry_pre_1_0.gemfile.lock | 173 +++++++++++++++++ gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile | 39 ++++ .../ruby_2.7.3_opentelemetry_1_0.gemfile.lock | 173 +++++++++++++++++ .../ruby_2.7.3_opentelemetry_pre_1_0.gemfile | 39 ++++ ...y_2.7.3_opentelemetry_pre_1_0.gemfile.lock | 173 +++++++++++++++++ gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile | 40 ++++ .../ruby_3.0.1_opentelemetry_1_0.gemfile.lock | 175 ++++++++++++++++++ .../ruby_3.0.1_opentelemetry_pre_1_0.gemfile | 40 ++++ ...y_3.0.1_opentelemetry_pre_1_0.gemfile.lock | 175 ++++++++++++++++++ .../trace_identifiers/opentelemetry.rb | 28 ++- .../trace_identifiers/opentelemetry_spec.rb | 46 ++++- 29 files changed, 2596 insertions(+), 12 deletions(-) create mode 100644 gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile create mode 100644 gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile.lock create mode 100644 gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile create mode 100644 gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile create mode 100644 gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile create mode 100644 gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile create mode 100644 gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile.lock create mode 100644 gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile create mode 100644 gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile.lock create mode 100644 gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile create mode 100644 gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile.lock diff --git a/Appraisals b/Appraisals index 68ec3e31f6c..9ae895378f0 100644 --- a/Appraisals +++ b/Appraisals @@ -8,6 +8,16 @@ def self.gem_cucumber(version) end end +def self.apraise_opentelemetry + appraise 'opentelemetry-pre-1-0' do + gem 'opentelemetry-sdk', '< 1' + end + + appraise 'opentelemetry-1-0' do + gem 'opentelemetry-sdk', '>= 1.0.0.rc2' + end +end + if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(Datadog::VERSION::MINIMUM_RUBY_VERSION) raise NotImplementedError, "Ruby versions < #{Datadog::VERSION::MINIMUM_RUBY_VERSION} are not supported!" elsif Gem::Version.new('2.1.0') <= Gem::Version.new(RUBY_VERSION) \ @@ -784,6 +794,8 @@ elsif Gem::Version.new('2.5.0') <= Gem::Version.new(RUBY_VERSION) \ gem 'resque', '>= 2.0' end + apraise_opentelemetry + (3..5).each { |v| gem_cucumber(v) } appraise 'contrib' do @@ -966,6 +978,8 @@ elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION) \ gem 'resque', '>= 2.0' end + apraise_opentelemetry + (3..5).each { |v| gem_cucumber(v) } appraise 'contrib' do @@ -1149,6 +1163,8 @@ elsif Gem::Version.new('2.7.0') <= Gem::Version.new(RUBY_VERSION) \ gem 'resque', '>= 2.0' end + apraise_opentelemetry + (3..5).each { |v| gem_cucumber(v) } appraise 'contrib' do @@ -1247,6 +1263,8 @@ elsif Gem::Version.new('3.0.0') <= Gem::Version.new(RUBY_VERSION) gem 'resque', '>= 2.0' end + apraise_opentelemetry + (3..5).each { |v| gem_cucumber(v) } appraise 'contrib' do diff --git a/Gemfile b/Gemfile index b7ad45061e4..0cc1e2ce361 100644 --- a/Gemfile +++ b/Gemfile @@ -59,7 +59,6 @@ end # Optional extensions # TODO: Move this to Appraisals? gem 'dogstatsd-ruby', '< 5.0' -gem 'opentelemetry-api', '>= 0.17.0' if RUBY_VERSION >= '2.5.0' gem 'opentracing', '>= 0.4.1' # Profiler optional dependencies diff --git a/Rakefile b/Rakefile index 1bd6dbaf1b8..21fc28dce3e 100644 --- a/Rakefile +++ b/Rakefile @@ -18,7 +18,7 @@ namespace :spec do RSpec::Core::RakeTask.new(:main) do |t, args| t.pattern = 'spec/**/*_spec.rb' t.exclude_pattern = 'spec/**/{contrib,benchmark,redis,opentracer,opentelemetry,auto_instrument}/**/*_spec.rb,'\ - ' spec/**/auto_instrument_spec.rb' + ' spec/**/auto_instrument_spec.rb,spec/**/profiling/**/opentelemetry_spec.rb' t.rspec_opts = args.to_a.join(' ') end @@ -68,6 +68,11 @@ namespace :spec do t.rspec_opts = args.to_a.join(' ') end + RSpec::Core::RakeTask.new(:'profiling-opentelemetry') do |t, args| + t.pattern = 'spec/**/profiling/**/opentelemetry_spec.rb' + t.rspec_opts = args.to_a.join(' ') + end + RSpec::Core::RakeTask.new(:contrib) do |t, args| contrib_paths = [ 'analytics', @@ -628,6 +633,11 @@ task :ci do declare 'bundle exec appraisal cucumber3 rake spec:cucumber' declare 'bundle exec appraisal cucumber4 rake spec:cucumber' declare 'bundle exec appraisal cucumber5 rake spec:cucumber' + + # Profiling + declare 'bundle exec appraisal opentelemetry-pre-1-0 rake spec:profiling-opentelemetry' + declare 'bundle exec appraisal opentelemetry-1-0 rake spec:profiling-opentelemetry' + elsif Gem::Version.new('2.6.0') <= Gem::Version.new(RUBY_VERSION) \ && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7.0') # Main library @@ -726,6 +736,10 @@ task :ci do declare 'bundle exec appraisal cucumber3 rake spec:cucumber' declare 'bundle exec appraisal cucumber4 rake spec:cucumber' declare 'bundle exec appraisal cucumber5 rake spec:cucumber' + + # Profiling + declare 'bundle exec appraisal opentelemetry-pre-1-0 rake spec:profiling-opentelemetry' + declare 'bundle exec appraisal opentelemetry-1-0 rake spec:profiling-opentelemetry' end elsif Gem::Version.new('2.7.0') <= Gem::Version.new(RUBY_VERSION) \ && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.0.0') @@ -824,6 +838,10 @@ task :ci do declare 'bundle exec appraisal cucumber3 rake spec:cucumber' declare 'bundle exec appraisal cucumber4 rake spec:cucumber' declare 'bundle exec appraisal cucumber5 rake spec:cucumber' + + # Profiling + declare 'bundle exec appraisal opentelemetry-pre-1-0 rake spec:profiling-opentelemetry' + declare 'bundle exec appraisal opentelemetry-1-0 rake spec:profiling-opentelemetry' end elsif Gem::Version.new('3.0.0') <= Gem::Version.new(RUBY_VERSION) # Main library @@ -898,6 +916,11 @@ task :ci do declare 'bundle exec appraisal cucumber3 rake spec:cucumber' declare 'bundle exec appraisal cucumber4 rake spec:cucumber' declare 'bundle exec appraisal cucumber5 rake spec:cucumber' + + # Profiling + declare 'bundle exec appraisal opentelemetry-pre-1-0 rake spec:profiling-opentelemetry' + declare 'bundle exec appraisal opentelemetry-1-0 rake spec:profiling-opentelemetry' + end end end diff --git a/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile b/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..0cba89f7b08 --- /dev/null +++ b/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile @@ -0,0 +1,35 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-debugger-jruby" +gem "rake", ">= 10.5" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile.lock b/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..6d902f5b1db --- /dev/null +++ b/gemfiles/jruby_9.2.0.0_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,163 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3-java) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2-java) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.13.1-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) + pry-debugger-jruby (2.0.0-java) + pry (>= 0.13, < 0.14) + ruby-debug-base (>= 0.10.4, < 0.12) + rainbow (3.0.0) + rake (13.0.3) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-debug-base (0.11.0-java) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + spoon (0.0.6) + ffi + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + java + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-debugger-jruby + rake (>= 10.5) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 1.17.1 diff --git a/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile b/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..da6bc5b188e --- /dev/null +++ b/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,35 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-debugger-jruby" +gem "rake", ">= 10.5" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..083365d2f96 --- /dev/null +++ b/gemfiles/jruby_9.2.0.0_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,163 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3-java) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2-java) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.13.1-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) + pry-debugger-jruby (2.0.0-java) + pry (>= 0.13, < 0.14) + ruby-debug-base (>= 0.10.4, < 0.12) + rainbow (3.0.0) + rake (13.0.3) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-debug-base (0.11.0-java) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + spoon (0.0.6) + ffi + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + java + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-debugger-jruby + rake (>= 10.5) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 1.17.1 diff --git a/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile b/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..0cba89f7b08 --- /dev/null +++ b/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile @@ -0,0 +1,35 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-debugger-jruby" +gem "rake", ">= 10.5" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile.lock b/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..4f9ddc4b61e --- /dev/null +++ b/gemfiles/jruby_9.2.18.0_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,163 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3-java) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2-java) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.13.1-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) + pry-debugger-jruby (2.0.0-java) + pry (>= 0.13, < 0.14) + ruby-debug-base (>= 0.10.4, < 0.12) + rainbow (3.0.0) + rake (13.0.3) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-debug-base (0.11.0-java) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + spoon (0.0.6) + ffi + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + universal-java-1.8 + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-debugger-jruby + rake (>= 10.5) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile b/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..da6bc5b188e --- /dev/null +++ b/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,35 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-debugger-jruby" +gem "rake", ">= 10.5" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..1a62e8348a7 --- /dev/null +++ b/gemfiles/jruby_9.2.18.0_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,163 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3-java) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2-java) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.13.1-java) + coderay (~> 1.1) + method_source (~> 1.0) + spoon (~> 0.0) + pry-debugger-jruby (2.0.0-java) + pry (>= 0.13, < 0.14) + ruby-debug-base (>= 0.10.4, < 0.12) + rainbow (3.0.0) + rake (13.0.3) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-debug-base (0.11.0-java) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + spoon (0.0.6) + ffi + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + universal-java-1.8 + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-debugger-jruby + rake (>= 10.5) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile b/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..4702f8bee7c --- /dev/null +++ b/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-nav" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile.lock b/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..fe4e30f2f44 --- /dev/null +++ b/gemfiles/ruby_2.5.9_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,171 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (0.9.2) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + pry-nav (0.3.0) + pry (>= 0.9.10, < 0.13.0) + pry-stack_explorer (0.4.9.3) + binding_of_caller (>= 0.7) + pry (>= 0.9.11) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-nav + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile b/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..20b02179e47 --- /dev/null +++ b/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-nav" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..204b1f6971b --- /dev/null +++ b/gemfiles/ruby_2.5.9_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,171 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (0.9.2) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.12.2) + coderay (~> 1.1.0) + method_source (~> 0.9.0) + pry-nav (0.3.0) + pry (>= 0.9.10, < 0.13.0) + pry-stack_explorer (0.4.9.3) + binding_of_caller (>= 0.7) + pry (>= 0.9.11) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.3.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-nav + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile b/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..e22eecddc4a --- /dev/null +++ b/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile.lock b/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..de86d55c187 --- /dev/null +++ b/gemfiles/ruby_2.6.7_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,173 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile b/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..3505ffe3d97 --- /dev/null +++ b/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..62edf0480a8 --- /dev/null +++ b/gemfiles/ruby_2.6.7_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,173 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile b/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..e22eecddc4a --- /dev/null +++ b/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile.lock b/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..71fd34eaa24 --- /dev/null +++ b/gemfiles/ruby_2.7.3_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,173 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + ruby + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.1.4 diff --git a/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile b/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..3505ffe3d97 --- /dev/null +++ b/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,39 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..6aa343815c9 --- /dev/null +++ b/gemfiles/ruby_2.7.3_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,173 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.26) + +PLATFORMS + ruby + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.1.4 diff --git a/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile b/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile new file mode 100644 index 00000000000..f286002acd1 --- /dev/null +++ b/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile @@ -0,0 +1,40 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", ">= 1.0.0.rc2" + +gemspec path: "../" diff --git a/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile.lock b/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile.lock new file mode 100644 index 00000000000..df9195ad827 --- /dev/null +++ b/gemfiles/ruby_3.0.1_opentelemetry_1_0.gemfile.lock @@ -0,0 +1,175 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (1.0.0.rc2) + opentelemetry-common (0.19.0) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-instrumentation-base (0.18.1) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-sdk (1.0.0.rc2) + opentelemetry-api (~> 1.0.0.rc2) + opentelemetry-common (~> 0.19.0) + opentelemetry-instrumentation-base (~> 0.18.1) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.7.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (>= 1.0.0.rc2) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile b/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile new file mode 100644 index 00000000000..727c79e11ab --- /dev/null +++ b/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile @@ -0,0 +1,40 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "addressable", "~> 2.4.0" +gem "appraisal", "~> 2.2" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "~> 0.1" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "memory_profiler", "~> 0.9" +gem "minitest", "= 5.10.1" +gem "minitest-around", "0.5.0" +gem "minitest-stub_any_instance", "1.0.2" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.10" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec_junit_formatter", ">= 0.4.1" +gem "rspec_n", "~> 1.3" +gem "ruby-prof", "~> 1.4" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.10", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", "~> 2.2", require: false +gem "dogstatsd-ruby", "< 5.0" +gem "opentracing", ">= 0.4.1" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "< 1" + +gemspec path: "../" diff --git a/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile.lock b/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile.lock new file mode 100644 index 00000000000..463245faf96 --- /dev/null +++ b/gemfiles/ruby_3.0.1_opentelemetry_pre_1_0.gemfile.lock @@ -0,0 +1,175 @@ +GIT + remote: https://github.com/DataDog/simplecov + revision: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + ref: 3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db + specs: + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + +PATH + remote: .. + specs: + ddtrace (0.50.0) + ffi (~> 1.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.4.0) + appraisal (2.4.0) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.9.1) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + binding_of_caller (1.0.0) + debug_inspector (>= 0.0.1) + builder (3.2.4) + byebug (11.1.3) + climate_control (0.2.0) + coderay (1.1.3) + colorize (0.8.1) + concurrent-ruby (1.1.9) + crack (0.4.5) + rexml + cri (2.15.11) + debug_inspector (1.1.0) + diff-lcs (1.4.4) + docile (1.4.0) + dogstatsd-ruby (4.8.3) + ffi (1.15.3) + google-protobuf (3.17.3-x86_64-linux) + hashdiff (1.0.1) + memory_profiler (0.9.14) + method_source (1.0.0) + minitest (5.10.1) + minitest-around (0.5.0) + minitest (~> 5.0) + minitest-stub_any_instance (1.0.2) + msgpack (1.4.2) + opentelemetry-api (0.17.0) + opentelemetry-common (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-instrumentation-base (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-sdk (0.17.0) + opentelemetry-api (~> 0.17.0) + opentelemetry-common (~> 0.17.0) + opentelemetry-instrumentation-base (~> 0.17.0) + opentracing (0.5.0) + parallel (1.20.1) + parser (3.0.1.1) + ast (~> 2.4.1) + pimpmychangelog (0.1.3) + pry (0.14.1) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.8.0) + byebug (~> 11.0) + pry (~> 0.10) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + rainbow (3.0.0) + rake (13.0.3) + redcarpet (3.5.1) + regexp_parser (2.1.1) + rexml (3.2.5) + rspec (3.10.0) + rspec-core (~> 3.10.0) + rspec-expectations (~> 3.10.0) + rspec-mocks (~> 3.10.0) + rspec-collection_matchers (1.2.0) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.10.1) + rspec-support (~> 3.10.0) + rspec-expectations (3.10.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-mocks (3.10.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.10.0) + rspec-support (3.10.2) + rspec_junit_formatter (0.4.1) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.17.0) + parallel (~> 1.10) + parser (>= 3.0.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml + rubocop-ast (>= 1.7.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.7.0) + parser (>= 3.0.1.1) + rubocop-performance (1.11.3) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.4.0) + rubocop (~> 1.0) + rubocop-ast (>= 1.1.0) + ruby-prof (1.4.3) + ruby-progressbar (1.11.0) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + thor (1.1.0) + unicode-display_width (2.0.0) + warning (1.2.0) + webmock (3.13.0) + addressable (>= 2.3.6) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.7.0) + yard (0.9.26) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + addressable (~> 2.4.0) + appraisal (~> 2.2) + benchmark-ips (~> 2.8) + benchmark-memory (~> 0.1) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (< 5.0) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + memory_profiler (~> 0.9) + minitest (= 5.10.1) + minitest-around (= 0.5.0) + minitest-stub_any_instance (= 1.0.2) + opentelemetry-sdk (< 1) + opentracing (>= 0.4.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + redcarpet (~> 3.4) + rspec (~> 3.10) + rspec-collection_matchers (~> 1.1) + rspec_junit_formatter (>= 0.4.1) + rspec_n (~> 1.3) + rubocop (~> 1.10) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.2) + ruby-prof (~> 1.4) + simplecov! + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.2.19 diff --git a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb index 0eace9ad9c0..89f738c8bb0 100644 --- a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb +++ b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb @@ -19,12 +19,16 @@ class OpenTelemetry def initialize @available = false @checked_version = false + @current_context_key = nil end def trace_identifiers_for(thread) return unless available? - span = ::OpenTelemetry::Trace.current_span(thread[::OpenTelemetry::Context::KEY]) + current_context = Array(thread[@current_context_key]).last # <= 1.0.0.rc1 single value; > 1.0.0.rc1 array + return unless current_context + + span = ::OpenTelemetry::Trace.current_span(current_context) if span && span != ::OpenTelemetry::Trace::Span::INVALID context = span.context @@ -69,10 +73,8 @@ def trace_id_to_datadog(trace_id) end def supported? - if defined?(::OpenTelemetry::VERSION) && - SUPPORTED_VERSIONS.satisfied_by?(Gem::Version.new(::OpenTelemetry::VERSION)) - true - else + unless defined?(::OpenTelemetry::VERSION) && + SUPPORTED_VERSIONS.satisfied_by?(Gem::Version.new(::OpenTelemetry::VERSION)) UNSUPPORTED_VERSION_ONLY_ONCE.run do Datadog.logger.warn( 'Profiler: Incompatible version of opentelemetry-api detected; ' \ @@ -82,7 +84,21 @@ def supported? ) end - false + return false + end + + key = retrieve_current_context_key + return false unless key + + @current_context_key = key + true + end + + def retrieve_current_context_key + if defined?(::OpenTelemetry::Context::KEY) # <= 1.0.0.rc1 + ::OpenTelemetry::Context::KEY + elsif ::OpenTelemetry::Context.const_defined?(:STACK_KEY) + ::OpenTelemetry::Context.const_get(:STACK_KEY) end end end diff --git a/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb index 8ccab2bc78b..354b766b07a 100644 --- a/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb @@ -4,7 +4,9 @@ before(:all) do skip 'opentelemetry-api not supported on Ruby < 2.5' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5.0') - require 'opentelemetry-api' + require 'opentelemetry-sdk' + + OpenTelemetry::SDK.configure end let(:thread) { Thread.new { sleep } } @@ -38,9 +40,39 @@ end end + context 'when there is no available context for the thread' do + before do + expect(thread).to receive(:[]).and_return(nil) + end + + it do + expect(trace_identifiers_for).to be nil + end + + it 'does not try to invoke the opentelemetry api' do + expect(OpenTelemetry::Trace).to_not receive(:current_span) + + trace_identifiers_for + end + end + + context 'when context for the thread is an array of values' do + before do + allow(thread).to receive(:[]).and_return([:context1, :context2]) + end + + it 'retrieves the span from the last context' do + expect(OpenTelemetry::Trace).to receive(:current_span).with(:context2) + + trace_identifiers_for + end + end + context 'when there there is no opentelemetry span (nil) for the thread' do before do - allow(OpenTelemetry::Trace).to receive(:current_span).and_return(nil) + allow(thread).to receive(:[]).and_return(:dummy_context) + expect(OpenTelemetry::Trace) + .to receive(:current_span).with(:dummy_context).and_return(nil) end it do @@ -50,7 +82,9 @@ context 'when there there is no opentelemetry span (invalid) for the thread' do before do - allow(OpenTelemetry::Trace).to receive(:current_span).and_return(OpenTelemetry::Trace::Span::INVALID) + allow(thread).to receive(:[]).and_return(:dummy_context) + expect(OpenTelemetry::Trace) + .to receive(:current_span).with(:dummy_context).and_return(OpenTelemetry::Trace::Span::INVALID) end it do @@ -65,6 +99,10 @@ described_class.const_get('UNSUPPORTED_VERSION_ONLY_ONCE').send(:reset_ran_once_state_for_tests) end + it do + expect(trace_identifiers_for).to be nil + end + it 'does not try to invoke the opentelemetry api' do expect(OpenTelemetry::Trace).to_not receive(:current_span) @@ -79,7 +117,7 @@ end context 'when opentelemetry-api gem is not available' do - let!(:original_opentelemetry) { ::OpenTelemetry } + let!(:original_opentelemetry) { OpenTelemetry } before do hide_const('::OpenTelemetry') From 7f25f15378532d1ba848da489ec54dbde651e222 Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Fri, 25 Jun 2021 10:58:08 +0100 Subject: [PATCH 09/10] Tweak patterns used to invoke opentelemetry specs --- Rakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Rakefile b/Rakefile index 21fc28dce3e..410536afc74 100644 --- a/Rakefile +++ b/Rakefile @@ -18,7 +18,7 @@ namespace :spec do RSpec::Core::RakeTask.new(:main) do |t, args| t.pattern = 'spec/**/*_spec.rb' t.exclude_pattern = 'spec/**/{contrib,benchmark,redis,opentracer,opentelemetry,auto_instrument}/**/*_spec.rb,'\ - ' spec/**/auto_instrument_spec.rb,spec/**/profiling/**/opentelemetry_spec.rb' + ' spec/**/auto_instrument_spec.rb,spec/**/profiling/**/**opentelemetry**_spec.rb' t.rspec_opts = args.to_a.join(' ') end @@ -69,7 +69,7 @@ namespace :spec do end RSpec::Core::RakeTask.new(:'profiling-opentelemetry') do |t, args| - t.pattern = 'spec/**/profiling/**/opentelemetry_spec.rb' + t.pattern = 'spec/**/profiling/**/**opentelemetry**_spec.rb' t.rspec_opts = args.to_a.join(' ') end From f6711e2523d02dfcf322124ce0b51b6b6d120d3b Mon Sep 17 00:00:00 2001 From: Ivo Anjo Date: Mon, 28 Jun 2021 12:08:01 +0100 Subject: [PATCH 10/10] Dependency inject tracer instance into profiler As discussed during PR review of #1568, it's problematic to just cache whatever's in `Datadog.tracer` because we can observe the old value during component initialization. To break the loop, let's instead directly initialize the `TraceIdentifiers::Ddtrace` class with the correct tracer during component initialization. IMHO this has a further advantage: it makes it really explict where there is a tracer-to-profiler dependency whereas previously there was just a call to `Datadog.tracer` deep in the bowels of the profiler that could be called at any point. --- docs/ProfilingDevelopment.md | 18 +++++---------- lib/ddtrace/configuration/components.rb | 11 ++++++---- lib/ddtrace/profiling.rb | 1 + lib/ddtrace/profiling/collectors/stack.rb | 10 ++++----- .../profiling/trace_identifiers/ddtrace.rb | 22 +++---------------- .../profiling/trace_identifiers/helper.rb | 2 +- .../trace_identifiers/opentelemetry.rb | 2 +- spec/ddtrace/configuration/components_spec.rb | 5 +++-- spec/ddtrace/profiling/integration_spec.rb | 7 ++++-- .../trace_identifiers/ddtrace_spec.rb | 20 ++++++----------- .../trace_identifiers/helper_spec.rb | 2 +- 11 files changed, 39 insertions(+), 61 deletions(-) diff --git a/docs/ProfilingDevelopment.md b/docs/ProfilingDevelopment.md index 56a037ffb3a..31fd3cfb276 100644 --- a/docs/ProfilingDevelopment.md +++ b/docs/ProfilingDevelopment.md @@ -44,22 +44,14 @@ flow: 4. The `Setup` task activates our extensions * `Datadog::Profiling::Ext::Forking` * `Datadog::Profiling::Ext::CPU` -5. Still inside `Datadog::Components`, the `build_profiler` method then creates and wires up the Profiler: - ```ruby - recorder = build_profiler_recorder(settings) - collectors = build_profiler_collectors(settings, recorder) - exporters = build_profiler_exporters(settings) - scheduler = build_profiler_scheduler(settings, recorder, exporters) - - Datadog::Profiler.new(collectors, scheduler) - ``` +5. Still inside `Datadog::Components`, the `build_profiler` method then creates and wires up the Profiler as such: ```asciiflow +------------+ | Profiler | - +-+--------+-+ - | | - v v - +---------+--+ +--+--------+ + +-+-------+--+ + | | + v v + +---------+--+ +-+---------+ | Collectors | | Scheduler | +---------+--+ +-+-------+-+ | | | diff --git a/lib/ddtrace/configuration/components.rb b/lib/ddtrace/configuration/components.rb index 2feece4f08d..904a92bd749 100644 --- a/lib/ddtrace/configuration/components.rb +++ b/lib/ddtrace/configuration/components.rb @@ -70,7 +70,7 @@ def build_tracer(settings, agent_settings) tracer end - def build_profiler(settings, agent_settings) + def build_profiler(settings, agent_settings, tracer) return unless Datadog::Profiling.supported? && settings.profiling.enabled unless defined?(Datadog::Profiling::Tasks::Setup) @@ -107,8 +107,10 @@ def build_profiler(settings, agent_settings) # NOTE: Please update the Initialization section of ProfilingDevelopment.md with any changes to this method + trace_identifiers_helper = Datadog::Profiling::TraceIdentifiers::Helper.new(tracer: tracer) + recorder = build_profiler_recorder(settings) - collectors = build_profiler_collectors(settings, recorder) + collectors = build_profiler_collectors(settings, recorder, trace_identifiers_helper) exporters = build_profiler_exporters(settings, agent_settings) scheduler = build_profiler_scheduler(settings, recorder, exporters) @@ -164,10 +166,11 @@ def build_profiler_recorder(settings) Datadog::Profiling::Recorder.new(event_classes, settings.profiling.max_events) end - def build_profiler_collectors(settings, recorder) + def build_profiler_collectors(settings, recorder, trace_identifiers_helper) [ Datadog::Profiling::Collectors::Stack.new( recorder, + trace_identifiers_helper: trace_identifiers_helper, max_frames: settings.profiling.max_frames # TODO: Provide proc that identifies Datadog worker threads? # ignore_thread: settings.profiling.ignore_profiler @@ -209,7 +212,7 @@ def initialize(settings) @tracer = self.class.build_tracer(settings, agent_settings) # Profiler - @profiler = self.class.build_profiler(settings, agent_settings) + @profiler = self.class.build_profiler(settings, agent_settings, @tracer) # Runtime metrics @runtime_metrics = self.class.build_runtime_metrics_worker(settings) diff --git a/lib/ddtrace/profiling.rb b/lib/ddtrace/profiling.rb index 15849df76af..c1ecd52cc0b 100644 --- a/lib/ddtrace/profiling.rb +++ b/lib/ddtrace/profiling.rb @@ -99,6 +99,7 @@ def self.load_profiling require 'ddtrace/profiling/transport/io' require 'ddtrace/profiling/transport/http' require 'ddtrace/profiling/profiler' + require 'ddtrace/profiling/trace_identifiers/helper' require 'ddtrace/profiling/pprof/pprof_pb' diff --git a/lib/ddtrace/profiling/collectors/stack.rb b/lib/ddtrace/profiling/collectors/stack.rb index dc927588719..38fcdd0b8e5 100644 --- a/lib/ddtrace/profiling/collectors/stack.rb +++ b/lib/ddtrace/profiling/collectors/stack.rb @@ -1,5 +1,4 @@ require 'ddtrace/profiling/backtrace_location' -require 'ddtrace/profiling/trace_identifiers/helper' require 'ddtrace/profiling/events/stack' require 'ddtrace/utils/only_once' require 'ddtrace/utils/time' @@ -12,7 +11,7 @@ module Collectors # Collects stack trace samples from Ruby threads for both CPU-time (if available) and wall-clock. # Runs on its own background thread. # - class Stack < Worker + class Stack < Worker # rubocop:disable Metrics/ClassLength include Workers::Polling DEFAULT_MAX_TIME_USAGE_PCT = 2.0 @@ -22,6 +21,7 @@ class Stack < Worker attr_reader \ :recorder, :max_frames, + :trace_identifiers_helper, :ignore_thread, :max_time_usage_pct, :thread_api @@ -29,20 +29,20 @@ class Stack < Worker def initialize( recorder, max_frames:, + trace_identifiers_helper:, # Usually an instance of Datadog::Profiling::TraceIdentifiers::Helper ignore_thread: nil, max_time_usage_pct: DEFAULT_MAX_TIME_USAGE_PCT, thread_api: Thread, - trace_identifiers_helper: Datadog::Profiling::TraceIdentifiers::Helper.new, fork_policy: Workers::Async::Thread::FORK_POLICY_RESTART, # Restart in forks by default interval: MIN_INTERVAL, enabled: true ) @recorder = recorder @max_frames = max_frames + @trace_identifiers_helper = trace_identifiers_helper @ignore_thread = ignore_thread @max_time_usage_pct = max_time_usage_pct @thread_api = thread_api - @trace_identifiers_helper = trace_identifiers_helper # Workers::Async::Thread settings self.fork_policy = fork_policy @@ -125,7 +125,7 @@ def collect_thread_event(thread, wall_time_interval_ns) locations = convert_backtrace_locations(locations) thread_id = thread.respond_to?(:pthread_thread_id) ? thread.pthread_thread_id : thread.object_id - trace_id, span_id = @trace_identifiers_helper.trace_identifiers_for(thread) + trace_id, span_id = trace_identifiers_helper.trace_identifiers_for(thread) cpu_time = get_cpu_time_interval!(thread) Events::StackSample.new( diff --git a/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb index fe29adec38b..258a1cdf71a 100644 --- a/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb +++ b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb @@ -7,34 +7,18 @@ module TraceIdentifiers # given thread, if there is an active trace for that thread in Datadog.tracer. class Ddtrace def initialize(tracer: nil) - @tracer = tracer + @tracer = (tracer if tracer.respond_to?(:active_correlation)) end def trace_identifiers_for(thread) - current_tracer = tracer - return unless current_tracer + return unless @tracer - correlation = current_tracer.active_correlation(thread) + correlation = @tracer.active_correlation(thread) trace_id = correlation.trace_id span_id = correlation.span_id [trace_id, span_id] if trace_id && trace_id != 0 && span_id && span_id != 0 end - - private - - def tracer - return @tracer if @tracer - - # NOTE: Because the profiler may start working concurrently with tracer initialization, - # we need to be defensive here. - return unless Datadog.respond_to?(:tracer) - - tracer = Datadog.tracer - return unless tracer.respond_to?(:active_correlation) - - @tracer = tracer - end end end end diff --git a/lib/ddtrace/profiling/trace_identifiers/helper.rb b/lib/ddtrace/profiling/trace_identifiers/helper.rb index ef7bfcad6a7..5a3245364c8 100644 --- a/lib/ddtrace/profiling/trace_identifiers/helper.rb +++ b/lib/ddtrace/profiling/trace_identifiers/helper.rb @@ -18,7 +18,7 @@ class Helper ].freeze private_constant :DEFAULT_SUPPORTED_APIS - def initialize(supported_apis: DEFAULT_SUPPORTED_APIS.map(&:new)) + def initialize(tracer:, supported_apis: DEFAULT_SUPPORTED_APIS.map { |api| api.new(tracer: tracer) }) @supported_apis = supported_apis end diff --git a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb index 89f738c8bb0..c6f1d40e1ae 100644 --- a/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb +++ b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb @@ -16,7 +16,7 @@ class OpenTelemetry UNSUPPORTED_VERSION_ONLY_ONCE = Datadog::Utils::OnlyOnce.new private_constant :UNSUPPORTED_VERSION_ONLY_ONCE - def initialize + def initialize(**_) @available = false @checked_version = false @current_context_key = nil diff --git a/spec/ddtrace/configuration/components_spec.rb b/spec/ddtrace/configuration/components_spec.rb index f24c2b8f71a..6b1d57973a8 100644 --- a/spec/ddtrace/configuration/components_spec.rb +++ b/spec/ddtrace/configuration/components_spec.rb @@ -35,7 +35,7 @@ .and_return(tracer) expect(described_class).to receive(:build_profiler) - .with(settings, instance_of(Datadog::Configuration::AgentSettingsResolver::AgentSettings)) + .with(settings, instance_of(Datadog::Configuration::AgentSettingsResolver::AgentSettings), tracer) .and_return(profiler) expect(described_class).to receive(:build_runtime_metrics_worker) @@ -666,8 +666,9 @@ describe '::build_profiler' do let(:agent_settings) { Datadog::Configuration::AgentSettingsResolver.call(settings, logger: nil) } let(:profiler) { build_profiler } + let(:tracer) { instance_double(Datadog::Tracer) } - subject(:build_profiler) { described_class.build_profiler(settings, agent_settings) } + subject(:build_profiler) { described_class.build_profiler(settings, agent_settings, tracer) } context 'when profiling is not supported' do before { allow(Datadog::Profiling).to receive(:supported?).and_return(false) } diff --git a/spec/ddtrace/profiling/integration_spec.rb b/spec/ddtrace/profiling/integration_spec.rb index 7ce92bafc1d..44d8a2c43dd 100644 --- a/spec/ddtrace/profiling/integration_spec.rb +++ b/spec/ddtrace/profiling/integration_spec.rb @@ -15,6 +15,8 @@ skip 'Profiling is not supported.' unless Datadog::Profiling.supported? end + let(:tracer) { instance_double(Datadog::Tracer) } + shared_context 'StackSample events' do # NOTE: Please do not convert stack_one or stack_two to let, because # we want the method names on the resulting stacks to be stack_one or @@ -55,7 +57,7 @@ def stack_two let(:collector) do Datadog::Profiling::Collectors::Stack.new( recorder, - enabled: true, + trace_identifiers_helper: Datadog::Profiling::TraceIdentifiers::Helper.new(tracer: tracer), max_frames: 400 ) end @@ -121,10 +123,11 @@ def stack_two @current_span = span example.run end - Datadog.tracer.shutdown! end + let(:tracer) { Datadog.tracer } + before do expect(recorder) .to receive(:flush) diff --git a/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb b/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb index 01a855d36ff..0db73a9d2da 100644 --- a/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb @@ -46,22 +46,16 @@ context 'when no tracer instance is available' do let(:tracer) { nil } - context 'because the tracer is unavailable' do - let(:datadog) { Module.new { const_set('Utils', Datadog::Utils) } } - - before { stub_const('Datadog', datadog, transfer_nested_constant: true) } - - it do - expect(trace_identifiers_for).to be nil - end + it do + expect(trace_identifiers_for).to be nil end + end - context 'because correlations are unavailable' do - before { allow(Datadog).to receive(:tracer).and_return(instance_double(Datadog::Tracer)) } + context 'when tracer does not support #active_correlation' do + let(:tracer) { double('Tracer') } # rubocop:disable RSpec/VerifiedDoubles - it do - expect(trace_identifiers_for).to be nil - end + it do + expect(trace_identifiers_for).to be nil end end end diff --git a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb index 5b3df1efe2c..d5ee5be3621 100644 --- a/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb +++ b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb @@ -7,7 +7,7 @@ let(:api1) { instance_double(Datadog::Profiling::TraceIdentifiers::Ddtrace, 'api1') } let(:api2) { instance_double(Datadog::Profiling::TraceIdentifiers::Ddtrace, 'api2') } - subject(:trace_identifiers_helper) { described_class.new(supported_apis: [api1, api2]) } + subject(:trace_identifiers_helper) { described_class.new(tracer: nil, supported_apis: [api1, api2]) } describe '::DEFAULT_SUPPORTED_APIS' do it 'contains the Datadog and OpenTelemetry trace identifiers' do