opentelemetry-api 0.3.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -2
  3. data/CHANGELOG.md +19 -0
  4. data/LICENSE +1 -1
  5. data/{OVERVIEW.md → README.md} +0 -0
  6. data/lib/opentelemetry.rb +11 -11
  7. data/lib/opentelemetry/baggage.rb +16 -0
  8. data/lib/opentelemetry/{correlation_context → baggage}/builder.rb +2 -2
  9. data/lib/opentelemetry/{correlation_context → baggage}/manager.rb +8 -3
  10. data/lib/opentelemetry/baggage/propagation.rb +57 -0
  11. data/lib/opentelemetry/baggage/propagation/context_keys.rb +27 -0
  12. data/lib/opentelemetry/{correlation_context/propagation/text_extractor.rb → baggage/propagation/text_map_extractor.rb} +14 -14
  13. data/lib/opentelemetry/baggage/propagation/text_map_injector.rb +55 -0
  14. data/lib/opentelemetry/context/propagation/composite_propagator.rb +8 -12
  15. data/lib/opentelemetry/instrumentation.rb +2 -2
  16. data/lib/opentelemetry/instrumentation/{adapter.rb → base.rb} +54 -53
  17. data/lib/opentelemetry/instrumentation/registry.rb +32 -32
  18. data/lib/opentelemetry/trace.rb +13 -16
  19. data/lib/opentelemetry/trace/propagation/trace_context.rb +11 -11
  20. data/lib/opentelemetry/trace/propagation/trace_context/{text_extractor.rb → text_map_extractor.rb} +5 -4
  21. data/lib/opentelemetry/trace/propagation/trace_context/{text_injector.rb → text_map_injector.rb} +4 -5
  22. data/lib/opentelemetry/trace/propagation/trace_context/trace_parent.rb +9 -5
  23. data/lib/opentelemetry/trace/span.rb +10 -18
  24. data/lib/opentelemetry/trace/span_context.rb +25 -1
  25. data/lib/opentelemetry/trace/status.rb +7 -65
  26. data/lib/opentelemetry/trace/tracer.rb +20 -28
  27. data/lib/opentelemetry/trace/util/http_to_status.rb +4 -23
  28. data/lib/opentelemetry/version.rb +1 -1
  29. metadata +15 -17
  30. data/lib/opentelemetry/correlation_context.rb +0 -16
  31. data/lib/opentelemetry/correlation_context/propagation.rb +0 -57
  32. data/lib/opentelemetry/correlation_context/propagation/context_keys.rb +0 -27
  33. data/lib/opentelemetry/correlation_context/propagation/text_injector.rb +0 -55
  34. data/lib/opentelemetry/internal.rb +0 -22
  35. data/lib/opentelemetry/trace/event.rb +0 -46
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c91a5540309be0f2dcc70066b25eab314bed537321a6d4b8360b72077cb9da22
4
- data.tar.gz: 925121d6b30bf9cf3b1a17c30afbfdf5e328b0374b23a8daade2cf1d486e795f
3
+ metadata.gz: 9aa5a0850640df96314f3fd539394f878d899b47e1a95e725abc6c0afd6b5a68
4
+ data.tar.gz: c64e3676eb965f77f64a14dd5b515128644d79e8337df46c49ddf652496c8384
5
5
  SHA512:
6
- metadata.gz: 93299563d90db1b05e873f431e151dc1d2e7e05f54d0b5311985be42d15a3f33f50e3e35fb24e0ef063a26a3cc06333bcb304ee418dd590ed124c08416735b80
7
- data.tar.gz: e7edc0bde321596ec89fedc87c1209e35a6b306b22a87aa0e761a4a77cd3b4d9f0239a486f7444f280008c733e9a8378369cb0640fd60b58106bf256b9bd4e5c
6
+ metadata.gz: e72ba6591aa9c38b2036c1c27994f280d331fca28817d19fba52991f4477afde6f1bbca040eeb8d4049f084e63ca1e7666f1ff7eed86a1ce43fd79995b4d0fa4
7
+ data.tar.gz: 903010838dae911df19e9f06dc41080bce7640eb7caab03b6b4c9ca36a9a65105f9b58ef68f3bb5258e66d30015286cb8b9d18ca9ae600c9e31b124412ce2872
data/.yardopts CHANGED
@@ -1,9 +1,9 @@
1
1
  --no-private
