Skip to content

Commit 5a3c2fb

Browse files
authored
Refactor: common exporter methods (#1265)
* refactor: use common utilities for url validation * refactor: use common utils config_opt
1 parent b897830 commit 5a3c2fb

File tree

10 files changed

+25
-104
lines changed

10 files changed

+25
-104
lines changed

exporter/jaeger/lib/opentelemetry/exporter/jaeger/collector_exporter.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def initialize(endpoint: ENV.fetch('OTEL_EXPORTER_JAEGER_ENDPOINT', 'http://loca
3030
password: ENV['OTEL_EXPORTER_JAEGER_PASSWORD'],
3131
timeout: ENV.fetch('OTEL_EXPORTER_JAEGER_TIMEOUT', 10),
3232
ssl_verify_mode: CollectorExporter.ssl_verify_mode)
33-
raise ArgumentError, "invalid url for Jaeger::CollectorExporter #{endpoint}" if invalid_url?(endpoint)
33+
raise ArgumentError, "invalid url for Jaeger::CollectorExporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
3434
raise ArgumentError, 'username and password should either both be nil or both be set' if username.nil? != password.nil?
3535

3636
transport_opts = { ssl_verify_mode: Integer(ssl_verify_mode) }
@@ -88,15 +88,6 @@ def shutdown(timeout: nil)
8888

8989
private
9090

91-
def invalid_url?(url)
92-
return true if url.nil? || url.strip.empty?
93-
94-
URI(url)
95-
false
96-
rescue URI::InvalidURIError
97-
true
98-
end
99-
10091
def encoded_batches(span_data)
10192
span_data.group_by(&:resource).map do |resource, spans|
10293
process = Encoder.encoded_process(resource)

exporter/jaeger/opentelemetry-exporter-jaeger.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
2727
spec.required_ruby_version = '>= 2.6.0'
2828

2929
spec.add_dependency 'opentelemetry-api', '~> 1.0'
30-
spec.add_dependency 'opentelemetry-common', '~> 0.19.3'
30+
spec.add_dependency 'opentelemetry-common', '~> 0.19.6'
3131
spec.add_dependency 'opentelemetry-sdk', '~> 1.0'
3232
spec.add_dependency 'opentelemetry-semantic_conventions'
3333
spec.add_dependency 'thrift'

exporter/otlp-grpc/lib/opentelemetry/exporter/otlp/grpc/exporter.rb

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ class Exporter
2222
FAILURE = OpenTelemetry::SDK::Trace::Export::FAILURE
2323
private_constant(:SUCCESS, :FAILURE)
2424

25-
def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4317/v1/traces'),
26-
timeout: config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
25+
def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4317/v1/traces'),
26+
timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
2727
metrics_reporter: nil)
28-
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" if invalid_url?(endpoint)
28+
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
2929

3030
uri = URI(endpoint)
3131

@@ -71,25 +71,6 @@ def shutdown(timeout: nil)
7171
@shutdown = true
7272
SUCCESS
7373
end
74-
75-
private
76-
77-
def config_opt(*env_vars, default: nil)
78-
env_vars.each do |env_var|
79-
val = ENV[env_var]
80-
return val unless val.nil?
81-
end
82-
default
83-
end
84-
85-
def invalid_url?(url)
86-
return true if url.nil? || url.strip.empty?
87-
88-
URI(url)
89-
false
90-
rescue URI::InvalidURIError
91-
true
92-
end
9374
end
9475
end
9576
end

exporter/otlp-grpc/opentelemetry-exporter-otlp-grpc.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
2727

2828
spec.add_dependency 'grpc'
2929
spec.add_dependency 'opentelemetry-api', '~> 1.0'
30-
spec.add_dependency 'opentelemetry-common', '~> 0.19.3'
30+
spec.add_dependency 'opentelemetry-common', '~> 0.19.6'
3131
spec.add_dependency 'opentelemetry-exporter-otlp-common'
3232
spec.add_dependency 'opentelemetry-sdk', '~> 1.0'
3333

exporter/otlp-http/lib/opentelemetry/exporter/otlp/http/exporter.rb

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ class Exporter # rubocop:disable Metrics/ClassLength
3232
ERROR_MESSAGE_INVALID_HEADERS = 'headers must be a String with comma-separated URL Encoded UTF-8 k=v pairs or a Hash'
3333
private_constant(:ERROR_MESSAGE_INVALID_HEADERS)
3434

35-
def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4318/v1/traces'), # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
36-
certificate_file: config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
35+
def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4318/v1/traces'), # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
36+
certificate_file: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
3737
ssl_verify_mode: fetch_ssl_verify_mode,
38-
headers: config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS', default: {}),
39-
compression: config_opt('OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION', default: 'gzip'),
40-
timeout: config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
38+
headers: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS', default: {}),
39+
compression: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION', default: 'gzip'),
40+
timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
4141
metrics_reporter: nil)
42-
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" if invalid_url?(endpoint)
42+
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
4343
raise ArgumentError, "unsupported compression key #{compression}" unless compression.nil? || %w[gzip none].include?(compression)
4444

