opentelemetry-api 0.3.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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'