diff --git a/sdk/lib/opentelemetry/sdk/internal.rb b/sdk/lib/opentelemetry/sdk/internal.rb index a088e65aef..9c9068b93e 100644 --- a/sdk/lib/opentelemetry/sdk/internal.rb +++ b/sdk/lib/opentelemetry/sdk/internal.rb @@ -13,15 +13,19 @@ module Internal extend self def boolean?(value) - value.is_a?(TrueClass) || value.is_a?(FalseClass) + value.instance_of?(TrueClass) || value.instance_of?(FalseClass) end def valid_key?(key) key.instance_of?(String) end + def numeric?(value) + value.instance_of?(Integer) || value.instance_of?(Float) + end + def valid_simple_value?(value) - value.instance_of?(String) || value == false || value == true || value.is_a?(Numeric) + value.instance_of?(String) || boolean?(value) || numeric?(value) end def valid_array_value?(value) @@ -34,7 +38,7 @@ def valid_array_value?(value) when TrueClass, FalseClass value.all? { |v| boolean?(v) } when Numeric - value.all? { |v| v.is_a?(Numeric) } + value.all? { |v| numeric?(v) } else false end diff --git a/sdk/test/opentelemetry/sdk/trace/span_test.rb b/sdk/test/opentelemetry/sdk/trace/span_test.rb index 5998a5ef33..dfe9cb3f41 100644 --- a/sdk/test/opentelemetry/sdk/trace/span_test.rb +++ b/sdk/test/opentelemetry/sdk/trace/span_test.rb @@ -105,6 +105,23 @@ end end + it 'reports an error for a non-standard library Numeric subclass, which is invalid' do + OpenTelemetry::TestHelpers.with_test_logger do |log_stream| + numeric_klass = Class.new(Numeric) {} + span.set_attribute('foo', numeric_klass.new) + span.finish + _(log_stream.string).must_match(/invalid span attribute value type # nil } + span.add_event('added', attributes: attrs) + events = span.events + _(events.size).must_equal(1) + _(events.first.attributes).must_equal({}) + end + it 'accepts array-valued attributes' do attrs = { 'foo' => [1, 2, 3] } span.add_event('added', attributes: attrs)