4545
@uri = if endpoint == ENV['OTEL_EXPORTER_OTLP_ENDPOINT']
@@ -117,23 +117,6 @@ def http_connection(uri, ssl_verify_mode, certificate_file)
117117
http
118118
end
119119

120-
def config_opt(*env_vars, default: nil)
121-
env_vars.each do |env_var|
122-
val = ENV[env_var]
123-
return val unless val.nil?
124-
end
125-
default
126-
end
127-
128-
def invalid_url?(url)
129-
return true if url.nil? || url.strip.empty?
130-
131-
URI(url)
132-
false
133-
rescue URI::InvalidURIError
134-
true
135-
end
136-
137120
# The around_request is a private method that provides an extension
138121
# point for the exporters network calls. The default behaviour
139122
# is to not trace these operations.

exporter/otlp-http/opentelemetry-exporter-otlp-http.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
2626
spec.required_ruby_version = '>= 2.6.0'
2727

2828
spec.add_dependency 'opentelemetry-api', '~> 1.0'
29-
spec.add_dependency 'opentelemetry-common', '~> 0.19.3'
29+
spec.add_dependency 'opentelemetry-common', '~> 0.19.6'
3030
spec.add_dependency 'opentelemetry-exporter-otlp-common'
3131
spec.add_dependency 'opentelemetry-sdk', '~> 1.0'
3232

exporter/otlp/lib/opentelemetry/exporter/otlp/exporter.rb

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ def self.ssl_verify_mode
4545
end
4646
end
4747

48-
def initialize(endpoint: config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4318/v1/traces'), # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
49-
certificate_file: config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
48+
def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT', default: 'http://localhost:4318/v1/traces'), # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
49+
certificate_file: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE', 'OTEL_EXPORTER_OTLP_CERTIFICATE'),
5050
ssl_verify_mode: Exporter.ssl_verify_mode,
51-
headers: config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS', default: {}),
52-
compression: config_opt('OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION', default: 'gzip'),
53-
timeout: config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
51+
headers: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_HEADERS', 'OTEL_EXPORTER_OTLP_HEADERS', default: {}),
52+
compression: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_COMPRESSION', 'OTEL_EXPORTER_OTLP_COMPRESSION', default: 'gzip'),
53+
timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_OTLP_TRACES_TIMEOUT', 'OTEL_EXPORTER_OTLP_TIMEOUT', default: 10),
5454
metrics_reporter: nil)
55-
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" if invalid_url?(endpoint)
55+
raise ArgumentError, "invalid url for OTLP::Exporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
5656
raise ArgumentError, "unsupported compression key #{compression}" unless compression.nil? || %w[gzip none].include?(compression)
5757

5858
@uri = if endpoint == ENV['OTEL_EXPORTER_OTLP_ENDPOINT']
@@ -120,23 +120,6 @@ def http_connection(uri, ssl_verify_mode, certificate_file)
120120
http
121121
end
122122

123-
def config_opt(*env_vars, default: nil)
124-
env_vars.each do |env_var|
125-
val = ENV[env_var]
126-
return val unless val.nil?
127-
end
128-
default
129-
end
130-
131-
def invalid_url?(url)
132-
return true if url.nil? || url.strip.empty?
133-
134-
URI(url)
135-
false
136-
rescue URI::InvalidURIError
137-
true
138-
end
139-
140123
# The around_request is a private method that provides an extension
141124
# point for the exporters network calls. The default behaviour
142125
# is to not trace these operations.

