opentelemetry-instrumentation-base 0.18.3 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5fdd5b15b00d59effe03fc6b2d0973e9e7e8679d86d009987915829effd3578
4
- data.tar.gz: 99852fa23dd1b29a54521c2c5e780691cf2fbab3eb9e472cbf004704eefb0576
3
+ metadata.gz: 164a4d7f0afcc437a79f2e2569ff80d904644d512a7a241a462eb26054127cff
4
+ data.tar.gz: 1807fe5154e3d77093429e7a6355bd952615f410ffe199f3e587b3af22c45184
5
5
  SHA512:
6
- metadata.gz: 7589e2cc7be76cec38a7d0852f0c7404053a8f83502089dc260cf9c4ab6e36b9d13b52f5a665f6d0dbde15383b9ae8d923839b5a80c28c5a60be717de0e63b6c
7
- data.tar.gz: 855cc418aada657e81dc792a73940b678d1e4db16883726217eabf853e39f834f520e7aa834a1059b20d3c407191a3551cfd7b9fe6124edad87585b2e73020ed
6
+ metadata.gz: 83b29693b52c0d2d0e3e668f7fb4229be83149c1833146604fc719d794566a504029fd9c9d241d1e25b1c28fd166ae286da7f383b609afdbf2d6f8195839b3b0
7
+ data.tar.gz: e86bdac3678dde4c77a56402a3ea0fb4fb8289dbc82fa31ac134d38f943372c7083542a5d35110ed674ea08d99724e5b15cc2bbf51cec0591847381351231cbb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Release History: opentelemetry-instrumentation-base
2
2
 
3
+ ### v0.19.0 / 2021-12-01
4
+
5
+ * ADDED: Add default options config helper + env var config option support
6
+
3
7
  ### v0.18.3 / 2021-09-29
4
8
 
5
9
  * (No significant changes)
@@ -146,11 +146,20 @@ module OpenTelemetry
146
146
  # a key in the VALIDATORS hash. The supported keys are, :array, :boolean,
147
147
  # :callable, :integer, :string.
148
148
  def option(name, default:, validate:)
149
- validate = VALIDATORS[validate] || validate
150
- raise ArgumentError, "validate must be #{VALIDATORS.keys.join(', ')}, or a callable" unless validate.respond_to?(:call)
149
+ validator = VALIDATORS[validate] || validate
150
+ raise ArgumentError, "validate must be #{VALIDATORS.keys.join(', ')}, or a callable" unless validator.respond_to?(:call) || validator.respond_to?(:include?)
151
151
 
152
152
  @options ||= []
153
- @options << { name: name, default: default, validate: validate }
153
+
154
+ validation_type = if VALIDATORS[validate]
155
+ validate
156
+ elsif validate.respond_to?(:include?)
157
+ :enum
158
+ else
159
+ :callable
160
+ end
161
+
162
+ @options << { name: name, default: default, validator: validator, validation_type: validation_type }
154
163
  end
155
164
 
156
165
  def instance
@@ -257,16 +266,24 @@ module OpenTelemetry
257
266
  # Invalid configuration values are logged, and replaced by the default.
258
267
  #
259
268
  # @param [Hash] user_config The user supplied configuration hash
260
- def config_options(user_config) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
269
+ def config_options(user_config) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
261
270
  @options ||= {}
262
271
  user_config ||= {}
272
+ config_overrides = config_overrides_from_env
263
273
  validated_config = @options.each_with_object({}) do |option, h|
264
274
  option_name = option[:name]
265
275
  config_value = user_config[option_name]
276
+ config_override = coerce_env_var(config_overrides[option_name], option[:validation_type]) if config_overrides[option_name]
266
277
 
267
- value = if config_value.nil?
278
+ value = if config_value.nil? && config_override.nil?
268
279
  option[:default]
269
- elsif option[:validate].call(config_value)
280
+ elsif option[:validator].respond_to?(:include?) && option[:validator].include?(config_override)
281
+ config_override
282
+ elsif option[:validator].respond_to?(:include?) && option[:validator].include?(config_value)
283
+ config_value
284
+ elsif option[:validator].respond_to?(:call) && option[:validator].call(config_override)
285
+ config_override
286
+ elsif option[:validator].respond_to?(:call) && option[:validator].call(config_value)
270
287
  config_value
271
288
  else
272
289
  OpenTelemetry.logger.warn(
@@ -303,6 +320,49 @@ module OpenTelemetry
303
320
  end
304
321
  ENV[var_name] != 'false'
305
322
  end
323
+
324
+ def config_overrides_from_env
325
+ var_name = name.dup.tap do |n|
326
+ n.upcase!
327
+ n.gsub!('::', '_')
328
+ n.gsub!('OPENTELEMETRY_', 'OTEL_RUBY_')
329
+ n << '_CONFIG_OPTS'
330
+ end
331
+
332
+ environment_config_overrides = {}
333
+ env_config_options = ENV[var_name]&.split(';')
334
+
335
+ return environment_config_overrides if env_config_options.nil?
336
+
337
+ env_config_options.each_with_object(environment_config_overrides) do |env_config_option, eco|
338
+ parts = env_config_option.split('=')
339
+ option_name = parts[0].to_sym
340
+ eco[option_name] = parts[1]
341
+ end
342
+
343
+ environment_config_overrides
344
+ end
345
+
346
+ def coerce_env_var(env_var, validation_type) # rubocop:disable Metrics/CyclomaticComplexity
347
+ case validation_type
348
+ when :array
349
+ env_var.split(',').map(&:strip)
350
+ when :boolean
351
+ env_var.to_s.strip.downcase == 'true'
352
+ when :integer
353
+ env_var.to_i
354
+ when :string
355
+ env_var.to_s.strip
356
+ when :enum
357
+ env_var.to_s.strip.to_sym
358
+ when :callable
359
+ OpenTelemetry.logger.warn(
360
+ "Instrumentation #{name} options that accept a callable are not " \
361
+ "configurable using environment variables. Ignoring raw value: #{env_var}"
362
+ )
363
+ nil
364
+ end
365
+ end
306
366
  end
307
367
  end
308
368
  end
@@ -6,6 +6,6 @@
6
6
 
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
- VERSION = '0.18.3'
9
+ VERSION = '0.19.0'
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentelemetry-instrumentation-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.3
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenTelemetry Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-30 00:00:00.000000000 Z
11
+ date: 2021-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opentelemetry-api
@@ -142,10 +142,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
142
142
  licenses:
143
143
  - Apache-2.0
144
144
  metadata:
145
- changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-base/v0.18.3/file.CHANGELOG.html
145
+ changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-base/v0.19.0/file.CHANGELOG.html
146
146
  source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/instrumentation/base
147
147
  bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
148
- documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-base/v0.18.3
148
+ documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-instrumentation-base/v0.19.0
149
149
  post_install_message:
150
150
  rdoc_options: []
151
151
  require_paths: