opentelemetry-api 0.2.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.yardopts +9 -0
- data/CHANGELOG.md +13 -0
- data/LICENSE +1 -1
- data/OVERVIEW.md +66 -0
- data/lib/{opentelemetry/distributed_context/manager.rb → opentelemetry-api.rb} +1 -6
- data/lib/opentelemetry.rb +37 -19
- data/lib/opentelemetry/baggage.rb +16 -0
- data/lib/opentelemetry/baggage/builder.rb +18 -0
- data/lib/opentelemetry/baggage/manager.rb +41 -0
- data/lib/opentelemetry/baggage/propagation.rb +57 -0
- data/lib/opentelemetry/baggage/propagation/context_keys.rb +27 -0
- data/lib/opentelemetry/baggage/propagation/text_map_extractor.rb +60 -0
- data/lib/opentelemetry/baggage/propagation/text_map_injector.rb +55 -0
- data/lib/opentelemetry/context.rb +138 -15
- data/lib/opentelemetry/context/key.rb +29 -0
- data/lib/opentelemetry/context/propagation.rb +22 -0
- data/lib/opentelemetry/context/propagation/composite_propagator.rb +73 -0
- data/lib/opentelemetry/context/propagation/default_getter.rb +26 -0
- data/lib/opentelemetry/context/propagation/default_setter.rb +26 -0
- data/lib/opentelemetry/context/propagation/noop_extractor.rb +26 -0
- data/lib/opentelemetry/context/propagation/noop_injector.rb +26 -0
- data/lib/opentelemetry/context/propagation/propagation.rb +27 -0
- data/lib/opentelemetry/context/propagation/propagator.rb +64 -0
- data/lib/opentelemetry/instrumentation.rb +15 -0
- data/lib/opentelemetry/instrumentation/base.rb +245 -0
- data/lib/opentelemetry/instrumentation/registry.rb +87 -0
- data/lib/opentelemetry/metrics.rb +1 -1
- data/lib/opentelemetry/metrics/handles.rb +5 -15
- data/lib/opentelemetry/metrics/instruments.rb +18 -69
- data/lib/opentelemetry/metrics/meter.rb +2 -39
- data/lib/opentelemetry/metrics/{meter_factory.rb → meter_provider.rb} +2 -2
- data/lib/opentelemetry/trace.rb +14 -17
- data/lib/opentelemetry/trace/link.rb +4 -3
- data/lib/opentelemetry/trace/propagation.rb +17 -0
- data/lib/opentelemetry/trace/propagation/context_keys.rb +35 -0
- data/lib/opentelemetry/trace/propagation/trace_context.rb +59 -0
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_extractor.rb +58 -0
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_injector.rb +55 -0
- data/lib/opentelemetry/trace/propagation/trace_context/trace_parent.rb +130 -0
- data/lib/opentelemetry/trace/span.rb +20 -20
- data/lib/opentelemetry/trace/span_context.rb +25 -1
- data/lib/opentelemetry/trace/status.rb +7 -2
- data/lib/opentelemetry/trace/tracer.rb +47 -13
- data/lib/opentelemetry/trace/tracer_provider.rb +22 -0
- data/lib/opentelemetry/trace/util/http_to_status.rb +47 -0
- data/lib/opentelemetry/version.rb +1 -1
- metadata +35 -17
- data/lib/opentelemetry/distributed_context.rb +0 -19
- data/lib/opentelemetry/distributed_context/distributed_context.rb +0 -24
- data/lib/opentelemetry/distributed_context/entry.rb +0 -66
- data/lib/opentelemetry/distributed_context/propagation.rb +0 -19
- data/lib/opentelemetry/distributed_context/propagation/binary_format.rb +0 -26
- data/lib/opentelemetry/distributed_context/propagation/text_format.rb +0 -76
- data/lib/opentelemetry/distributed_context/propagation/trace_parent.rb +0 -124
- data/lib/opentelemetry/internal.rb +0 -22
- data/lib/opentelemetry/trace/event.rb +0 -45
- data/lib/opentelemetry/trace/sampling_hint.rb +0 -22
- data/lib/opentelemetry/trace/tracer_factory.rb +0 -45
@@ -4,28 +4,151 @@
|
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
7
|
+
require 'opentelemetry/context/key'
|
8
|
+
require 'opentelemetry/context/propagation'
|
9
|
+
|
7
10
|
module OpenTelemetry
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
+
# Manages context on a per-fiber basis
|
12
|
+
class Context
|
13
|
+
KEY = :__opentelemetry_context__
|
14
|
+
EMPTY_ENTRIES = {}.freeze
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# Returns a key used to index a value in a Context
|
18
|
+
#
|
19
|
+
# @param [String] name The key name
|
20
|
+
# @return [Context::Key]
|
21
|
+
def create_key(name)
|
22
|
+
Key.new(name)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns current context, which is never nil
|
26
|
+
#
|
27
|
+
# @return [Context]
|
28
|
+
def current
|
29
|
+
Thread.current[KEY] ||= ROOT
|
30
|
+
end
|
31
|
+
|
32
|
+
# Sets the current context
|
33
|
+
#
|
34
|
+
# @param [Context] ctx The context to be made active
|
35
|
+
def current=(ctx)
|
36
|
+
Thread.current[KEY] = ctx
|
37
|
+
end
|
38
|
+
|
39
|
+
# Executes a block with ctx as the current context. It restores
|
40
|
+
# the previous context upon exiting.
|
41
|
+
#
|
42
|
+
# @param [Context] ctx The context to be made active
|
43
|
+
# @yield [context] Yields context to the block
|
44
|
+
def with_current(ctx)
|
45
|
+
prev = ctx.attach
|
46
|
+
yield ctx
|
47
|
+
ensure
|
48
|
+
ctx.detach(prev)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Execute a block in a new context with key set to value. Restores the
|
52
|
+
# previous context after the block executes.
|
53
|
+
|
54
|
+
# @param [String] key The lookup key
|
55
|
+
# @param [Object] value The object stored under key
|
56
|
+
# @param [Callable] Block to execute in a new context
|
57
|
+
# @yield [context, value] Yields the newly created context and value to
|
58
|
+
# the block
|
59
|
+
def with_value(key, value)
|
60
|
+
ctx = current.set_value(key, value)
|
61
|
+
prev = ctx.attach
|
62
|
+
yield ctx, value
|
63
|
+
ensure
|
64
|
+
ctx.detach(prev)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Execute a block in a new context where its values are merged with the
|
68
|
+
# incoming values. Restores the previous context after the block executes.
|
69
|
+
|
70
|
+
# @param [String] key The lookup key
|
71
|
+
# @param [Hash] values Will be merged with values of the current context
|
72
|
+
# and returned in a new context
|
73
|
+
# @param [Callable] Block to execute in a new context
|
74
|
+
# @yield [context, values] Yields the newly created context and values
|
75
|
+
# to the block
|
76
|
+
def with_values(values)
|
77
|
+
ctx = current.set_values(values)
|
78
|
+
prev = ctx.attach
|
79
|
+
yield ctx, values
|
80
|
+
ensure
|
81
|
+
ctx.detach(prev)
|
82
|
+
end
|
83
|
+
|
84
|
+
# Returns the value associated with key in the current context
|
85
|
+
#
|
86
|
+
# @param [String] key The lookup key
|
87
|
+
def value(key)
|
88
|
+
current.value(key)
|
89
|
+
end
|
90
|
+
|
91
|
+
def clear
|
92
|
+
self.current = ROOT
|
93
|
+
end
|
11
94
|
|
12
|
-
|
13
|
-
|
95
|
+
def empty
|
96
|
+
new(nil, EMPTY_ENTRIES)
|
97
|
+
end
|
14
98
|
end
|
15
99
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
store[key] = value
|
20
|
-
yield value
|
21
|
-
ensure
|
22
|
-
store[key] = previous
|
100
|
+
def initialize(parent, entries)
|
101
|
+
@parent = parent
|
102
|
+
@entries = entries.freeze
|
23
103
|
end
|
24
104
|
|
25
|
-
|
105
|
+
# Returns the corresponding value (or nil) for key
|
106
|
+
#
|
107
|
+
# @param [Key] key The lookup key
|
108
|
+
# @return [Object]
|
109
|
+
def value(key)
|
110
|
+
@entries[key]
|
111
|
+
end
|
112
|
+
|
113
|
+
alias [] value
|
114
|
+
|
115
|
+
# Returns a new Context where entries contains the newly added key and value
|
116
|
+
#
|
117
|
+
# @param [Key] key The key to store this value under
|
118
|
+
# @param [Object] value Object to be stored under key
|
119
|
+
# @return [Context]
|
120
|
+
def set_value(key, value)
|
121
|
+
new_entries = @entries.dup
|
122
|
+
new_entries[key] = value
|
123
|
+
Context.new(self, new_entries)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Returns a new Context with the current context's entries merged with the
|
127
|
+
# new entries
|
128
|
+
#
|
129
|
+
# @param [Hash] values The values to be merged with the current context's
|
130
|
+
# entries.
|
131
|
+
# @param [Object] value Object to be stored under key
|
132
|
+
# @return [Context]
|
133
|
+
def set_values(values) # rubocop:disable Naming/AccessorMethodName:
|
134
|
+
Context.new(self, @entries.merge(values))
|
135
|
+
end
|
26
136
|
|
27
|
-
|
28
|
-
|
137
|
+
# @api private
|
138
|
+
def attach
|
139
|
+
prev = self.class.current
|
140
|
+
self.class.current = self
|
141
|
+
prev
|
29
142
|
end
|
143
|
+
|
144
|
+
# @api private
|
145
|
+
def detach(ctx_to_attach = nil)
|
146
|
+
OpenTelemetry.logger.warn 'Calls to detach should match corresponding calls to attach' if self.class.current != self
|
147
|
+
|
148
|
+
ctx_to_attach ||= @parent || ROOT
|
149
|
+
ctx_to_attach.attach
|
150
|
+
end
|
151
|
+
|
152
|
+
ROOT = empty.freeze
|
30
153
|
end
|
31
154
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
# The Key class provides mechanisms to index and access values from a
|
10
|
+
# Context
|
11
|
+
class Key
|
12
|
+
attr_reader :name
|
13
|
+
|
14
|
+
# @api private
|
15
|
+
# Use Context.create_key to obtain a Key instance.
|
16
|
+
def initialize(name)
|
17
|
+
@name = name
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the value indexed by this Key in the specified context
|
21
|
+
#
|
22
|
+
# @param [optional Context] context The Context to lookup the key from.
|
23
|
+
# Defaults to +Context.current+.
|
24
|
+
def get(context = Context.current)
|
25
|
+
context[self]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
require 'opentelemetry/context/propagation/composite_propagator'
|
8
|
+
require 'opentelemetry/context/propagation/default_getter'
|
9
|
+
require 'opentelemetry/context/propagation/default_setter'
|
10
|
+
require 'opentelemetry/context/propagation/noop_extractor'
|
11
|
+
require 'opentelemetry/context/propagation/noop_injector'
|
12
|
+
require 'opentelemetry/context/propagation/propagation'
|
13
|
+
require 'opentelemetry/context/propagation/propagator'
|
14
|
+
|
15
|
+
module OpenTelemetry
|
16
|
+
class Context
|
17
|
+
# The propagation module contains APIs and utilities to interact with context
|
18
|
+
# and propagate across process boundaries.
|
19
|
+
module Propagation
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# A composite propagator composes a list of injectors and extractors into
|
11
|
+
# single interface exposing inject and extract methods. Injection and
|
12
|
+
# extraction will preserve the order of the injectors and extractors
|
13
|
+
# passed in during initialization.
|
14
|
+
class CompositePropagator
|
15
|
+
# Returns a Propagator that extracts using the provided extractors
|
16
|
+
# and injectors.
|
17
|
+
#
|
18
|
+
# @param [Array<#inject>] injectors
|
19
|
+
# @param [Array<#extract>] extractors
|
20
|
+
def initialize(injectors, extractors)
|
21
|
+
@injectors = injectors
|
22
|
+
@extractors = extractors
|
23
|
+
end
|
24
|
+
|
25
|
+
# Runs injectors in order and returns a carrier. If an injection fails
|
26
|
+
# a warning will be logged and remaining injectors will be executed.
|
27
|
+
# Always returns a valid carrier.
|
28
|
+
#
|
29
|
+
# @param [Object] carrier A carrier to inject context into
|
30
|
+
# context into
|
31
|
+
# @param [optional Context] context Context to be injected into carrier.
|
32
|
+
# Defaults to +Context.current+
|
33
|
+
# @param [optional Callable] setter An optional callable that takes a
|
34
|
+
# carrier, a key and a value and assigns the key-value pair in the
|
35
|
+
# carrier. If omitted the default setter will be used which expects
|
36
|
+
# the carrier to respond to [] and []=.
|
37
|
+
#
|
38
|
+
# @return [Object] carrier
|
39
|
+
def inject(carrier, context = Context.current, &setter)
|
40
|
+
@injectors.inject(carrier) do |memo, injector|
|
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
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Runs extractors in order and returns a Context updated with the
|
49
|
+
# results of each extraction. If an extraction fails, a warning will be
|
50
|
+
# logged and remaining extractors will continue to be executed. Always
|
51
|
+
# returns a valid context.
|
52
|
+
#
|
53
|
+
# @param [Object] carrier The carrier to extract context from
|
54
|
+
# @param [optional Context] context Context to be updated with the state
|
55
|
+
# extracted from the carrier. Defaults to +Context.current+
|
56
|
+
# @param [optional Callable] getter An optional callable that takes a carrier and a key and
|
57
|
+
# returns the value associated with the key. If omitted the default getter will be used
|
58
|
+
# which expects the carrier to respond to [] and []=.
|
59
|
+
#
|
60
|
+
# @return [Context] a new context updated with state extracted from the
|
61
|
+
# carrier
|
62
|
+
def extract(carrier, context = Context.current, &getter)
|
63
|
+
@extractors.inject(context) do |ctx, extractor|
|
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
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# The default getter module provides a common method for reading
|
11
|
+
# a key from a carrier that implements +[]+
|
12
|
+
module DefaultGetter
|
13
|
+
DEFAULT_GETTER = ->(carrier, key) { carrier[key] }
|
14
|
+
private_constant :DEFAULT_GETTER
|
15
|
+
|
16
|
+
# Returns a callable that can read a key from a carrier that implements
|
17
|
+
# +[]+. Useful for extract operations.
|
18
|
+
#
|
19
|
+
# @return [Callable]
|
20
|
+
def default_getter
|
21
|
+
DEFAULT_GETTER
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2019 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# The default setter module provides a common method for writing
|
11
|
+
# a key into a carrier that implements +[]=+
|
12
|
+
module DefaultSetter
|
13
|
+
DEFAULT_SETTER = ->(carrier, key, value) { carrier[key] = value }
|
14
|
+
private_constant :DEFAULT_SETTER
|
15
|
+
|
16
|
+
# Returns a callable that can write a key into a carrier that implements
|
17
|
+
# +[]=+. Useful for inject operations.
|
18
|
+
#
|
19
|
+
# @return [Callable]
|
20
|
+
def default_setter
|
21
|
+
DEFAULT_SETTER
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# A no-op extractor implementation
|
11
|
+
class NoopExtractor
|
12
|
+
# Extract a context from the given carrier
|
13
|
+
#
|
14
|
+
# @param [Object] carrier The carrier to extract the context from
|
15
|
+
# @param [Context] context The context to be upated with the extracted
|
16
|
+
# context
|
17
|
+
# @param [optional Callable] getter An optional callable that takes a carrier and a key and
|
18
|
+
# and returns the value associated with the key
|
19
|
+
# @return [Context]
|
20
|
+
def extract(carrier, context, &getter)
|
21
|
+
context
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# A no-op injector implementation
|
11
|
+
class NoopInjector
|
12
|
+
# Inject the given context into the specified carrier
|
13
|
+
#
|
14
|
+
# @param [Object] carrier The carrier to inject the provided context
|
15
|
+
# into
|
16
|
+
# @param [Context] context The context to be injected
|
17
|
+
# @param [optional Callable] setter An optional callable that takes a carrier and a key and
|
18
|
+
# a value and assigns the key-value pair in the carrier
|
19
|
+
# @return [Object] carrier
|
20
|
+
def inject(carrier, context, &setter)
|
21
|
+
carrier
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
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
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# The Propagation class provides methods to inject and extract context
|
11
|
+
# to pass across process boundaries
|
12
|
+
class Propagation
|
13
|
+
# Get or set the global http propagator. Use a CompositePropagator
|
14
|
+
# to propagate multiple formats.
|
15
|
+
attr_accessor :http
|
16
|
+
|
17
|
+
# Get or set the global text propagator. Use a CompositePropagator
|
18
|
+
# to propagate multiple formats.
|
19
|
+
attr_accessor :text
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@http = @text = Propagator.new(NoopInjector.new, NoopExtractor.new)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright 2020 OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# A propagator composes an extractor and injector into a single interface
|
11
|
+
# exposing inject and extract methods
|
12
|
+
class Propagator
|
13
|
+
# Returns a Propagator that delegates inject and extract to the provided
|
14
|
+
# injector and extractor
|
15
|
+
#
|
16
|
+
# @param [#inject] injector
|
17
|
+
# @param [#extract] extractor
|
18
|
+
def initialize(injector, extractor)
|
19
|
+
@injector = injector
|
20
|
+
@extractor = extractor
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns a carrier with the provided context injected according the
|
24
|
+
# underlying injector. Returns the carrier and logs a warning if
|
25
|
+
# injection fails.
|
26
|
+
#
|
27
|
+
# @param [Object] carrier A carrier to inject context into
|
28
|
+
# context into
|
29
|
+
# @param [optional Context] context Context to be injected into carrier. Defaults
|
30
|
+
# to +Context.current+
|
31
|
+
# @param [optional Callable] setter An optional callable that takes a carrier, a key and
|
32
|
+
# a value and assigns the key-value pair in the carrier. If omitted the default setter
|
33
|
+
# will be used which expects the carrier to respond to [] and []=.
|
34
|
+
#
|
35
|
+
# @return [Object] carrier
|
36
|
+
def inject(carrier, context = Context.current, &setter)
|
37
|
+
@injector.inject(carrier, context, &setter)
|
38
|
+
rescue => e # rubocop:disable Style/RescueStandardError
|
39
|
+
OpenTelemetry.logger.warn "Error in Propagator#inject #{e.message}"
|
40
|
+
carrier
|
41
|
+
end
|
42
|
+
|
43
|
+
# Extracts and returns context from a carrier. Returns the provided
|
44
|
+
# context and logs a warning if an error if extraction fails.
|
45
|
+
#
|
46
|
+
# @param [Object] carrier The carrier to extract context from
|
47
|
+
# @param [optional Context] context Context to be updated with the state
|
48
|
+
# extracted from the carrier. Defaults to +Context.current+
|
49
|
+
# @param [optional Callable] getter An optional callable that takes a carrier and a key and
|
50
|
+
# returns the value associated with the key. If omitted the default getter will be used
|
51
|
+
# which expects the carrier to respond to [] and []=.
|
52
|
+
#
|
53
|
+
# @return [Context] a new context updated with state extracted from the
|
54
|
+
# carrier
|
55
|
+
def extract(carrier, context = Context.current, &getter)
|
56
|
+
@extractor.extract(carrier, context, &getter)
|
57
|
+
rescue => e # rubocop:disable Style/RescueStandardError
|
58
|
+
OpenTelemetry.logger.warn "Error in Propagator#extract #{e.message}"
|
59
|
+
context
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|