2
2
  --title=OpenTelemetry API
3
3
  --markup=markdown
4
- --main=OVERVIEW.md
4
+ --main=README.md
5
5
  ./lib/opentelemetry/**/*.rb
6
6
  ./lib/opentelemetry.rb
7
7
  -
8
- OVERVIEW.md
8
+ README.md
9
9
  CHANGELOG.md
@@ -1 +1,20 @@
1
1
  # Release History: opentelemetry-api
2
+
3
+ ### v0.7.0 / 2020-10-07
4
+
5
+ * FIXED: Safely navigate span variable during error cases
6
+ * DOCS: Standardize toplevel docs structure and readme
7
+ * DOCS: Fix param description in TextMapInjector for Baggage
8
+
9
+ ### v0.6.0 / 2020-09-10
10
+
11
+ * ADDED: Add support for OTEL_LOG_LEVEL env var
12
+ * Documented array valued attributes [#343](https://github.com/open-telemetry/opentelemetry-ruby/pull/343)
13
+ * Renamed CorrelationContext to Baggage [#338](https://github.com/open-telemetry/opentelemetry-ruby/pull/338)
14
+ * Renamed Text* to TextMap* (propagators) [#335](https://github.com/open-telemetry/opentelemetry-ruby/pull/335)
15
+ * Fixed exception semantic conventions (`span.record_error` -> `span.record_exception`) [#333](https://github.com/open-telemetry/opentelemetry-ruby/pull/333)
16
+ * Removed support for lazy event creation [#329](https://github.com/open-telemetry/opentelemetry-ruby/pull/329)
17
+ * `name:` named parameter to `span.add_event` becomes first positional argument
18
+ * `Event` class removed from API
19
+ * Added `hex_trace_id` and `hex_span_id` helpers to `SpanContext` [#332](https://github.com/open-telemetry/opentelemetry-ruby/pull/332)
20
+ * Added `CorrelationContext::Manager.values` method to return correlations as a `Hash` [#323](https://github.com/open-telemetry/opentelemetry-ruby/pull/323)
data/LICENSE CHANGED
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright [yyyy] [name of copyright owner]
189
+ Copyright 2020 OpenTelemetry Authors
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
File without changes
@@ -8,9 +8,8 @@ require 'logger'
8
8
 
9
9
  require 'opentelemetry/error'
10
10
  require 'opentelemetry/context'
11
- require 'opentelemetry/correlation_context'
12
- require 'opentelemetry/internal'
13
- require 'opentelemetry/instrumentation'
11
+ require 'opentelemetry/baggage'
12
+ require_relative './opentelemetry/instrumentation'
14
13
  require 'opentelemetry/metrics'
15
14
  require 'opentelemetry/trace'
16
15
  require 'opentelemetry/version'
@@ -23,9 +22,12 @@ require 'opentelemetry/version'
23
22
  module OpenTelemetry
24
23
  extend self
25
24
 
26
- attr_writer :tracer_provider, :meter_provider, :correlations
25
+ attr_writer :tracer_provider, :meter_provider, :baggage, :logger
27
26
 
28
- attr_accessor :logger
27
+ # @return [Object, Logger] configured Logger or a default STDOUT Logger.
28
+ def logger
29
+ @logger ||= Logger.new(STDOUT, level: ENV['OTEL_LOG_LEVEL'] || Logger::INFO)
30
+ end
29
31
 
30
32
  # @return [Object, Trace::TracerProvider] registered tracer provider or a
31
33
  # default no-op implementation of the tracer provider.
@@ -45,17 +47,15 @@ module OpenTelemetry
45
47
  @instrumentation_registry ||= Instrumentation::Registry.new
46
48
  end
47
49
 
48
- # @return [Object, CorrelationContext::Manager] registered
49
- # correlation context manager or a default no-op implementation of the
50
+ # @return [Object, Baggage::Manager] registered
51
+ # baggage manager or a default no-op implementation of the
50
52
  # manager.
51
- def correlations
52
- @correlations ||= CorrelationContext::Manager.new
53
+ def baggage
54
+ @baggage ||= Baggage::Manager.new
53
55
  end
54
56
 
55
57
  # @return [Context::Propagation::Propagation] an instance of the propagation API
56
58
  def propagation
57
59
  @propagation ||= Context::Propagation::Propagation.new
58
60
  end
59
-
60
- self.logger = Logger.new(STDOUT)
61
61
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ require 'opentelemetry/baggage/builder'
8
+ require 'opentelemetry/baggage/manager'
9
+ require 'opentelemetry/baggage/propagation'
10
+
11
+ module OpenTelemetry
12
+ # The Baggage module provides functionality to record and propagate
13
+ # baggage in a distributed trace
14
+ module Baggage
15
+ end
16
+ end
@@ -5,8 +5,8 @@
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
7
  module OpenTelemetry
8
- module CorrelationContext
9
- # No op implementation of CorrelationContext::Builder
8
+ module Baggage
9
+ # No op implementation of Baggage::Builder
10
10
  class Builder
11
11
  def set_value(key, value); end
12
12
 
@@ -5,11 +5,12 @@
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
7
  module OpenTelemetry
8
- module CorrelationContext
9
- # No op implementation of CorrelationContext::Manager
8
+ module Baggage
9
+ # No op implementation of Baggage::Manager
10
10
  class Manager
11
11
  NOOP_BUILDER = Builder.new
12
- private_constant :NOOP_BUILDER
12
+ EMPTY_VALUES = {}.freeze
13
+ private_constant(:NOOP_BUILDER, :EMPTY_VALUES)
13
14
 
14
15
  def build(context: Context.current)
15
16
  yield NOOP_BUILDER
@@ -24,6 +25,10 @@ module OpenTelemetry
24
25
  nil
25
26
  end
26
27
 
28
+ def values(context: Context.current)
29
+ EMPTY_VALUES
30
+ end
31
+
27
32
  def remove_value(key, context: Context.current)
28
33
  context
29
34
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ require 'opentelemetry/baggage/propagation/context_keys'
8
+ require 'opentelemetry/baggage/propagation/text_map_injector'
9
+ require 'opentelemetry/baggage/propagation/text_map_extractor'
10
+
11
+ module OpenTelemetry
12
+ module Baggage
13
+ # The Baggage::Propagation module contains injectors and
14
+ # extractors for sending and receiving baggage over the wire
15
+ module Propagation
16
+ extend self
17
+
18
+ TEXT_MAP_EXTRACTOR = TextMapExtractor.new
19
+ TEXT_MAP_INJECTOR = TextMapInjector.new
20
+ RACK_EXTRACTOR = TextMapExtractor.new(
21
+ baggage_key: 'HTTP_BAGGAGE'
22
+ )
23
+ RACK_INJECTOR = TextMapInjector.new(
24
+ baggage_key: 'HTTP_BAGGAGE'
25
+ )
26
+
27
+ private_constant :TEXT_MAP_INJECTOR, :TEXT_MAP_EXTRACTOR, :RACK_INJECTOR,
28
+ :RACK_EXTRACTOR
29
+
30
+ # Returns an extractor that extracts context using the W3C Baggage
31
+ # format
32
+ def text_map_injector
33
+ TEXT_MAP_INJECTOR
34
+ end
35
+
36
+ # Returns an injector that injects context using the W3C Baggage
37
+ # format
38
+ def text_map_extractor
39
+ TEXT_MAP_EXTRACTOR
40
+ end
41
+
42
+ # Returns an extractor that extracts context using the W3C Baggage
43
+ # format with Rack normalized keys (upcased and prefixed with
44
+ # HTTP_)
45
+ def rack_injector
46
+ RACK_INJECTOR
47
+ end
48
+
49
+ # Returns an injector that injects context using the W3C Baggage
50
+ # format with Rack normalized keys (upcased and prefixed with
51
+ # HTTP_)
52
+ def rack_extractor
53
+ RACK_EXTRACTOR
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ module OpenTelemetry
8
+ module Baggage
9
+ module Propagation
10
+ # The ContextKeys module contains the keys used to index baggage
11
+ # in a {Context} instance
12
+ module ContextKeys
13
+ extend self
14
+
15
+ BAGGAGE_KEY = Context.create_key('baggage')
16
+ private_constant :BAGGAGE_KEY
17
+
18
+ # Returns the context key that baggage are indexed by
19
+ #
20
+ # @return [Context::Key]
21
+ def baggage_key
22
+ BAGGAGE_KEY
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -7,41 +7,41 @@
7
7
  require 'cgi'
8
8
 
9
9
  module OpenTelemetry
10
- module CorrelationContext
10
+ module Baggage
11
11
  module Propagation
12
- # Extracts correlations from carriers in the W3C Correlation Context format
13
- class TextExtractor
12
+ # Extracts baggage from carriers in the W3C Baggage format
13
+ class TextMapExtractor
14
14
  include Context::Propagation::DefaultGetter
15
15
 
16
- # Returns a new TextExtractor that extracts context using the specified
16
+ # Returns a new TextMapExtractor that extracts context using the specified
17
17
  # header key
18
18
  #
19
- # @param [String] correlation_context_key The correlation context header
19
+ # @param [String] baggage_key The baggage header
20
20
  # key used in the carrier
21
- # @return [TextExtractor]
22
- def initialize(correlation_context_key: 'Correlation-Context')
23
- @correlation_context_key = correlation_context_key
21
+ # @return [TextMapExtractor]
22
+ def initialize(baggage_key: 'baggage')
23
+ @baggage_key = baggage_key
24
24
  end
25
25
 
26
- # Extract remote correlations from the supplied carrier.
26
+ # Extract remote baggage from the supplied carrier.
27
27
  # If extraction fails, the original context will be returned
28
28
  #
29
29
  # @param [Carrier] carrier The carrier to get the header from
30
- # @param [Context] context The context to be updated with extracted correlations
30
+ # @param [Context] context The context to be updated with extracted baggage
31
31
  # @param [optional Callable] getter An optional callable that takes a carrier and a key and
32
32
  # returns the value associated with the key. If omitted the default getter will be used
33
33
  # which expects the carrier to respond to [] and []=.
34
34
  # @yield [Carrier, String] if an optional getter is provided, extract will yield the carrier
35
35
  # and the header key to the getter.
36
- # @return [Context] context updated with extracted correlations, or the original context
36
+ # @return [Context] context updated with extracted baggage, or the original context
37
37
  # if extraction fails
38
38
  def extract(carrier, context, &getter)
39
39
  getter ||= default_getter
40
- header = getter.call(carrier, @correlation_context_key)
40
+ header = getter.call(carrier, @baggage_key)
41
41
 
42
42
  entries = header.gsub(/\s/, '').split(',')
43
43
 
44
- correlations = entries.each_with_object({}) do |entry, memo|
44
+ baggage = entries.each_with_object({}) do |entry, memo|
45
45
  # The ignored variable below holds properties as per the W3C spec.
46
46
  # OTel is not using them currently, but they might be used for
47
47
  # metadata in the future
@@ -50,7 +50,7 @@ module OpenTelemetry
50
50
  memo[k] = v
51
51
  end
52
52
 
53
- context.set_value(ContextKeys.correlation_context_key, correlations)
53
+ context.set_value(ContextKeys.baggage_key, baggage)
54
54
  rescue StandardError
55
55
  context
56
56
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2019 OpenTelemetry Authors
4
+ #
5
+ # SPDX-License-Identifier: Apache-2.0
6
+
7
+ require 'cgi'
8
+
9
+ module OpenTelemetry
10
+ module Baggage
11
+ module Propagation
12
+ # Injects baggage using the W3C Baggage format
13
+ class TextMapInjector
14
+ include Context::Propagation::DefaultSetter
15
+
16
+ # Returns a new TextMapInjector that injects context using the specified
17
+ # header key
18
+ #
19
+ # @param [String] baggage_key The baggage header
20
+ # key used in the carrier
21
+ # @return [TextMapInjector]
22
+ def initialize(baggage_key: 'baggage')
23
+ @baggage_key = baggage_key
24
+ end
25
+
26
+ # Inject in-process baggage into the supplied carrier.
27
+ #
28
+ # @param [Carrier] carrier The carrier to inject baggage into
29
+ # @param [Context] context The context to read baggage from
30
+ # @param [optional Callable] getter An optional callable that takes a carrier and a key and
31
+ # returns the value associated with the key. If omitted the default getter will be used
32
+ # which expects the carrier to respond to [] and []=.
33
+ # @yield [Carrier, String] if an optional getter is provided, inject will yield the carrier
34
+ # and the header key to the getter.
35
+ # @return [Object] carrier with injected baggage
36
+ def inject(carrier, context, &setter)
37
+ return carrier unless (baggage = context[ContextKeys.baggage_key]) && !baggage.empty?
38
+
39
+ setter ||= default_setter
40
+ setter.call(carrier, @baggage_key, encode(baggage))
41
+
42
+ carrier
43
+ end
44
+
45
+ private
46
+
47
+ def encode(baggage)
48
+ baggage.inject(+'') do |memo, (k, v)|
49
+ memo << CGI.escape(k.to_s) << '=' << CGI.escape(v.to_s) << ','
50
+ end.chop!
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -38,12 +38,10 @@ module OpenTelemetry
38
38
  # @return [Object] carrier
39
39
  def inject(carrier, context = Context.current, &setter)
40
40
  @injectors.inject(carrier) do |memo, injector|
41
- begin
42
- injector.inject(memo, context, &setter)
43
- rescue => e # rubocop:disable Style/RescueStandardError
44
- OpenTelemetry.logger.warn "Error in CompositePropagator#inject #{e.message}"
45
- carrier
46
- end
41
+ injector.inject(memo, context, &setter)
42
+ rescue => e # rubocop:disable Style/RescueStandardError
43
+ OpenTelemetry.logger.warn "Error in CompositePropagator#inject #{e.message}"
44
+ carrier
47
45
  end
48
46
  end
49
47
 
@@ -63,12 +61,10 @@ module OpenTelemetry
63
61
  # carrier
64
62
  def extract(carrier, context = Context.current, &getter)
65
63
  @extractors.inject(context) do |ctx, extractor|
66
- begin
67
- extractor.extract(carrier, ctx, &getter)
68
- rescue => e # rubocop:disable Style/RescueStandardError
69
- OpenTelemetry.logger.warn "Error in CompositePropagator#extract #{e.message}"
70
- ctx
71
- end
64
+ extractor.extract(carrier, ctx, &getter)
65
+ rescue => e # rubocop:disable Style/RescueStandardError
66
+ OpenTelemetry.logger.warn "Error in CompositePropagator#extract #{e.message}"
67
+ ctx
72
68
  end
73
69
  end
74
70
  end
@@ -5,11 +5,11 @@
5
5
  # SPDX-License-Identifier: Apache-2.0
6
6
 
7
7
  require 'opentelemetry/instrumentation/registry'
8
- require 'opentelemetry/instrumentation/adapter'
8
+ require 'opentelemetry/instrumentation/base'
9
9
 
10
10
  module OpenTelemetry
11
11
  # The instrumentation module contains functionality to register and install
12
- # instrumentation adapters
12
+ # instrumentation
13
13
  module Instrumentation
14
14
  end
15
15
  end
@@ -6,20 +6,20 @@
6
6
 
7
7
  module OpenTelemetry
8
8
  module Instrumentation
9
- # The Adapter class holds all metadata and configuration for an
10
- # instrumentation adapter. All instrumentation adapter packages should
11
- # include a subclass of +Instrumentation::Adapter+ that will register
9
+ # The Base class holds all metadata and configuration for an
10
+ # instrumentation. All instrumentation packages should
11
+ # include a subclass of +Instrumentation::Base+ that will register
12
12
  # it with +OpenTelemetry.instrumentation_registry+ and make it available for
13
13
  # discovery and installation by an SDK.
14
14
  #
15
- # A typical subclass of Adapter will provide an install block, a present
15
+ # A typical subclass of Base will provide an install block, a present
16
16
  # block, and possibly a compatible block. Below is an
17
17
  # example:
18
18
  #
19
19
  # module OpenTelemetry
20
- # module Adapters
20
+ # module Instrumentation
21
21
  # module Sinatra
22
- # class Adapter < OpenTelemetry::Instrumentation::Adapter
22
+ # class Instrumentation < OpenTelemetry::Instrumentation::Base
23
23
  # install do |config|
24
24
  # # install instrumentation, either by library hook or applying
25
25
  # # a monkey patch
@@ -39,27 +39,27 @@ module OpenTelemetry
39
39
  # end
40
40
  # end
41
41
  #
42
- # The adapter name and version will be inferred from the namespace of the
43
- # class. In this example, they'd be 'OpenTelemetry::Adapters::Sinatra' and
44
- # OpenTelemetry::Adapters::Sinatra::VERSION, but can be explicitly set using
45
- # the +adapter_name+ and +adapter_version+ methods if necessary.
42
+ # The instrumentation name and version will be inferred from the namespace of the
43
+ # class. In this example, they'd be 'OpenTelemetry::Instrumentation::Sinatra' and
44
+ # OpenTelemetry::Instrumentation::Sinatra::VERSION, but can be explicitly set using
45
+ # the +instrumentation_name+ and +instrumetation_version+ methods if necessary.
46
46
  #
47
- # All subclasses of OpenTelemetry::Instrumentation::Adapter are automatically
47
+ # All subclasses of OpenTelemetry::Instrumentation::Base are automatically
48
48
  # registered with OpenTelemetry.instrumentation_registry which is used by
49
49
  # SDKs for instrumentation discovery and installation.
50
50
  #
51
- # Instrumentation libraries can use the adapter subclass to easily gain
51
+ # Instrumentation libraries can use the instrumentation subclass to easily gain
52
52
  # a reference to its named tracer. For example:
53
53
  #
54
- # OpenTelemetry::Adapters::Sinatra.instance.tracer
54
+ # OpenTelemetry::Instrumentation::Sinatra.instance.tracer
55
55
  #
56
- # The adapter class establishes a convention for disabling an adapter
57
- # by environment variable and local configuration. An adapter disabled
56
+ # The instrumention class establishes a convention for disabling an instrumentation
57
+ # by environment variable and local configuration. An instrumentation disabled
58
58
  # by environment variable will take precedence over local config. The
59
59
  # convention for environment variable name is the library name, upcased with
60
- # '::' replaced by underscores, and '_ENABLED' appended. For example:
61
- # OPENTELEMETRY_ADAPTERS_SINATRA_ENABLED = false.
62
- class Adapter
60
+ # '::' replaced by underscores, OPENTELEMETRY shortened to OTEL_{LANG}, and '_ENABLED' appended.
61
+ # For example: OTEL_RUBY_INSTRUMENTATION_SINATRA_ENABLED = false.
62
+ class Base
63
63
  class << self
64
64
  NAME_REGEX = /^(?:(?<namespace>[a-zA-Z0-9_:]+):{2})?(?<classname>[a-zA-Z0-9_]+)$/.freeze
65
65
  private_constant :NAME_REGEX
@@ -70,67 +70,67 @@ module OpenTelemetry
70
70
  OpenTelemetry.instrumentation_registry.register(subclass)
71
71
  end
72
72
 
73
- # Optionally set the name of this instrumentation adapter. If not
73
+ # Optionally set the name of this instrumentation. If not
74
74
  # explicitly set, the name will default to the namespace of the class,
75
75
  # or the class name if it does not have a namespace. If there is not
76
76
  # a namespace, or a class name, it will default to 'unknown'.
77
77
  #
78
- # @param [String] adapter_name The full name of the adapter package
79
- def adapter_name(adapter_name = nil)
80
- if adapter_name
81
- @adapter_name = adapter_name
78
+ # @param [String] instrumentation_name The full name of the instrumentation package
79
+ def instrumentation_name(instrumentation_name = nil)
80
+ if instrumentation_name
81
+ @instrumentation_name = instrumentation_name
82
82
  else
83
- @adapter_name ||= infer_name || 'unknown'
83
+ @instrumentation_name ||= infer_name || 'unknown'
84
84
  end
85
85
  end
86
86
 
87
- # Optionally set the version of this adapter. If not explicitly set,
87
+ # Optionally set the version of this instrumentation. If not explicitly set,
88
88
  # the version will default to the VERSION constant under namespace of
89
89
  # the class, or the VERSION constant under the class name if it does not
90
90
  # have a namespace. If a VERSION constant cannot be found, it defaults
91
91
  # to '0.0.0'.
92
92
  #
93
- # @param [String] adapter_version The version of the adapter package
94
- def adapter_version(adapter_version = nil)
95
- if adapter_version
96
- @adapter_version = adapter_version
93
+ # @param [String] instrumentation_version The version of the instrumentation package
94
+ def instrumentation_version(instrumentation_version = nil)
95
+ if instrumentation_version
96
+ @instrumentation_version = instrumentation_version
97
97
  else
98
- @adapter_version ||= infer_version || '0.0.0'
98
+ @instrumentation_version ||= infer_version || '0.0.0'
99
99
  end
100
100
  end
101
101
 
102
- # The install block for this adapter. This will be where you install
102
+ # The install block for this instrumentation. This will be where you install
103
103
  # instrumentation, either by framework hook or applying a monkey patch.
104
104
  #
105
- # @param [Callable] blk The install block for this adapter
106
- # @yieldparam [Hash] config The adapter config will be yielded to the
105
+ # @param [Callable] blk The install block for this instrumentation
106
+ # @yieldparam [Hash] config The instrumentation config will be yielded to the
107
107
  # install block
108
108
  def install(&blk)
109
109
  @install_blk = blk
110
110
  end
111
111
 
112
- # The present block for this adapter. This block is used to detect if
112
+ # The present block for this instrumentation. This block is used to detect if
113
113
  # target library is present on the system. Typically this will involve
114
114
  # checking to see if the target gem spec was loaded or if expected
115
115
  # constants from the target library are present.
116
116
  #
117
- # @param [Callable] blk The present block for this adapter
117
+ # @param [Callable] blk The present block for this instrumentation
118
118
  def present(&blk)
119
119
  @present_blk = blk
120
120
  end
121
121
 
122
- # The compatible block for this adapter. This check will be run if the
122
+ # The compatible block for this instrumentation. This check will be run if the
123
123
  # target library is present to determine if it's compatible. It's not
124
124
  # required, but a common use case will be to check to target library
125
125
  # version for compatibility.
126
126
  #
127
- # @param [Callable] blk The compatibility block for this adapter
127
+ # @param [Callable] blk The compatibility block for this instrumentation
128
128
  def compatible(&blk)
129
129
  @compatible_blk = blk
130
130
  end
131
131
 
132
132
  def instance
133
- @instance ||= new(adapter_name, adapter_version, install_blk,
133
+ @instance ||= new(instrumentation_name, instrumentation_version, install_blk,
134
134
  present_blk, compatible_blk)
135
135
  end
136
136
 
@@ -171,11 +171,11 @@ module OpenTelemetry
171
171
  @installed = false
172
172
  end
173
173
 
174
- # Install adapter with the given config. The present? and compatible?
174
+ # Install instrumentation with the given config. The present? and compatible?
175
175
  # will be run first, and install will return false if either fail. Will
176
176
  # return true if install was completed successfully.
177
177
  #
178
- # @param [Hash] config The config for this adapter
178
+ # @param [Hash] config The config for this instrumentation
179
179
  def install(config = {})
180
180
  return true if installed?
181
181
  return false unless installable?(config)
@@ -186,24 +186,24 @@ module OpenTelemetry
186
186
  @installed = true
187
187
  end
188
188
 
189
- # Whether or not this adapter is installable in the current process. Will
190
- # be true when the adapter defines an install block, is not disabled
189
+ # Whether or not this instrumentation is installable in the current process. Will
190
+ # be true when the instrumentation defines an install block, is not disabled
191
191
  # by environment or config, and the target library present and compatible.
192
192
  #
193
- # @param [Hash] config The config for this adapter
193
+ # @param [Hash] config The config for this instrumentation
194
194
  def installable?(config = {})
195
195
  @install_blk && enabled?(config) && present? && compatible?
196
196
  end
197
197
 
198
- # Calls the present block of the Adapter subclasses, if no block is provided
199
- # it's assumed the adapter is not present
198
+ # Calls the present block of the Instrumentation subclasses, if no block is provided
199
+ # it's assumed the instrumentation is not present
200
200
  def present?
201
201
  return false unless @present_blk
202
202
 
203
203
  instance_exec(&@present_blk)
204
204
  end
205
205
 
206
- # Calls the compatible block of the Adapter subclasses, if no block is provided
206
+ # Calls the compatible block of the Instrumentation subclasses, if no block is provided
207
207
  # it's assumed to be compatible
208
208
  def compatible?
209
209
  return true unless @compatible_blk
@@ -211,7 +211,7 @@ module OpenTelemetry
211
211
  instance_exec(&@compatible_blk)
212
212
  end
213
213
 
214
- # Whether this adapter is enabled. It first checks to see if it's enabled
214
+ # Whether this instrumentation is enabled. It first checks to see if it's enabled
215
215
  # by an environment variable and will proceed to check if it's enabled
216
216
  # by local config, if given.
217
217
  #
@@ -225,16 +225,17 @@ module OpenTelemetry
225
225
 
226
226
  private
227
227
 
228
- # Checks to see if this adapter is enabled by env var. By convention, the
229
- # environment variable will be the adapter name upper cased, with '::'
230
- # replaced by underscores and _ENABLED appended. For example, the
231
- # environment variable name for OpenTelemetry::Adapter::Sinatra will be
232
- # OPENTELEMETRY_ADAPTERS_SINATRA_ENABLED. A value of 'false' will disable
233
- # the adapter, all other values will enable it.
228
+ # Checks to see if this instrumentation is enabled by env var. By convention, the
229
+ # environment variable will be the instrumentation name upper cased, with '::'
230
+ # replaced by underscores, OPENTELEMETRY shortened to OTEL_{LANG} and _ENABLED appended.
231
+ # For example, the, environment variable name for OpenTelemetry::Instrumentation::Sinatra
232
+ # will be OTEL_RUBY_INSTRUMENTATION_SINATRA_ENABLED. A value of 'false' will disable
233
+ # the instrumentation, all other values will enable it.
234
234
  def enabled_by_env_var?
235
235
  var_name = name.dup.tap do |n|
236
236
  n.upcase!
237
237
  n.gsub!('::', '_')
238
+ n.gsub!('OPENTELEMETRY_', 'OTEL_RUBY_')
238
239
  n << '_ENABLED'
239
240
  end
240
241
  ENV[var_name] != 'false'