diff --git a/Matrixfile b/Matrixfile index 4fc7a3b9ec6..2540b447657 100644 --- a/Matrixfile +++ b/Matrixfile @@ -14,8 +14,9 @@ '' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby' }, 'profiling:main' => { - 'opentelemetry' => '❌ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ❌ jruby', - '' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby' + 'opentelemetry' => '❌ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ❌ jruby', + 'opentelemetry_otlp' => '❌ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ❌ jruby', + '' => '✅ 2.5 / ✅ 2.6 / ✅ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby', }, 'profiling:ractors' => { '' => '❌ 2.5 / ❌ 2.6 / ❌ 2.7 / ✅ 3.0 / ✅ 3.1 / ✅ 3.2 / ✅ 3.3 / ✅ 3.4 / ✅ jruby' diff --git a/appraisal/ruby-2.6.rb b/appraisal/ruby-2.6.rb index 41360b29ae8..99d7925eff4 100644 --- a/appraisal/ruby-2.6.rb +++ b/appraisal/ruby-2.6.rb @@ -247,6 +247,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + [3, 4, 5].each do |n| appraise "redis-#{n}" do gem 'redis', "~> #{n}" diff --git a/appraisal/ruby-2.7.rb b/appraisal/ruby-2.7.rb index 1f30aa2a7b5..7556535a20b 100644 --- a/appraisal/ruby-2.7.rb +++ b/appraisal/ruby-2.7.rb @@ -250,6 +250,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + [3, 4, 5].each do |n| appraise "redis-#{n}" do gem 'redis', "~> #{n}" diff --git a/appraisal/ruby-3.0.rb b/appraisal/ruby-3.0.rb index 01422fb46c1..aef6022d35d 100644 --- a/appraisal/ruby-3.0.rb +++ b/appraisal/ruby-3.0.rb @@ -169,6 +169,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + appraise 'contrib-old' do gem 'dalli', '< 3.0.0' gem 'presto-client', '>= 0.5.14' # Renamed to trino-client in >= 1.0 diff --git a/appraisal/ruby-3.1.rb b/appraisal/ruby-3.1.rb index 01422fb46c1..aef6022d35d 100644 --- a/appraisal/ruby-3.1.rb +++ b/appraisal/ruby-3.1.rb @@ -169,6 +169,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + appraise 'contrib-old' do gem 'dalli', '< 3.0.0' gem 'presto-client', '>= 0.5.14' # Renamed to trino-client in >= 1.0 diff --git a/appraisal/ruby-3.2.rb b/appraisal/ruby-3.2.rb index 01422fb46c1..aef6022d35d 100644 --- a/appraisal/ruby-3.2.rb +++ b/appraisal/ruby-3.2.rb @@ -169,6 +169,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + appraise 'contrib-old' do gem 'dalli', '< 3.0.0' gem 'presto-client', '>= 0.5.14' # Renamed to trino-client in >= 1.0 diff --git a/appraisal/ruby-3.3.rb b/appraisal/ruby-3.3.rb index 7f59d0054e1..bd1c1b01766 100644 --- a/appraisal/ruby-3.3.rb +++ b/appraisal/ruby-3.3.rb @@ -169,6 +169,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + appraise 'contrib-old' do gem 'dalli', '< 3.0.0' gem 'presto-client', '>= 0.5.14' # Renamed to trino-client in >= 1.0 diff --git a/appraisal/ruby-3.4.rb b/appraisal/ruby-3.4.rb index 27a7711d172..cea7d734521 100644 --- a/appraisal/ruby-3.4.rb +++ b/appraisal/ruby-3.4.rb @@ -170,6 +170,11 @@ gem 'opentelemetry-sdk', '~> 1.1' end +appraise 'opentelemetry_otlp' do + gem 'opentelemetry-sdk', '~> 1.1' + gem 'opentelemetry-exporter-otlp' +end + appraise 'contrib-old' do gem 'dalli', '< 3.0.0' gem 'presto-client', '>= 0.5.14' # Renamed to trino-client in >= 1.0 diff --git a/ext/datadog_profiling_native_extension/collectors_thread_context.c b/ext/datadog_profiling_native_extension/collectors_thread_context.c index 8a449dc7a28..62bdc902eb8 100644 --- a/ext/datadog_profiling_native_extension/collectors_thread_context.c +++ b/ext/datadog_profiling_native_extension/collectors_thread_context.c @@ -86,6 +86,17 @@ static ID at_otel_values_id; // id of :@otel_values in Ruby static ID at_parent_span_id_id; // id of :@parent_span_id in Ruby static ID at_datadog_trace_id; // id of :@datadog_trace in Ruby +// Used to support reading trace identifiers from the opentelemetry Ruby library when the ddtrace gem tracing +// integration is NOT in use. +static ID at_span_id_id; // id of :@span_id in Ruby +static ID at_trace_id_id; // id of :@trace_id in Ruby +static ID at_entries_id; // id of :@entries in Ruby +static ID at_context_id; // id of :@context in Ruby +static ID at_kind_id; // id of :@kind in Ruby +static ID at_name_id; // id of :@name in Ruby +static ID server_id; // id of :server in Ruby +static ID otel_context_storage_id; // id of :__opentelemetry_context_storage__ in Ruby + // Contains state for a single ThreadContext instance struct thread_context_collector_state { // Note: Places in this file that usually need to be changed when this struct is changed are tagged with @@ -164,6 +175,11 @@ struct trace_identifiers { VALUE trace_endpoint; }; +struct otel_span { + VALUE span; + VALUE span_context; +}; + static void thread_context_collector_typed_data_mark(void *state_ptr); static void thread_context_collector_typed_data_free(void *state_ptr); static int hash_map_per_thread_context_mark(st_data_t key_thread, st_data_t _value, st_data_t _argument); @@ -237,6 +253,13 @@ static void ddtrace_otel_trace_identifiers_for( VALUE otel_values ); static VALUE _native_sample_skipped_allocation_samples(DDTRACE_UNUSED VALUE self, VALUE collector_instance, VALUE skipped_samples); +static void otel_without_ddtrace_trace_identifiers_for( + struct thread_context_collector_state *state, + VALUE thread, + struct trace_identifiers *trace_identifiers_result +); +static struct otel_span otel_span_and_context_from(VALUE otel_context, VALUE otel_current_span_key); +static uint64_t otel_span_id_to_uint(VALUE otel_span_id); void collectors_thread_context_init(VALUE profiling_module) { VALUE collectors_module = rb_define_module_under(profiling_module, "Collectors"); @@ -278,6 +301,14 @@ void collectors_thread_context_init(VALUE profiling_module) { at_otel_values_id = rb_intern_const("@otel_values"); at_parent_span_id_id = rb_intern_const("@parent_span_id"); at_datadog_trace_id = rb_intern_const("@datadog_trace"); + at_span_id_id = rb_intern_const("@span_id"); + at_trace_id_id = rb_intern_const("@trace_id"); + at_entries_id = rb_intern_const("@entries"); + at_context_id = rb_intern_const("@context"); + at_kind_id = rb_intern_const("@kind"); + at_name_id = rb_intern_const("@name"); + server_id = rb_intern_const("server"); + otel_context_storage_id = rb_intern_const("__opentelemetry_context_storage__"); gc_profiling_init(); } @@ -759,6 +790,11 @@ static void trigger_sample_for_thread( struct trace_identifiers trace_identifiers_result = {.valid = false, .trace_endpoint = Qnil}; trace_identifiers_for(state, thread, &trace_identifiers_result); + if (!trace_identifiers_result.valid) { + // If we couldn't get something with ddtrace, let's see if we can get some trace identifiers from opentelemetry directly + otel_without_ddtrace_trace_identifiers_for(state, thread, &trace_identifiers_result); + } + if (trace_identifiers_result.valid) { labels[label_pos++] = (ddog_prof_Label) {.key = DDOG_CHARSLICE_C("local root span id"), .num = trace_identifiers_result.local_root_span_id}; labels[label_pos++] = (ddog_prof_Label) {.key = DDOG_CHARSLICE_C("span id"), .num = trace_identifiers_result.span_id}; @@ -1372,25 +1408,31 @@ static ddog_CharSlice ruby_value_type_to_class_name(enum ruby_value_type type) { } } +// Used to access OpenTelemetry::Trace.const_get(:CURRENT_SPAN_KEY). Will raise exceptions if it fails. +static VALUE read_otel_current_span_key_const(DDTRACE_UNUSED VALUE _unused) { + VALUE opentelemetry_module = rb_const_get(rb_cObject, rb_intern("OpenTelemetry")); + ENFORCE_TYPE(opentelemetry_module, T_MODULE); + VALUE trace_module = rb_const_get(opentelemetry_module, rb_intern("Trace")); + ENFORCE_TYPE(trace_module, T_MODULE); + return rb_const_get(trace_module, rb_intern("CURRENT_SPAN_KEY")); +} + static VALUE get_otel_current_span_key(struct thread_context_collector_state *state) { if (state->otel_current_span_key == Qnil) { - VALUE datadog_module = rb_const_get(rb_cObject, rb_intern("Datadog")); - VALUE opentelemetry_module = rb_const_get(datadog_module, rb_intern("OpenTelemetry")); - VALUE api_module = rb_const_get(opentelemetry_module, rb_intern("API")); - VALUE context_module = rb_const_get(api_module, rb_intern_const("Context")); - VALUE current_span_key = rb_const_get(context_module, rb_intern_const("CURRENT_SPAN_KEY")); - - if (current_span_key == Qnil) { - rb_raise(rb_eRuntimeError, "Unexpected: Missing Datadog::OpenTelemetry::API::Context::CURRENT_SPAN_KEY"); - } + // If this fails, we want to fail gracefully, rather than raise an exception (e.g. if the opentelemetry gem + // gets refactored, we should not fall on our face) + VALUE span_key = rb_protect(read_otel_current_span_key_const, Qnil, NULL); + + // Marks when we failed to get the value, so we don't wasting resources trying + VALUE not_found_marker = Qfalse; - state->otel_current_span_key = current_span_key; + state->otel_current_span_key = span_key != Qnil ? span_key : not_found_marker; } return state->otel_current_span_key; } -// This method gets used when ddtrace is being used indirectly via the otel APIs. Information gets stored slightly +// This method gets used when ddtrace is being used indirectly via the opentelemetry APIs. Information gets stored slightly // differently, and this codepath handles it. static void ddtrace_otel_trace_identifiers_for( struct thread_context_collector_state *state, @@ -1410,6 +1452,7 @@ static void ddtrace_otel_trace_identifiers_for( if (resolved_numeric_span_id == Qnil) return; VALUE otel_current_span_key = get_otel_current_span_key(state); + if (otel_current_span_key == Qfalse) return; VALUE current_trace = *active_trace; // ddtrace uses a different structure when spans are created from otel, where each otel span will have a unique ddtrace @@ -1462,3 +1505,121 @@ static VALUE _native_sample_skipped_allocation_samples(DDTRACE_UNUSED VALUE self thread_context_collector_sample_skipped_allocation_samples(collector_instance, NUM2UINT(skipped_samples)); return Qtrue; } + +// This method differs from trace_identifiers_for/ddtrace_otel_trace_identifiers_for to support the situation where +// the opentelemetry ruby library is being used for tracing AND the ddtrace tracing bits are not involved at all. +// +// Thus, in this case, we're directly reading from the opentelemetry stuff, which is different to how ddtrace tracing +// does it. +// +// This is somewhat brittle: we're coupling on internal details of the opentelemetry gem to get what we need. In the +// future maybe the otel ruby folks would be open to having a nice public way of getting this data that suits the +// usecase of profilers. +// Until then, the strategy below is to be extremely defensive, and if anything is out of place, we immediately return +// and give up on getting trace data from opentelemetry. (Thus, worst case would be -- you upgrade opentelemetry and +// profiling features relying on reading this data stop working, but you'll still get profiles and the app will be +// otherwise undisturbed). +// +// Specifically, the way this works is: +// 1. The latest entry in the opentelemetry context storage represents the current span (if any). We take the span id +// and trace id from this span. +// 2. To find the local root span id, we walk the context storage backwards from the current span, and find the earliest +// entry in the context storage that has the same trace id as the current span; we use the found span as the local +// root span id. +// This matches the semantics of how ddtrace tracing creates a TraceOperation and assigns a local root span to it. +static void otel_without_ddtrace_trace_identifiers_for( + struct thread_context_collector_state *state, + VALUE thread, + struct trace_identifiers *trace_identifiers_result +) { + VALUE context_storage = rb_thread_local_aref(thread, otel_context_storage_id /* __opentelemetry_context_storage__ */); + + // If it exists, context_storage is expected to be an Array[OpenTelemetry::Context] + if (context_storage == Qnil || !RB_TYPE_P(context_storage, T_ARRAY)) return; + + VALUE otel_current_span_key = get_otel_current_span_key(state); + if (otel_current_span_key == Qfalse) return; + + int active_context_index = RARRAY_LEN(context_storage) - 1; + if (active_context_index < 0) return; + + struct otel_span active_span_and_context = otel_span_and_context_from(rb_ary_entry(context_storage, active_context_index), otel_current_span_key); + // If it exists, active_span_context is expected to be a OpenTelemetry::Trace::SpanContext (don't confuse it with OpenTelemetry::Context) + VALUE active_span_context = active_span_and_context.span_context; + if (active_span_context == Qnil) return; + + // Get the span id and trace id from the active span... + VALUE active_span_id = rb_ivar_get(active_span_context, at_span_id_id /* @span_id */); + VALUE active_span_trace_id = rb_ivar_get(active_span_context, at_trace_id_id /* @trace_id */); + if (active_span_id == Qnil || active_span_trace_id == Qnil || !RB_TYPE_P(active_span_id, T_STRING) || !RB_TYPE_P(active_span_trace_id, T_STRING)) return; + + VALUE local_root_span_id = active_span_id; + VALUE local_root_span = active_span_and_context.span; + + // Now find the oldest span starting from the active span that still has the same trace id as the active span + for (int i = active_context_index - 1; i >= 0; i--) { + struct otel_span span_and_context = otel_span_and_context_from(rb_ary_entry(context_storage, i), otel_current_span_key); + VALUE span_context = span_and_context.span_context; + if (span_context == Qnil) return; + + VALUE span_id = rb_ivar_get(span_context, at_span_id_id /* @span_id */); + VALUE span_trace_id = rb_ivar_get(span_context, at_trace_id_id /* @trace_id */); + if (span_id == Qnil || span_trace_id == Qnil || !RB_TYPE_P(span_id, T_STRING) || !RB_TYPE_P(span_trace_id, T_STRING)) return; + + if (rb_str_equal(active_span_trace_id, span_trace_id) == Qfalse) break; + + local_root_span_id = span_id; + local_root_span = span_and_context.span; + } + + // Convert the span ids into uint64_t to match what the Datadog tracer does + trace_identifiers_result->span_id = otel_span_id_to_uint(active_span_id); + trace_identifiers_result->local_root_span_id = otel_span_id_to_uint(local_root_span_id); + + if (trace_identifiers_result->span_id == 0 || trace_identifiers_result->local_root_span_id == 0) return; + + trace_identifiers_result->valid = true; + + if (!state->endpoint_collection_enabled) return; + + VALUE root_span_type = rb_ivar_get(local_root_span, at_kind_id /* @kind */); + // We filter out spans that don't have `kind: :server` + if (root_span_type == Qnil || !RB_TYPE_P(root_span_type, T_SYMBOL) || SYM2ID(root_span_type) != server_id) return; + + VALUE trace_resource = rb_ivar_get(local_root_span, at_name_id /* @name */); + if (!RB_TYPE_P(trace_resource, T_STRING)) return; + + trace_identifiers_result->trace_endpoint = trace_resource; +} + +static struct otel_span otel_span_and_context_from(VALUE otel_context, VALUE otel_current_span_key) { + struct otel_span failed = {.span = Qnil, .span_context = Qnil}; + + if (otel_context == Qnil) return failed; + + VALUE context_entries = rb_ivar_get(otel_context, at_entries_id /* @entries */); + if (context_entries == Qnil || !RB_TYPE_P(context_entries, T_HASH)) return failed; + + // If it exists, context_entries is expected to be a Hash[OpenTelemetry::Context::Key, OpenTelemetry::Trace::Span] + VALUE span = rb_hash_lookup(context_entries, otel_current_span_key); + if (span == Qnil) return failed; + + return (struct otel_span) {.span = span, .span_context = rb_ivar_get(span, at_context_id /* @context */)}; +} + +// Otel span ids are represented as a big-endian 8-byte string +static uint64_t otel_span_id_to_uint(VALUE otel_span_id) { + if (!RB_TYPE_P(otel_span_id, T_STRING) || RSTRING_LEN(otel_span_id) != 8) { return 0; } + + unsigned char *span_bytes = (unsigned char*) StringValuePtr(otel_span_id); + + return \ + ((uint64_t)span_bytes[0] << 56) | + ((uint64_t)span_bytes[1] << 48) | + ((uint64_t)span_bytes[2] << 40) | + ((uint64_t)span_bytes[3] << 32) | + ((uint64_t)span_bytes[4] << 24) | + ((uint64_t)span_bytes[5] << 16) | + ((uint64_t)span_bytes[6] << 8) | + ((uint64_t)span_bytes[7]); +} diff --git a/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile b/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..4a3fa3b9931 --- /dev/null +++ b/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile @@ -0,0 +1,45 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1", "< 3.19.2"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..c56336685bd --- /dev/null +++ b/gemfiles/ruby_2.6_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,213 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.19.1-x86_64-linux) + googleapis-common-protos-types (1.12.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.1.0) + opentelemetry-common (0.19.7) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.24.2) + google-protobuf (~> 3.19) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.19.6) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.2.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.2.1) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.19.3) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + 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) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.4.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.30.0) + parser (>= 3.2.1.0) + rubocop-capybara (2.18.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.17.1) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, < 3.19.2, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile b/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..600f07e2202 --- /dev/null +++ b/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile @@ -0,0 +1,45 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..27dabc78074 --- /dev/null +++ b/gemfiles/ruby_2.7_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,213 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.25.3-x86_64-linux) + googleapis-common-protos-types (1.13.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.1.0) + opentelemetry-common (0.19.7) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.24.2) + google-protobuf (~> 3.19) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.19.6) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.2.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.2.1) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.19.3) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.5.0) + colorize (~> 0.8.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile b/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..6c00639e538 --- /dev/null +++ b/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile @@ -0,0 +1,46 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..9aaa0849643 --- /dev/null +++ b/gemfiles/ruby_3.0_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,215 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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 (1.1.0) + concurrent-ruby (1.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.25.3-x86_64-linux) + googleapis-common-protos-types (1.13.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.3.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.4.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.6.0) + colorize (~> 1.1.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile b/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..6c00639e538 --- /dev/null +++ b/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile @@ -0,0 +1,46 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-byebug" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..9aaa0849643 --- /dev/null +++ b/gemfiles/ruby_3.1_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,215 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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 (1.1.0) + concurrent-ruby (1.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.25.3-x86_64-linux) + googleapis-common-protos-types (1.13.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.3.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.4.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.6.0) + colorize (~> 1.1.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-byebug + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile b/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..359af0ac0ce --- /dev/null +++ b/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile @@ -0,0 +1,45 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..7efab72974e --- /dev/null +++ b/gemfiles/ruby_3.2_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,210 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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 (1.1.0) + concurrent-ruby (1.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.25.3-x86_64-linux) + googleapis-common-protos-types (1.13.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.3.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.4.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.6.0) + colorize (~> 1.1.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile b/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile new file mode 100644 index 00000000000..359af0ac0ce --- /dev/null +++ b/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile @@ -0,0 +1,45 @@ +# This file was generated by Appraisal + +source "https://rubygems.org" + +gem "appraisal", "~> 2.4.0" +gem "benchmark-ips", "~> 2.8" +gem "benchmark-memory", "< 0.2" +gem "builder" +gem "climate_control", "~> 0.2.0" +gem "concurrent-ruby" +gem "extlz4", "~> 0.3", ">= 0.3.3" +gem "json-schema", "< 3" +gem "memory_profiler", "~> 0.9" +gem "os", "~> 1.1" +gem "pimpmychangelog", ">= 0.1.2" +gem "pry" +gem "pry-stack_explorer" +gem "rake", ">= 10.5" +gem "rake-compiler", "~> 1.1", ">= 1.1.1" +gem "redcarpet", "~> 3.4" +gem "rspec", "~> 3.12" +gem "rspec-collection_matchers", "~> 1.1" +gem "rspec-wait", "~> 0" +gem "rspec_junit_formatter", ">= 0.5.1" +gem "rspec_n", "~> 1.3" +gem "simplecov", git: "https://github.com/DataDog/simplecov", ref: "3bb6b7ee58bf4b1954ca205f50dd44d6f41c57db" +gem "simplecov-cobertura", "~> 2.1.0" +gem "warning", "~> 1" +gem "webmock", ">= 3.10.0" +gem "webrick", ">= 1.7.0" +gem "yard", "~> 0.9" +gem "rubocop", "~> 1.50.0", require: false +gem "rubocop-packaging", "~> 0.5.2", require: false +gem "rubocop-performance", "~> 1.9", require: false +gem "rubocop-rspec", ["~> 2.20", "< 2.21"], require: false +gem "dogstatsd-ruby", ">= 3.3.0", "!= 5.0.0", "!= 5.0.1", "!= 5.1.0" +gem "google-protobuf", ["~> 3.0", "!= 3.7.0", "!= 3.7.1"] +gem "opentelemetry-sdk", "~> 1.1" +gem "opentelemetry-exporter-otlp" + +group :check do + +end + +gemspec path: "../" diff --git a/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile.lock b/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile.lock new file mode 100644 index 00000000000..7efab72974e --- /dev/null +++ b/gemfiles/ruby_3.3_opentelemetry_otlp.gemfile.lock @@ -0,0 +1,210 @@ +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 (1.20.0) + datadog-ci (~> 0.7.0) + debase-ruby_core_source (= 3.3.1) + libdatadog (~> 6.0.0.2.0) + libddwaf (~> 1.14.0.0.0) + msgpack + +GEM + remote: https://rubygems.org/ + specs: + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + appraisal (2.4.1) + bundler + rake + thor (>= 0.14.0) + ast (2.4.2) + benchmark-ips (2.13.0) + benchmark-memory (0.1.2) + memory_profiler (~> 0.9) + bigdecimal (3.1.6) + 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 (1.1.0) + concurrent-ruby (1.2.3) + crack (1.0.0) + bigdecimal + rexml + cri (2.15.11) + datadog-ci (0.7.0) + msgpack + debase-ruby_core_source (3.3.1) + debug_inspector (1.2.0) + diff-lcs (1.5.1) + docile (1.4.0) + dogstatsd-ruby (5.6.1) + extlz4 (0.3.4) + ffi (1.16.3) + google-protobuf (3.25.3-x86_64-linux) + googleapis-common-protos-types (1.13.0) + google-protobuf (~> 3.18) + hashdiff (1.1.0) + json (2.7.1) + json-schema (2.8.1) + addressable (>= 2.4) + libdatadog (6.0.0.2.0-x86_64-linux) + libddwaf (1.14.0.0.0-x86_64-linux) + ffi (~> 1.0) + memory_profiler (0.9.14) + method_source (1.0.0) + msgpack (1.7.2) + opentelemetry-api (1.2.5) + opentelemetry-common (0.20.1) + opentelemetry-api (~> 1.0) + opentelemetry-exporter-otlp (0.26.3) + google-protobuf (~> 3.14) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions + opentelemetry-registry (0.3.0) + opentelemetry-api (~> 1.1) + opentelemetry-sdk (1.4.0) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-registry (~> 0.2) + opentelemetry-semantic_conventions + opentelemetry-semantic_conventions (1.10.0) + opentelemetry-api (~> 1.0) + os (1.1.4) + parallel (1.24.0) + parser (3.3.0.5) + ast (~> 2.4.1) + racc + pimpmychangelog (0.1.3) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-stack_explorer (0.6.1) + binding_of_caller (~> 1.0) + pry (~> 0.13) + public_suffix (5.0.4) + racc (1.7.3) + rainbow (3.1.1) + rake (13.1.0) + rake-compiler (1.2.7) + rake + redcarpet (3.6.0) + regexp_parser (2.9.0) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-collection_matchers (1.2.1) + rspec-expectations (>= 2.99.0.beta1) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + rspec-wait (0.0.9) + rspec (>= 3, < 4) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) + rspec_n (1.6.0) + colorize (~> 1.1.0) + cri (~> 2.15.3) + rubocop (1.50.2) + json (~> 2.3) + parallel (~> 1.10) + parser (>= 3.2.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.1) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-packaging (0.5.2) + rubocop (>= 1.33, < 2.0) + rubocop-performance (1.20.2) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.30.0, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) + ruby-progressbar (1.13.0) + simplecov-cobertura (2.1.0) + rexml + simplecov (~> 0.19) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + thor (1.3.1) + unicode-display_width (2.5.0) + warning (1.3.0) + webmock (3.23.0) + addressable (>= 2.8.0) + crack (>= 0.3.2) + hashdiff (>= 0.4.0, < 2.0.0) + webrick (1.8.1) + yard (0.9.36) + +PLATFORMS + x86_64-linux + +DEPENDENCIES + appraisal (~> 2.4.0) + benchmark-ips (~> 2.8) + benchmark-memory (< 0.2) + builder + climate_control (~> 0.2.0) + concurrent-ruby + ddtrace! + dogstatsd-ruby (>= 3.3.0, != 5.1.0, != 5.0.1, != 5.0.0) + extlz4 (~> 0.3, >= 0.3.3) + google-protobuf (~> 3.0, != 3.7.1, != 3.7.0) + json-schema (< 3) + memory_profiler (~> 0.9) + opentelemetry-exporter-otlp + opentelemetry-sdk (~> 1.1) + os (~> 1.1) + pimpmychangelog (>= 0.1.2) + pry + pry-stack_explorer + rake (>= 10.5) + rake-compiler (~> 1.1, >= 1.1.1) + redcarpet (~> 3.4) + rspec (~> 3.12) + rspec-collection_matchers (~> 1.1) + rspec-wait (~> 0) + rspec_junit_formatter (>= 0.5.1) + rspec_n (~> 1.3) + rubocop (~> 1.50.0) + rubocop-packaging (~> 0.5.2) + rubocop-performance (~> 1.9) + rubocop-rspec (~> 2.20, < 2.21) + simplecov! + simplecov-cobertura (~> 2.1.0) + warning (~> 1) + webmock (>= 3.10.0) + webrick (>= 1.7.0) + yard (~> 0.9) + +BUNDLED WITH + 2.3.26 diff --git a/lib/datadog/profiling/collectors/info.rb b/lib/datadog/profiling/collectors/info.rb index 7c327b4d3f3..232d3e21cd4 100644 --- a/lib/datadog/profiling/collectors/info.rb +++ b/lib/datadog/profiling/collectors/info.rb @@ -2,6 +2,7 @@ require "set" require "time" +require "libdatadog" module Datadog module Profiling @@ -62,11 +63,19 @@ def collect_application_info(settings) def collect_profiler_info(settings) unless @profiler_info lib_datadog_gem = ::Gem.loaded_specs["libdatadog"] + + libdatadog_version = + if lib_datadog_gem + "#{lib_datadog_gem.version}-#{lib_datadog_gem.platform}" + else + # In some cases, Gem.loaded_specs may not be available, as in + # https://github.com/DataDog/dd-trace-rb/pull/1506; let's use the version directly + "#{Libdatadog::VERSION}-(unknown)" + end + @profiler_info = { - # TODO: If profiling is extracted and its version diverges from the datadog gem, this is inaccurate. - # Update if this ever occurs. version: Datadog::Core::Environment::Identity.gem_datadog_version, - libdatadog: "#{lib_datadog_gem.version}-#{lib_datadog_gem.platform}", + libdatadog: libdatadog_version, settings: collect_settings_recursively(settings.profiling), }.freeze end diff --git a/spec/datadog/profiling/collectors/info_spec.rb b/spec/datadog/profiling/collectors/info_spec.rb index afee4913464..07adaeeeb9f 100644 --- a/spec/datadog/profiling/collectors/info_spec.rb +++ b/spec/datadog/profiling/collectors/info_spec.rb @@ -88,6 +88,23 @@ ) end end + + describe "libdatadog version reporting" do + it "reports the libdatadog version, including platform" do + libdatadog_gem = Gem.loaded_specs["libdatadog"] + + expect(info.dig(:profiler, :libdatadog)).to eq("#{libdatadog_gem.version}-#{libdatadog_gem.platform}") + end + + context "when libdatadog is not available in loaded_specs" do + it "reports the libdatadog version, with an unknown platform" do + expect(Gem.loaded_specs).to receive(:[]).with("libdatadog").and_return(nil) + allow(Gem.loaded_specs).to receive(:[]).and_call_original + + expect(info.dig(:profiler, :libdatadog)).to eq("#{Libdatadog::VERSION}-(unknown)") + end + end + end end end diff --git a/spec/datadog/profiling/collectors/thread_context_spec.rb b/spec/datadog/profiling/collectors/thread_context_spec.rb index a0112ae2f37..5b0b085086d 100644 --- a/spec/datadog/profiling/collectors/thread_context_spec.rb +++ b/spec/datadog/profiling/collectors/thread_context_spec.rb @@ -364,6 +364,7 @@ def another_way_of_calling_sample(profiler_overhead_stack_thread: Thread.current context "when thread has a tracer context, and a trace is in progress" do let(:root_span_type) { "not-web" } + let(:allow_invalid_ids) { false } let(:t1) do Thread.new(ready_queue) do |ready_queue| @@ -381,8 +382,10 @@ def another_way_of_calling_sample(profiler_overhead_stack_thread: Thread.current end before do - expect(@t1_span_id.to_i).to be > 0 - expect(@t1_local_root_span_id.to_i).to be > 0 + unless allow_invalid_ids + expect(@t1_span_id.to_i).to be > 0 + expect(@t1_local_root_span_id.to_i).to be > 0 + end end it 'includes "local root span id" and "span id" labels in the samples' do @@ -539,7 +542,14 @@ def self.otel_sdk_available? false end - context "when trace comes from otel sdk", if: otel_sdk_available? do + def self.otel_otlp_exporter_available? + require "opentelemetry-exporter-otlp" + true + rescue LoadError + false + end + + context "when trace comes from otel sdk", if: otel_sdk_available? && !otel_otlp_exporter_available? do let(:otel_tracer) do require "datadog/opentelemetry" @@ -672,11 +682,216 @@ def self.otel_sdk_available? end end + context( + "when trace comes from otel sdk and the ddtrace otel support is not loaded", + if: otel_sdk_available? && otel_otlp_exporter_available? + ) do + let(:otel_tracer) do + if defined?(Datadog::OpenTelemetry::LOADED) + raise "This test should not be run with the ddtrace otel support loaded. " \ + "Make sure that no `require 'datadog/opentelemetry'` runs when testing this spec." + end + + OpenTelemetry::SDK.configure + OpenTelemetry.tracer_provider.tracer("ddtrace-profiling-test") + end + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, otel_tracer| + otel_tracer.in_span("profiler.test") do |span| + @t1_span_id = otel_span_id_to_i(span.context.span_id) + @t1_local_root_span_id = @t1_span_id + ready_queue << true + sleep + end + end + end + + after do + OpenTelemetry.tracer_provider.shutdown + end + + def otel_span_id_to_i(span_id) + span_id.unpack1("Q>").to_i + end + + it 'includes "local root span id" and "span id" labels in the samples' do + sample + + expect(t1_sample.labels).to include( + "local root span id": @t1_local_root_span_id.to_i, + "span id": @t1_span_id.to_i, + ) + end + + it 'does not include the "trace endpoint" label' do + sample + + expect(t1_sample.labels).to_not include("trace endpoint": anything) + end + + context "when there are multiple otel spans nested" do + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, otel_tracer| + otel_tracer.in_span("profiler.test") do |root_span| + @t1_local_root_span_id = otel_span_id_to_i(root_span.context.span_id) + otel_tracer.in_span("profiler.test.nested.1") do + otel_tracer.in_span("profiler.test.nested.2") do + otel_tracer.in_span("profiler.test.nested.3") do |leaf_span| + @t1_span_id = otel_span_id_to_i(leaf_span.context.span_id) + ready_queue << true + sleep + end + end + end + end + end + end + + it 'includes "local root span id" and "span id" labels in the samples' do + sample + + expect(t1_sample.labels).to include( + "local root span id": @t1_local_root_span_id.to_i, + "span id": @t1_span_id.to_i, + ) + end + end + + context "when the context storage contains spans related to multiple traces" do + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, otel_tracer| + otel_tracer.in_span("another.trace") do # <-- Is ignored + OpenTelemetry::Trace.with_span( + otel_tracer.start_span("profiler.test", with_parent: OpenTelemetry::Context.empty) + ) do |root_span| + @t1_local_root_span_id = otel_span_id_to_i(root_span.context.span_id) + otel_tracer.in_span("profiler.test.nested.1") do |leaf_span| + @t1_span_id = otel_span_id_to_i(leaf_span.context.span_id) + ready_queue << true + sleep + end + end + end + end + end + + it 'includes "local root span id" and "span id" labels in the samples' do + sample + + expect(t1_sample.labels).to include( + "local root span id": @t1_local_root_span_id.to_i, + "span id": @t1_span_id.to_i, + ) + end + end + + context "when local root span kind is :server" do + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, otel_tracer| + otel_tracer.in_span("profiler.test", kind: :server) do |span| + @t1_span_id = otel_span_id_to_i(span.context.span_id) + @t1_local_root_span_id = @t1_span_id + ready_queue << true + sleep + end + end + end + + it 'includes the "trace endpoint" label' do + sample + + expect(t1_sample.labels).to include("trace endpoint": "profiler.test") + end + + context "when there are multiple otel spans nested" do + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, otel_tracer| + otel_tracer.in_span("profiler.test", kind: :server) do |root_span| + @t1_local_root_span_id = otel_span_id_to_i(root_span.context.span_id) + otel_tracer.in_span("profiler.test.nested.1") do + otel_tracer.in_span("profiler.test.nested.2") do + otel_tracer.in_span("profiler.test.nested.3") do |leaf_span| + @t1_span_id = otel_span_id_to_i(leaf_span.context.span_id) + ready_queue << true + sleep + end + end + end + end + end + end + + it 'includes the "trace endpoint" label set to the root span name' do + sample + + expect(t1_sample.labels).to include("trace endpoint": "profiler.test") + end + end + + context "when endpoint_collection_enabled is false" do + let(:endpoint_collection_enabled) { false } + + it 'still includes "local root span id" and "span id" labels in the samples' do + sample + + expect(t1_sample.labels).to include( + "local root span id": @t1_local_root_span_id.to_i, + "span id": @t1_span_id.to_i, + ) + end + + it 'does not include the "trace endpoint" label' do + sample + + expect(t1_sample.labels).to_not include("trace endpoint": anything) + end + end + end + + context "when current span is invalid" do + let(:allow_invalid_ids) { true } + + let(:t1) do + Thread.new(ready_queue, otel_tracer) do |ready_queue, _otel_tracer| + OpenTelemetry::Trace.with_span(OpenTelemetry::Trace::Span::INVALID) do |span| + @t1_span_id = otel_span_id_to_i(span.context.span_id) + @t1_local_root_span_id = @t1_span_id + ready_queue << true + sleep + end + end + end + + before do + expect(@t1_span_id).to be 0 + end + + it 'does not include the "local root span id" and "span id" labels in the samples' do + sample + + expect(t1_sample.labels).to_not include( + "local root span id": anything, + "span id": anything, + ) + end + end + end + context "when trace comes from otel sdk (warning)", unless: otel_sdk_available? do it "is not being tested" do skip "Skipping OpenTelemetry tests because `opentelemetry-sdk` gem is not available" end end + + context "when trace comes from otel sdk (warning)", if: otel_sdk_available? do + not_being_tested = otel_otlp_exporter_available? ? "otel sdk with ddtrace" : "otel sdk without ddtrace" + + it "#{not_being_tested} is not being tested" do + skip "The tests for otel sdk with and without ddtrace are mutually exclusive, because ddtrace monkey " \ + "patches the otel sdk in a way that makes it hard to remove. To test both configurations, run this " \ + "spec with and without `opentelemetry-exporter-otlp` on your Gemfile (hint: can be done using appraisals)." + end + end end end end diff --git a/vendor/rbs/libdatadog/0/libdatadog.rbs b/vendor/rbs/libdatadog/0/libdatadog.rbs index 04a25f36cfd..bd30d8e9922 100644 --- a/vendor/rbs/libdatadog/0/libdatadog.rbs +++ b/vendor/rbs/libdatadog/0/libdatadog.rbs @@ -2,4 +2,6 @@ module Libdatadog def self.path_to_crashtracking_receiver_binary: () -> ::String? def self.ld_library_path: () -> ::String? def self.pkgconfig_folder: () -> ::String? + + VERSION: ::String end