Skip to content

Commit e590548

Browse files
authored
fix: update out-of-date google-protobuf-any (#1816)
* fix: update out-of-date google-protobuf-any * fix typo * add test case
1 parent 4ced24f commit e590548

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

exporter/otlp-metrics/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ Or, if you use [bundler][bundler-home], include `opentelemetry-sdk`, `openteleme
7070
Then, configure the SDK to use the OTLP metrics exporter
7171

7272
```ruby
73+
ENV['OTEL_METRICS_EXPORTER'] = 'none'
74+
7375
require 'opentelemetry/sdk'
7476
require 'opentelemetry-metrics-sdk'
7577
require 'opentelemetry/exporter/otlp_metrics'

exporter/otlp-metrics/lib/opentelemetry/exporter/otlp/metrics/util.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,8 @@ def backoff?(retry_count:, reason:, retry_after: nil)
117117
def log_status(body)
118118
status = Google::Rpc::Status.decode(body)
119119
details = status.details.map do |detail|
120-
klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(detail.type_name).msgclass
120+
type_name = detail.type_url.to_s.split('/').last.to_s
121+
klass_or_nil = ::Google::Protobuf::DescriptorPool.generated_pool.lookup(type_name)&.msgclass
121122
detail.unpack(klass_or_nil) if klass_or_nil
122123
end.compact
123124
OpenTelemetry.handle_error(message: "OTLP metrics_exporter received rpc.Status{message=#{status.message}, details=#{details}}")

exporter/otlp-metrics/test/opentelemetry/exporter/otlp/metrics/metrics_exporter_test.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -501,6 +501,26 @@
501501
OpenTelemetry.logger = logger
502502
end
503503

504+
it 'logs rpc.Status on bad request from byte body' do
505+
log_stream = StringIO.new
506+
logger = OpenTelemetry.logger
507+
OpenTelemetry.logger = ::Logger.new(log_stream)
508+
509+
body = "\b\x03\x12VHTTP 400 (gRPC: INVALID_ARGUMENT): Metric validation removed all of the passed metrics\x1A\xA0\x01\n)type.googleapis.com/google.rpc.BadRequest\x12s\n>\n\x1D.resourceMetrics.scopeMetrics\x12\x1DPath contained no usable data\n1\n\x10.resourceMetrics\x12\x1DPath contained no usable data"
510+
stub_request(:post, 'http://localhost:4318/v1/metrics').to_return(status: 400, body: body, headers: { 'Content-Type' => 'application/x-protobuf' })
511+
metrics_data = create_metrics_data
512+
513+
result = exporter.export([metrics_data])
514+
515+
_(log_stream.string).must_match(
516+
/ERROR -- : OpenTelemetry error: OTLP metrics_exporter received rpc\.Status{message=HTTP 400 \(gRPC: INVALID_ARGUMENT\): Metric validation removed all of the passed metrics, details=\[\]}/
517+
)
518+
519+
_(result).must_equal(METRICS_FAILURE)
520+
ensure
521+
OpenTelemetry.logger = logger
522+
end
523+
504524
it 'logs a specific message when there is a 404' do
505525
log_stream = StringIO.new
506526
logger = OpenTelemetry.logger

0 commit comments

Comments
 (0)