exporter/otlp/opentelemetry-exporter-otlp.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
2828
spec.add_dependency 'google-protobuf', '~> 3.19'
2929
spec.add_dependency 'googleapis-common-protos-types', '~> 1.3'
3030
spec.add_dependency 'opentelemetry-api', '~> 1.0'
31-
spec.add_dependency 'opentelemetry-common', '~> 0.19.3'
31+
spec.add_dependency 'opentelemetry-common', '~> 0.19.6'
3232
spec.add_dependency 'opentelemetry-sdk', '~> 1.0'
3333
spec.add_dependency 'opentelemetry-semantic_conventions'
3434

exporter/zipkin/lib/opentelemetry/exporter/zipkin/exporter.rb

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ class Exporter # rubocop:disable Metrics/ClassLength
2727
WRITE_TIMEOUT_SUPPORTED = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.6')
2828
private_constant(:KEEP_ALIVE_TIMEOUT, :RETRY_COUNT, :WRITE_TIMEOUT_SUPPORTED)
2929

30-
def initialize(endpoint: config_opt('OTEL_EXPORTER_ZIPKIN_ENDPOINT', default: 'http://localhost:9411/api/v2/spans'),
31-
headers: config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_HEADERS', 'OTEL_EXPORTER_ZIPKIN_HEADERS'),
32-
timeout: config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_TIMEOUT', 'OTEL_EXPORTER_ZIPKIN_TIMEOUT', default: 10))
33-
raise ArgumentError, "invalid url for Zipkin::Exporter #{endpoint}" if invalid_url?(endpoint)
30+
def initialize(endpoint: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_ENDPOINT', default: 'http://localhost:9411/api/v2/spans'),
31+
headers: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_HEADERS', 'OTEL_EXPORTER_ZIPKIN_HEADERS'),
32+
timeout: OpenTelemetry::Common::Utilities.config_opt('OTEL_EXPORTER_ZIPKIN_TRACES_TIMEOUT', 'OTEL_EXPORTER_ZIPKIN_TIMEOUT', default: 10))
33+
raise ArgumentError, "invalid url for Zipkin::Exporter #{endpoint}" unless OpenTelemetry::Common::Utilities.valid_url?(endpoint)
3434
raise ArgumentError, 'headers must be comma-separated k=v pairs or a Hash' unless valid_headers?(headers)
3535

3636
@uri = if endpoint == ENV['OTEL_EXPORTER_ZIPKIN_ENDPOINT']
@@ -94,14 +94,6 @@ def shutdown(timeout: nil)
9494

9595
private
9696

97-
def config_opt(*env_vars, default: nil)
98-
env_vars.each do |env_var|
99-
val = ENV[env_var]
100-
return val unless val.nil?
101-
end
102-
default
103-
end
104-
10597
def encode_spans(span_data)
10698
span_data.map! { |span| Transformer.to_zipkin_span(span, span.resource) }
10799
end
@@ -110,15 +102,6 @@ def around_request
110102
OpenTelemetry::Common::Utilities.untraced { yield }
111103
end
112104

113-
def invalid_url?(url)
114-
return true if url.nil? || url.strip.empty?
115-
116-
URI(url)
117-
false
118-
rescue URI::InvalidURIError
119-
true
120-
end
121-
122105
def valid_headers?(headers)
123106
return true if headers.nil? || headers.is_a?(Hash)
124107
return false unless headers.is_a?(String)

exporter/zipkin/opentelemetry-exporter-zipkin.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
2727
spec.required_ruby_version = '>= 2.6.0'
2828

2929
spec.add_dependency 'opentelemetry-api', '~> 1.0'
30-
spec.add_dependency 'opentelemetry-common', '~> 0.19.3'
30+
spec.add_dependency 'opentelemetry-common', '~> 0.19.6'
3131
spec.add_dependency 'opentelemetry-sdk', '~> 1.0'
3232
spec.add_dependency 'opentelemetry-semantic_conventions'
3333

0 commit comments

Comments
 (0)