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/Rakefile b/Rakefile index 1bd6dbaf1b8..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/**/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/docs/GettingStarted.md b/docs/GettingStarted.md index e47ed2b57b4..8f042121956 100644 --- a/docs/GettingStarted.md +++ b/docs/GettingStarted.md @@ -86,6 +86,9 @@ 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) + - [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) @@ -2491,12 +2494,31 @@ 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. 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/docs/ProfilingDevelopment.md b/docs/ProfilingDevelopment.md index 77ba39defe0..31fd3cfb276 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. @@ -41,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 | +---------+--+ +-+-------+-+ | | | @@ -86,3 +81,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. 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/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 a6c39cf56ea..c1ecd52cc0b 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 @@ -95,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 1c86462e884..38fcdd0b8e5 100644 --- a/lib/ddtrace/profiling/collectors/stack.rb +++ b/lib/ddtrace/profiling/collectors/stack.rb @@ -11,8 +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. # - # rubocop:disable Metrics/ClassLength - 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,6 +29,7 @@ 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, @@ -38,6 +39,7 @@ def initialize( ) @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 @@ -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/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/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb new file mode 100644 index 00000000000..258a1cdf71a --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/ddtrace.rb @@ -0,0 +1,25 @@ +# 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 if tracer.respond_to?(:active_correlation)) + end + + def trace_identifiers_for(thread) + return unless @tracer + + 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 + 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..5a3245364c8 --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/helper.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'ddtrace/profiling/trace_identifiers/ddtrace' +require 'ddtrace/profiling/trace_identifiers/opentelemetry' + +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 + DEFAULT_SUPPORTED_APIS = [ + ::Datadog::Profiling::TraceIdentifiers::Ddtrace, + ::Datadog::Profiling::TraceIdentifiers::OpenTelemetry + ].freeze + private_constant :DEFAULT_SUPPORTED_APIS + + def initialize(tracer:, supported_apis: DEFAULT_SUPPORTED_APIS.map { |api| api.new(tracer: tracer) }) + @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/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb new file mode 100644 index 00000000000..c6f1d40e1ae --- /dev/null +++ b/lib/ddtrace/profiling/trace_identifiers/opentelemetry.rb @@ -0,0 +1,107 @@ +# 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 + @current_context_key = nil + end + + def trace_identifiers_for(thread) + return unless available? + + 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 + [ + 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 false unless 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. + # + # 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 = supported? + @checked_version = 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 + + def supported? + 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; ' \ + "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 + + 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 + end + end +end 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/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/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 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 new file mode 100644 index 00000000000..0db73a9d2da --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/ddtrace_spec.rb @@ -0,0 +1,62 @@ +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 } + + it do + expect(trace_identifiers_for).to be nil + end + end + + 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 + 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..d5ee5be3621 --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/helper_spec.rb @@ -0,0 +1,60 @@ +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) } + 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(tracer: nil, 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) } + + 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 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..354b766b07a --- /dev/null +++ b/spec/ddtrace/profiling/trace_identifiers/opentelemetry_spec.rb @@ -0,0 +1,160 @@ +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-sdk' + + OpenTelemetry::SDK.configure + 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 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(thread).to receive(:[]).and_return(:dummy_context) + expect(OpenTelemetry::Trace) + .to receive(:current_span).with(:dummy_context).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(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 + expect(trace_identifiers_for).to be nil + 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 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 + + 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 } + + 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