From 52df45271fa87ab25507e656c02a923a21ad9d29 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 22 Aug 2024 14:23:05 -0700 Subject: [PATCH 01/15] feat: Add histogram explicit_bucket_boundaries advice The advisory parameter explicit_bucket_boundaries allows instrumentation authors to set bucket boundaries for histograms that differ from the default bucket set. Since this only applies to histograms, advice is not explicitly assigned in other instruments, however, shared methods will have an empty hash assigned as the default argument. Any key passed to advice will be accepted, but only the :explicit_bucket_boundaries symbol will have an effect. --- .../internal/proxy_instrument.rb | 7 ++++-- .../lib/opentelemetry/internal/proxy_meter.rb | 6 ++--- .../lib/opentelemetry/metrics/meter.rb | 6 ++--- .../test/opentelemetry/metrics/meter_test.rb | 15 +++++++++++ .../sdk/metrics/instrument/histogram.rb | 8 ++++++ .../instrument/synchronous_instrument.rb | 3 ++- .../lib/opentelemetry/sdk/metrics/meter.rb | 4 +-- .../sdk/metrics/instrument/histogram_test.rb | 25 +++++++++++++++++++ metrics_sdk/test/test_helper.rb | 4 +++ 9 files changed, 67 insertions(+), 11 deletions(-) diff --git a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb index 117a400778..a7f5e33f64 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb @@ -8,19 +8,22 @@ module OpenTelemetry module Internal # @api private class ProxyInstrument - def initialize(kind, name, unit, desc, callable) + def initialize(kind, name, unit, desc, callable, advice = {}) @kind = kind @name = name @unit = unit @desc = desc @callable = callable + @advice = advice @delegate = nil end def upgrade_with(meter) @delegate = case @kind - when :counter, :histogram, :up_down_counter + when :counter, :up_down_counter meter.send("create_#{@kind}", @name, unit: @unit, description: @desc) + when :histogram + meter.send("create_#{@kind}", @name, unit: @unit, description: @desc, advice: @advice) when :observable_counter, :observable_gauge, :observable_up_down_counter meter.send("create_#{@kind}", @name, unit: @unit, description: @desc, callback: @callback) end diff --git a/metrics_api/lib/opentelemetry/internal/proxy_meter.rb b/metrics_api/lib/opentelemetry/internal/proxy_meter.rb index 74d497c684..0731aa1bf5 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_meter.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_meter.rb @@ -38,13 +38,13 @@ def delegate=(meter) private - def create_instrument(kind, name, unit, description, callback) + def create_instrument(kind, name, unit, description, callback, advice = {}) super do - next ProxyInstrument.new(kind, name, unit, description, callback) if @delegate.nil? + next ProxyInstrument.new(kind, name, unit, description, callback, advice) if @delegate.nil? case kind when :counter then @delegate.create_counter(name, unit: unit, description: description) - when :histogram then @delegate.create_histogram(name, unit: unit, description: description) + when :histogram then @delegate.create_histogram(name, unit: unit, description: description, advice: advice) when :up_down_counter then @delegate.create_up_down_counter(name, unit: unit, description: description) when :observable_counter then @delegate.create_observable_counter(name, unit: unit, description: description, callback: callback) when :observable_gauge then @delegate.create_observable_gauge(name, unit: unit, description: description, callback: callback) diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index 1335437c02..b1c922308f 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -33,8 +33,8 @@ def create_counter(name, unit: nil, description: nil) create_instrument(:counter, name, unit, description, nil) { COUNTER } end - def create_histogram(name, unit: nil, description: nil) - create_instrument(:histogram, name, unit, description, nil) { HISTOGRAM } + def create_histogram(name, unit: nil, description: nil, advice: {}) + create_instrument(:histogram, name, unit, description, nil, advice) { HISTOGRAM } end def create_up_down_counter(name, unit: nil, description: nil) @@ -55,7 +55,7 @@ def create_observable_up_down_counter(name, callback:, unit: nil, description: n private - def create_instrument(kind, name, unit, description, callback) + def create_instrument(kind, name, unit, description, callback, advice = nil) raise InstrumentNameError if name.nil? raise InstrumentNameError if name.empty? raise InstrumentNameError unless NAME_REGEX.match?(name) diff --git a/metrics_api/test/opentelemetry/metrics/meter_test.rb b/metrics_api/test/opentelemetry/metrics/meter_test.rb index 493c373b5b..8158f4cd2d 100644 --- a/metrics_api/test/opentelemetry/metrics/meter_test.rb +++ b/metrics_api/test/opentelemetry/metrics/meter_test.rb @@ -69,5 +69,20 @@ meter.create_counter('a_counter', description: long_description) _(-> { meter.create_counter('b_counter', description: long_description + 'a') }).must_raise(INSTRUMENT_DESCRIPTION_ERROR) end + + describe 'histogram' do + it 'accepts advice' do + advice = {wisdom: 'this too shall pass'} + histogram = meter.create_histogram('histogram', description: 'stuff', unit: 'things', advice: advice) + + assert_equal histogram.instance_variable_get(:@advice) + end + + it 'does not require advice' do + histogram = meter.create_histogram('histogram', description: 'stuff', unit: 'things') + + assert_equal {}, histogram.advice + end + end end end diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 9cdcf60d80..40ba872bf0 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -32,6 +32,14 @@ def record(amount, attributes: nil) nil end + def register_with_new_metric_store(metric_store, aggregation: default_aggregation) + if @advice&.key?(:explicit_bucket_boundaries) + aggregation = OpenTelemetry::SDK::Metrics::Aggregation::ExplicitBucketHistogram.new(boundaries: @advice[:explicit_bucket_boundaries]) + end + + super + end + private def default_aggregation diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb index f5bf321f0a..c2d161b604 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb @@ -11,12 +11,13 @@ module Instrument # {SynchronousInstrument} contains the common functionality shared across # the synchronous instruments SDK instruments. class SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = {}) @name = name @unit = unit @description = description @instrumentation_scope = instrumentation_scope @meter_provider = meter_provider + @advice = advice @metric_streams = [] meter_provider.register_synchronous_instrument(self) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb index faf8e9adb1..8142fdb96d 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb @@ -33,12 +33,12 @@ def add_metric_reader(metric_reader) end end - def create_instrument(kind, name, unit, description, callback) + def create_instrument(kind, name, unit, description, callback, advice = {}) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) when :observable_counter then OpenTelemetry::SDK::Metrics::Instrument::ObservableCounter.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) - when :histogram then OpenTelemetry::SDK::Metrics::Instrument::Histogram.new(name, unit, description, @instrumentation_scope, @meter_provider) + when :histogram then OpenTelemetry::SDK::Metrics::Instrument::Histogram.new(name, unit, description, @instrumentation_scope, @meter_provider, advice) when :observable_gauge then OpenTelemetry::SDK::Metrics::Instrument::ObservableGauge.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) when :up_down_counter then OpenTelemetry::SDK::Metrics::Instrument::UpDownCounter.new(name, unit, description, @instrumentation_scope, @meter_provider) when :observable_up_down_counter then OpenTelemetry::SDK::Metrics::Instrument::ObservableUpDownCounter.new(name, unit, description, callback, @instrumentation_scope, @meter_provider) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb index bddc7f5568..a0024c31a0 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb @@ -35,4 +35,29 @@ _(last_snapshot[0].data_points[0].attributes).must_equal('foo' => 'bar') _(last_snapshot[0].aggregation_temporality).must_equal(:delta) end + + it 'can apply advice to change the explicit bucket boundaries' do + histogram = meter.create_histogram('histogram', unit: 's', description: 'test', advice: { explicit_bucket_boundaries: [5, 10, 15]}) + + histogram.record(0) + histogram.record(5) + histogram.record(5) + histogram.record(10) + histogram.record(20) + + metric_exporter.pull + last_snapshot = metric_exporter.metric_snapshots.last + _(last_snapshot[0].data_points[0].bucket_counts).must_equal([3, 1, 0, 1]) + + _(last_snapshot[0].name).must_equal('histogram') + _(last_snapshot[0].unit).must_equal('s') + _(last_snapshot[0].description).must_equal('test') + _(last_snapshot[0].instrumentation_scope.name).must_equal('test') + _(last_snapshot[0].data_points[0].count).must_equal(5) + _(last_snapshot[0].data_points[0].sum).must_equal(40) + _(last_snapshot[0].data_points[0].min).must_equal(0) + _(last_snapshot[0].data_points[0].max).must_equal(20) + _(last_snapshot[0].data_points[0].attributes).must_be_nil + _(last_snapshot[0].aggregation_temporality).must_equal(:delta) + end end diff --git a/metrics_sdk/test/test_helper.rb b/metrics_sdk/test/test_helper.rb index 99aa4deee0..c1e4c53c0b 100644 --- a/metrics_sdk/test/test_helper.rb +++ b/metrics_sdk/test/test_helper.rb @@ -13,6 +13,10 @@ require 'minitest/autorun' require 'pry' +# The metrics test output will include an error about a missing OTLP exporter +# unless we set the traces exporter to 'none' +ENV['OTEL_TRACES_EXPORTER'] = 'none' + # reset_metrics_sdk is a test helper used to clear # SDK configuration state between calls def reset_metrics_sdk From c72886857f15b6e122396ec581384f44cb7e89d3 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 22 Aug 2024 14:26:06 -0700 Subject: [PATCH 02/15] chore: Rubocop --- .../lib/opentelemetry/sdk/metrics/instrument/histogram.rb | 4 +--- .../opentelemetry/sdk/metrics/instrument/histogram_test.rb | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 40ba872bf0..72bcfcef3d 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -33,9 +33,7 @@ def record(amount, attributes: nil) end def register_with_new_metric_store(metric_store, aggregation: default_aggregation) - if @advice&.key?(:explicit_bucket_boundaries) - aggregation = OpenTelemetry::SDK::Metrics::Aggregation::ExplicitBucketHistogram.new(boundaries: @advice[:explicit_bucket_boundaries]) - end + aggregation = OpenTelemetry::SDK::Metrics::Aggregation::ExplicitBucketHistogram.new(boundaries: @advice[:explicit_bucket_boundaries]) if @advice&.key?(:explicit_bucket_boundaries) super end diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb index a0024c31a0..38af30a46c 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb @@ -37,7 +37,7 @@ end it 'can apply advice to change the explicit bucket boundaries' do - histogram = meter.create_histogram('histogram', unit: 's', description: 'test', advice: { explicit_bucket_boundaries: [5, 10, 15]}) + histogram = meter.create_histogram('histogram', unit: 's', description: 'test', advice: { explicit_bucket_boundaries: [5, 10, 15] }) histogram.record(0) histogram.record(5) From 852aed512e042430817e0e39ac8c85915dcefb63 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 22 Aug 2024 19:47:49 -0700 Subject: [PATCH 03/15] Set default arg for advice to nil --- metrics_api/lib/opentelemetry/internal/proxy_instrument.rb | 2 +- metrics_api/lib/opentelemetry/internal/proxy_meter.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb index a7f5e33f64..7b1718c9e7 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb @@ -8,7 +8,7 @@ module OpenTelemetry module Internal # @api private class ProxyInstrument - def initialize(kind, name, unit, desc, callable, advice = {}) + def initialize(kind, name, unit, desc, callable, advice = nil) @kind = kind @name = name @unit = unit diff --git a/metrics_api/lib/opentelemetry/internal/proxy_meter.rb b/metrics_api/lib/opentelemetry/internal/proxy_meter.rb index 0731aa1bf5..65e51d4a35 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_meter.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_meter.rb @@ -38,7 +38,7 @@ def delegate=(meter) private - def create_instrument(kind, name, unit, description, callback, advice = {}) + def create_instrument(kind, name, unit, description, callback, advice = nil) super do next ProxyInstrument.new(kind, name, unit, description, callback, advice) if @delegate.nil? From ebd9747f13334536b259cad4c0f68cd1c39c1485 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Fri, 23 Aug 2024 08:31:30 -0700 Subject: [PATCH 04/15] test: Move test from api to sdk The API doesn't have the functionality tested --- .../test/opentelemetry/metrics/meter_test.rb | 15 --------------- .../test/opentelemetry/sdk/metrics/meter_test.rb | 13 +++++++++++++ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/metrics_api/test/opentelemetry/metrics/meter_test.rb b/metrics_api/test/opentelemetry/metrics/meter_test.rb index 8158f4cd2d..493c373b5b 100644 --- a/metrics_api/test/opentelemetry/metrics/meter_test.rb +++ b/metrics_api/test/opentelemetry/metrics/meter_test.rb @@ -69,20 +69,5 @@ meter.create_counter('a_counter', description: long_description) _(-> { meter.create_counter('b_counter', description: long_description + 'a') }).must_raise(INSTRUMENT_DESCRIPTION_ERROR) end - - describe 'histogram' do - it 'accepts advice' do - advice = {wisdom: 'this too shall pass'} - histogram = meter.create_histogram('histogram', description: 'stuff', unit: 'things', advice: advice) - - assert_equal histogram.instance_variable_get(:@advice) - end - - it 'does not require advice' do - histogram = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - - assert_equal {}, histogram.advice - end - end end end diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 6a6cba2fdc..948dc5d9fa 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -23,6 +23,19 @@ instrument = meter.create_histogram('a_histogram', unit: 'minutes', description: 'useful description') _(instrument).must_be_instance_of OpenTelemetry::SDK::Metrics::Instrument::Histogram end + + it 'accepts advice' do + advice = {wisdom: 'this too shall pass'} + instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things', advice: advice) + + _(instrument.instance_variable_get(:@advice)).must_equal(advice) + end + + it 'does not require advice' do + instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') + + _(instrument.instance_variable_get(:@advice)).must_equal({}) + end end describe '#create_up_down_counter' do From b9e8d3700c87c583ef012cbcfb05222adc00c569 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Fri, 23 Aug 2024 08:37:34 -0700 Subject: [PATCH 05/15] chore: Rubocop --- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 948dc5d9fa..117383a463 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -25,7 +25,7 @@ end it 'accepts advice' do - advice = {wisdom: 'this too shall pass'} + advice = { wisdom: 'this too shall pass' } instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things', advice: advice) _(instrument.instance_variable_get(:@advice)).must_equal(advice) From 0a474ef96bd072ae0691543ec92010cdee093172 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Mon, 26 Aug 2024 12:20:55 -0700 Subject: [PATCH 06/15] feat: Use nil instead of {} as advice default --- metrics_api/lib/opentelemetry/metrics/meter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index b1c922308f..f32216a955 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -33,7 +33,7 @@ def create_counter(name, unit: nil, description: nil) create_instrument(:counter, name, unit, description, nil) { COUNTER } end - def create_histogram(name, unit: nil, description: nil, advice: {}) + def create_histogram(name, unit: nil, description: nil, advice: nil) create_instrument(:histogram, name, unit, description, nil, advice) { HISTOGRAM } end From b723b2cb127c7878a8b218ce11114946505ae9fd Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Wed, 28 Aug 2024 15:54:07 -0700 Subject: [PATCH 07/15] test: Update assertion --- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 117383a463..a9f9cb93c1 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -34,7 +34,7 @@ it 'does not require advice' do instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - _(instrument.instance_variable_get(:@advice)).must_equal({}) + _(instrument.instance_variable_get(:@advice)).must_equal(nil) end end From 7223931a693913045df33b0080ea85a70da6928a Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Wed, 4 Sep 2024 12:37:36 -0700 Subject: [PATCH 08/15] test: Fix assertion deprecation warning must_equal(nil) will be removed in Minitest 6 --- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index a9f9cb93c1..31850eb2e9 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -34,7 +34,7 @@ it 'does not require advice' do instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - _(instrument.instance_variable_get(:@advice)).must_equal(nil) + assert_nil instrument.instance_variable_get(:@advice) end end From 8b5650222af460fda2a4dc4eece43a38180031ed Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Wed, 4 Sep 2024 17:22:34 -0700 Subject: [PATCH 09/15] test: Update attributes assertion --- .../test/opentelemetry/sdk/metrics/instrument/histogram_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb index 38af30a46c..36018a1199 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb @@ -57,7 +57,7 @@ _(last_snapshot[0].data_points[0].sum).must_equal(40) _(last_snapshot[0].data_points[0].min).must_equal(0) _(last_snapshot[0].data_points[0].max).must_equal(20) - _(last_snapshot[0].data_points[0].attributes).must_be_nil + _(last_snapshot[0].data_points[0].attributes).must_equal({}) _(last_snapshot[0].aggregation_temporality).must_equal(:delta) end end From 9e8471dbde1aa4ee44fbf40dcbeb121f73be8bd2 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 5 Sep 2024 12:36:03 -0700 Subject: [PATCH 10/15] feat: Update advice default arg and ivar assign Assign the advice instance variable in histograms only. Advice will default to nil in all cases. --- .../lib/opentelemetry/sdk/metrics/instrument/histogram.rb | 6 ++++++ .../sdk/metrics/instrument/synchronous_instrument.rb | 3 +-- metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 06c6141945..828f02a8ee 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -10,6 +10,12 @@ module Metrics module Instrument # {Histogram} is the SDK implementation of {OpenTelemetry::Metrics::Histogram}. class Histogram < OpenTelemetry::SDK::Metrics::Instrument::SynchronousInstrument + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) + @advice = advice + + super + end + # Returns the instrument kind as a Symbol # # @return [Symbol] diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb index c2d161b604..31daf19f37 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb @@ -11,13 +11,12 @@ module Instrument # {SynchronousInstrument} contains the common functionality shared across # the synchronous instruments SDK instruments. class SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = {}) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) @name = name @unit = unit @description = description @instrumentation_scope = instrumentation_scope @meter_provider = meter_provider - @advice = advice @metric_streams = [] meter_provider.register_synchronous_instrument(self) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb index 1f31ac0b00..ed1a002fcc 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb @@ -33,7 +33,7 @@ def add_metric_reader(metric_reader) end end - def create_instrument(kind, name, unit, description, callback, advice = {}) + def create_instrument(kind, name, unit, description, callback, advice = nil) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) From d2318b0da04dfea617ff52911ddc6deb760bfe00 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Mon, 16 Sep 2024 16:24:57 -0700 Subject: [PATCH 11/15] feat: Use an empty frozen hash as default advice --- metrics_api/lib/opentelemetry/internal/proxy_instrument.rb | 2 +- metrics_api/lib/opentelemetry/metrics/meter.rb | 6 ++++-- .../lib/opentelemetry/sdk/metrics/instrument/histogram.rb | 2 +- .../sdk/metrics/instrument/synchronous_instrument.rb | 2 +- metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb | 2 +- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb index 7b1718c9e7..d6b38c22c0 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb @@ -8,7 +8,7 @@ module OpenTelemetry module Internal # @api private class ProxyInstrument - def initialize(kind, name, unit, desc, callable, advice = nil) + def initialize(kind, name, unit, desc, callable, advice = Metrics::Meter::EMPTY_ADVICE) @kind = kind @name = name @unit = unit diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index f32216a955..b07e04c72e 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -15,6 +15,8 @@ class Meter UP_DOWN_COUNTER = Instrument::UpDownCounter.new OBSERVABLE_UP_DOWN_COUNTER = Instrument::ObservableUpDownCounter.new + EMPTY_ADVICE = {}.freeze + NAME_REGEX = /\A[a-zA-Z][-.\w]{0,62}\z/ private_constant(:COUNTER, :OBSERVABLE_COUNTER, :HISTOGRAM, :OBSERVABLE_GAUGE, :UP_DOWN_COUNTER, :OBSERVABLE_UP_DOWN_COUNTER) @@ -33,7 +35,7 @@ def create_counter(name, unit: nil, description: nil) create_instrument(:counter, name, unit, description, nil) { COUNTER } end - def create_histogram(name, unit: nil, description: nil, advice: nil) + def create_histogram(name, unit: nil, description: nil, advice: EMPTY_ADVICE) create_instrument(:histogram, name, unit, description, nil, advice) { HISTOGRAM } end @@ -55,7 +57,7 @@ def create_observable_up_down_counter(name, callback:, unit: nil, description: n private - def create_instrument(kind, name, unit, description, callback, advice = nil) + def create_instrument(kind, name, unit, description, callback, advice = EMPTY_ADVICE) raise InstrumentNameError if name.nil? raise InstrumentNameError if name.empty? raise InstrumentNameError unless NAME_REGEX.match?(name) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 828f02a8ee..92e839a38e 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -10,7 +10,7 @@ module Metrics module Instrument # {Histogram} is the SDK implementation of {OpenTelemetry::Metrics::Histogram}. class Histogram < OpenTelemetry::SDK::Metrics::Instrument::SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) @advice = advice super diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb index 31daf19f37..db5905afb1 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb @@ -11,7 +11,7 @@ module Instrument # {SynchronousInstrument} contains the common functionality shared across # the synchronous instruments SDK instruments. class SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) @name = name @unit = unit @description = description diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb index ed1a002fcc..d0b9a904cb 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb @@ -33,7 +33,7 @@ def add_metric_reader(metric_reader) end end - def create_instrument(kind, name, unit, description, callback, advice = nil) + def create_instrument(kind, name, unit, description, callback, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 31850eb2e9..7888e7e073 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -34,7 +34,7 @@ it 'does not require advice' do instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - assert_nil instrument.instance_variable_get(:@advice) + assert_equal({}, instrument.instance_variable_get(:@advice)) end end From ed4ceca0cd748a59423c5728a2c3b0481f845eae Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 19 Sep 2024 14:59:28 -0700 Subject: [PATCH 12/15] Revert "feat: Use an empty frozen hash as default advice" This reverts commit d2318b0da04dfea617ff52911ddc6deb760bfe00. --- metrics_api/lib/opentelemetry/internal/proxy_instrument.rb | 2 +- metrics_api/lib/opentelemetry/metrics/meter.rb | 6 ++---- .../lib/opentelemetry/sdk/metrics/instrument/histogram.rb | 2 +- .../sdk/metrics/instrument/synchronous_instrument.rb | 2 +- metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb | 2 +- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb index d6b38c22c0..7b1718c9e7 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb @@ -8,7 +8,7 @@ module OpenTelemetry module Internal # @api private class ProxyInstrument - def initialize(kind, name, unit, desc, callable, advice = Metrics::Meter::EMPTY_ADVICE) + def initialize(kind, name, unit, desc, callable, advice = nil) @kind = kind @name = name @unit = unit diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index b07e04c72e..f32216a955 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -15,8 +15,6 @@ class Meter UP_DOWN_COUNTER = Instrument::UpDownCounter.new OBSERVABLE_UP_DOWN_COUNTER = Instrument::ObservableUpDownCounter.new - EMPTY_ADVICE = {}.freeze - NAME_REGEX = /\A[a-zA-Z][-.\w]{0,62}\z/ private_constant(:COUNTER, :OBSERVABLE_COUNTER, :HISTOGRAM, :OBSERVABLE_GAUGE, :UP_DOWN_COUNTER, :OBSERVABLE_UP_DOWN_COUNTER) @@ -35,7 +33,7 @@ def create_counter(name, unit: nil, description: nil) create_instrument(:counter, name, unit, description, nil) { COUNTER } end - def create_histogram(name, unit: nil, description: nil, advice: EMPTY_ADVICE) + def create_histogram(name, unit: nil, description: nil, advice: nil) create_instrument(:histogram, name, unit, description, nil, advice) { HISTOGRAM } end @@ -57,7 +55,7 @@ def create_observable_up_down_counter(name, callback:, unit: nil, description: n private - def create_instrument(kind, name, unit, description, callback, advice = EMPTY_ADVICE) + def create_instrument(kind, name, unit, description, callback, advice = nil) raise InstrumentNameError if name.nil? raise InstrumentNameError if name.empty? raise InstrumentNameError unless NAME_REGEX.match?(name) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 92e839a38e..828f02a8ee 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -10,7 +10,7 @@ module Metrics module Instrument # {Histogram} is the SDK implementation of {OpenTelemetry::Metrics::Histogram}. class Histogram < OpenTelemetry::SDK::Metrics::Instrument::SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) @advice = advice super diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb index db5905afb1..31daf19f37 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb @@ -11,7 +11,7 @@ module Instrument # {SynchronousInstrument} contains the common functionality shared across # the synchronous instruments SDK instruments. class SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) @name = name @unit = unit @description = description diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb index d0b9a904cb..ed1a002fcc 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb @@ -33,7 +33,7 @@ def add_metric_reader(metric_reader) end end - def create_instrument(kind, name, unit, description, callback, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) + def create_instrument(kind, name, unit, description, callback, advice = nil) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 7888e7e073..31850eb2e9 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -34,7 +34,7 @@ it 'does not require advice' do instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - assert_equal({}, instrument.instance_variable_get(:@advice)) + assert_nil instrument.instance_variable_get(:@advice) end end From bcb1caf122e8ba5a774b4b9ec22426a4be574ecb Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Thu, 19 Sep 2024 15:01:06 -0700 Subject: [PATCH 13/15] Revert "Revert "feat: Use an empty frozen hash as default advice"" This reverts commit ed4ceca0cd748a59423c5728a2c3b0481f845eae. --- metrics_api/lib/opentelemetry/internal/proxy_instrument.rb | 2 +- metrics_api/lib/opentelemetry/metrics/meter.rb | 6 ++++-- .../lib/opentelemetry/sdk/metrics/instrument/histogram.rb | 2 +- .../sdk/metrics/instrument/synchronous_instrument.rb | 2 +- metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb | 2 +- metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb | 2 +- 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb index 7b1718c9e7..d6b38c22c0 100644 --- a/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb +++ b/metrics_api/lib/opentelemetry/internal/proxy_instrument.rb @@ -8,7 +8,7 @@ module OpenTelemetry module Internal # @api private class ProxyInstrument - def initialize(kind, name, unit, desc, callable, advice = nil) + def initialize(kind, name, unit, desc, callable, advice = Metrics::Meter::EMPTY_ADVICE) @kind = kind @name = name @unit = unit diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index f32216a955..b07e04c72e 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -15,6 +15,8 @@ class Meter UP_DOWN_COUNTER = Instrument::UpDownCounter.new OBSERVABLE_UP_DOWN_COUNTER = Instrument::ObservableUpDownCounter.new + EMPTY_ADVICE = {}.freeze + NAME_REGEX = /\A[a-zA-Z][-.\w]{0,62}\z/ private_constant(:COUNTER, :OBSERVABLE_COUNTER, :HISTOGRAM, :OBSERVABLE_GAUGE, :UP_DOWN_COUNTER, :OBSERVABLE_UP_DOWN_COUNTER) @@ -33,7 +35,7 @@ def create_counter(name, unit: nil, description: nil) create_instrument(:counter, name, unit, description, nil) { COUNTER } end - def create_histogram(name, unit: nil, description: nil, advice: nil) + def create_histogram(name, unit: nil, description: nil, advice: EMPTY_ADVICE) create_instrument(:histogram, name, unit, description, nil, advice) { HISTOGRAM } end @@ -55,7 +57,7 @@ def create_observable_up_down_counter(name, callback:, unit: nil, description: n private - def create_instrument(kind, name, unit, description, callback, advice = nil) + def create_instrument(kind, name, unit, description, callback, advice = EMPTY_ADVICE) raise InstrumentNameError if name.nil? raise InstrumentNameError if name.empty? raise InstrumentNameError unless NAME_REGEX.match?(name) diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb index 828f02a8ee..92e839a38e 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/histogram.rb @@ -10,7 +10,7 @@ module Metrics module Instrument # {Histogram} is the SDK implementation of {OpenTelemetry::Metrics::Histogram}. class Histogram < OpenTelemetry::SDK::Metrics::Instrument::SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) @advice = advice super diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb index 31daf19f37..db5905afb1 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/instrument/synchronous_instrument.rb @@ -11,7 +11,7 @@ module Instrument # {SynchronousInstrument} contains the common functionality shared across # the synchronous instruments SDK instruments. class SynchronousInstrument - def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = nil) + def initialize(name, unit, description, instrumentation_scope, meter_provider, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) @name = name @unit = unit @description = description diff --git a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb index ed1a002fcc..d0b9a904cb 100644 --- a/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb +++ b/metrics_sdk/lib/opentelemetry/sdk/metrics/meter.rb @@ -33,7 +33,7 @@ def add_metric_reader(metric_reader) end end - def create_instrument(kind, name, unit, description, callback, advice = nil) + def create_instrument(kind, name, unit, description, callback, advice = OpenTelemetry::Metrics::Meter::EMPTY_ADVICE) super do case kind when :counter then OpenTelemetry::SDK::Metrics::Instrument::Counter.new(name, unit, description, @instrumentation_scope, @meter_provider) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb index 31850eb2e9..7888e7e073 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/meter_test.rb @@ -34,7 +34,7 @@ it 'does not require advice' do instrument = meter.create_histogram('histogram', description: 'stuff', unit: 'things') - assert_nil instrument.instance_variable_get(:@advice) + assert_equal({}, instrument.instance_variable_get(:@advice)) end end From b50615d5a8f07db9a429dd0279ddd6b5e148e5a5 Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Mon, 21 Oct 2024 17:20:32 -0700 Subject: [PATCH 14/15] chore: Rubocop trailing whitespace --- metrics_api/lib/opentelemetry/metrics/meter.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metrics_api/lib/opentelemetry/metrics/meter.rb b/metrics_api/lib/opentelemetry/metrics/meter.rb index c5bdfc4e47..300437adf1 100644 --- a/metrics_api/lib/opentelemetry/metrics/meter.rb +++ b/metrics_api/lib/opentelemetry/metrics/meter.rb @@ -13,8 +13,8 @@ class Meter HISTOGRAM = Instrument::Histogram.new OBSERVABLE_GAUGE = Instrument::ObservableGauge.new UP_DOWN_COUNTER = Instrument::UpDownCounter.new - OBSERVABLE_UP_DOWN_COUNTER = Instrument::ObservableUpDownCounter.new - + OBSERVABLE_UP_DOWN_COUNTER = Instrument::ObservableUpDownCounter.new + private_constant(:COUNTER, :OBSERVABLE_COUNTER, :HISTOGRAM, :OBSERVABLE_GAUGE, :UP_DOWN_COUNTER, :OBSERVABLE_UP_DOWN_COUNTER) EMPTY_ADVICE = {}.freeze From 86407fd92e7ae8f4d76a7f7d3029f61c123a4a1d Mon Sep 17 00:00:00 2001 From: Kayla Reopelle Date: Mon, 21 Oct 2024 17:21:22 -0700 Subject: [PATCH 15/15] test: Refactor new test to match data model --- .../opentelemetry/sdk/metrics/instrument/histogram_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb index 7113f64b1c..031c455c6a 100644 --- a/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb +++ b/metrics_sdk/test/opentelemetry/sdk/metrics/instrument/histogram_test.rb @@ -46,9 +46,9 @@ histogram.record(20) metric_exporter.pull - last_snapshot = metric_exporter.metric_snapshots.last - _(last_snapshot[0].data_points[0].bucket_counts).must_equal([3, 1, 0, 1]) + last_snapshot = metric_exporter.metric_snapshots + _(last_snapshot[0].data_points[0].bucket_counts).must_equal([3, 1, 0, 1]) _(last_snapshot[0].name).must_equal('histogram') _(last_snapshot[0].unit).must_equal('s') _(last_snapshot[0].description).must_equal('test')