opentelemetry-api 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/opentelemetry.rb +7 -3
- data/lib/opentelemetry/baggage/propagation.rb +2 -22
- data/lib/opentelemetry/baggage/propagation/text_map_extractor.rb +12 -15
- data/lib/opentelemetry/baggage/propagation/text_map_injector.rb +12 -15
- data/lib/opentelemetry/context/propagation.rb +28 -3
- data/lib/opentelemetry/context/propagation/composite_propagator.rb +10 -11
- data/lib/opentelemetry/context/propagation/noop_extractor.rb +1 -1
- data/lib/opentelemetry/context/propagation/propagator.rb +10 -10
- data/lib/opentelemetry/context/propagation/rack_env_getter.rb +46 -0
- data/lib/opentelemetry/context/propagation/text_map_getter.rb +27 -0
- data/lib/opentelemetry/context/propagation/text_map_setter.rb +21 -0
- data/lib/opentelemetry/trace/propagation/trace_context.rb +4 -23
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_extractor.rb +13 -18
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_injector.rb +13 -18
- data/lib/opentelemetry/version.rb +1 -1
- metadata +7 -7
- data/lib/opentelemetry/context/propagation/default_getter.rb +0 -26
- data/lib/opentelemetry/context/propagation/default_setter.rb +0 -26
- data/lib/opentelemetry/context/propagation/propagation.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23c4a8602afe2513fff72ec29784b696ae41eccee8c3b25eb4cf48081856b22b
|
4
|
+
data.tar.gz: 17507ad2d0dbb697e6f1bb8cbf133d0baa01234d7383d9bb726b0d5fb11c4cb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c37bb2d8a469bda44a121bfca1218380553cbc66d24e8001df4c2e67d93f9b474335962095b77a28e6de3c53f34af98ea18b12a3335cdd45d0b04d50510b2be
|
7
|
+
data.tar.gz: 3980934cdfdb34e96eb8215a9ebb26eb0b3d096be3e545837ee9d6595ff5e114ea680e692ccc7d0af2d89d8a4550e180671e4d92c5266b6a445c45fc991e0602
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Release History: opentelemetry-api
|
2
2
|
|
3
|
+
### v0.14.0 / 2021-02-03
|
4
|
+
|
5
|
+
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
6
|
+
|
7
|
+
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
8
|
+
|
3
9
|
### v0.13.0 / 2021-01-29
|
4
10
|
|
5
11
|
* ADDED: Add optional attributes to record_exception
|
data/lib/opentelemetry.rb
CHANGED
@@ -22,7 +22,8 @@ require 'opentelemetry/version'
|
|
22
22
|
module OpenTelemetry
|
23
23
|
extend self
|
24
24
|
|
25
|
-
attr_writer :tracer_provider, :meter_provider, :
|
25
|
+
attr_writer :tracer_provider, :meter_provider, :propagation, :baggage,
|
26
|
+
:logger, :error_handler
|
26
27
|
|
27
28
|
# @return [Object, Logger] configured Logger or a default STDOUT Logger.
|
28
29
|
def logger
|
@@ -68,8 +69,11 @@ module OpenTelemetry
|
|
68
69
|
@baggage ||= Baggage::Manager.new
|
69
70
|
end
|
70
71
|
|
71
|
-
# @return [Context::Propagation::
|
72
|
+
# @return [Context::Propagation::Propagator] a propagator instance
|
72
73
|
def propagation
|
73
|
-
@propagation ||= Context::Propagation::
|
74
|
+
@propagation ||= Context::Propagation::Propagator.new(
|
75
|
+
Context::Propagation::NoopInjector.new,
|
76
|
+
Context::Propagation::NoopExtractor.new
|
77
|
+
)
|
74
78
|
end
|
75
79
|
end
|
@@ -15,17 +15,11 @@ module OpenTelemetry
|
|
15
15
|
module Propagation
|
16
16
|
extend self
|
17
17
|
|
18
|
+
BAGGAGE_KEY = 'baggage'
|
18
19
|
TEXT_MAP_EXTRACTOR = TextMapExtractor.new
|
19
20
|
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
21
|
|
27
|
-
private_constant :
|
28
|
-
:RACK_EXTRACTOR
|
22
|
+
private_constant :BAGGAGE_KEY, :TEXT_MAP_INJECTOR, :TEXT_MAP_EXTRACTOR
|
29
23
|
|
30
24
|
# Returns an extractor that extracts context using the W3C Baggage
|
31
25
|
# format
|
@@ -38,20 +32,6 @@ module OpenTelemetry
|
|
38
32
|
def text_map_extractor
|
39
33
|
TEXT_MAP_EXTRACTOR
|
40
34
|
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
35
|
end
|
56
36
|
end
|
57
37
|
end
|
@@ -11,16 +11,15 @@ module OpenTelemetry
|
|
11
11
|
module Propagation
|
12
12
|
# Extracts baggage from carriers in the W3C Baggage format
|
13
13
|
class TextMapExtractor
|
14
|
-
include Context::Propagation::DefaultGetter
|
15
|
-
|
16
14
|
# Returns a new TextMapExtractor that extracts context using the specified
|
17
|
-
#
|
15
|
+
# getter
|
18
16
|
#
|
19
|
-
# @param [
|
20
|
-
#
|
17
|
+
# @param [optional Getter] default_getter The default getter used to read
|
18
|
+
# headers from a carrier during extract. Defaults to a
|
19
|
+
# {OpenTelemetry::Context::Propagation::TextMapGetter} instance.
|
21
20
|
# @return [TextMapExtractor]
|
22
|
-
def initialize(
|
23
|
-
@
|
21
|
+
def initialize(default_getter = Context::Propagation.text_map_getter)
|
22
|
+
@default_getter = default_getter
|
24
23
|
end
|
25
24
|
|
26
25
|
# Extract remote baggage from the supplied carrier.
|
@@ -28,16 +27,14 @@ module OpenTelemetry
|
|
28
27
|
#
|
29
28
|
# @param [Carrier] carrier The carrier to get the header from
|
30
29
|
# @param [Context] context The context to be updated with extracted baggage
|
31
|
-
# @param [optional
|
32
|
-
#
|
33
|
-
#
|
34
|
-
# @yield [Carrier, String] if an optional getter is provided, extract will yield the carrier
|
35
|
-
# and the header key to the getter.
|
30
|
+
# @param [optional Getter] getter If the optional getter is provided, it
|
31
|
+
# will be used to read the header from the carrier, otherwise the default
|
32
|
+
# getter will be used.
|
36
33
|
# @return [Context] context updated with extracted baggage, or the original context
|
37
34
|
# if extraction fails
|
38
|
-
def extract(carrier, context,
|
39
|
-
getter ||= default_getter
|
40
|
-
header = getter.
|
35
|
+
def extract(carrier, context, getter = nil)
|
36
|
+
getter ||= @default_getter
|
37
|
+
header = getter.get(carrier, BAGGAGE_KEY)
|
41
38
|
|
42
39
|
entries = header.gsub(/\s/, '').split(',')
|
43
40
|
|
@@ -11,33 +11,30 @@ module OpenTelemetry
|
|
11
11
|
module Propagation
|
12
12
|
# Injects baggage using the W3C Baggage format
|
13
13
|
class TextMapInjector
|
14
|
-
include Context::Propagation::DefaultSetter
|
15
|
-
|
16
14
|
# Returns a new TextMapInjector that injects context using the specified
|
17
|
-
#
|
15
|
+
# setter
|
18
16
|
#
|
19
|
-
# @param [
|
20
|
-
#
|
17
|
+
# @param [optional Setter] default_setter The default setter used to
|
18
|
+
# write context into a carrier during inject. Defaults to a
|
19
|
+
# {OpenTelemetry::Context::Propagation::TextMapSetter} instance.
|
21
20
|
# @return [TextMapInjector]
|
22
|
-
def initialize(
|
23
|
-
@
|
21
|
+
def initialize(default_setter = Context::Propagation.text_map_setter)
|
22
|
+
@default_setter = default_setter
|
24
23
|
end
|
25
24
|
|
26
25
|
# Inject in-process baggage into the supplied carrier.
|
27
26
|
#
|
28
27
|
# @param [Carrier] carrier The carrier to inject baggage into
|
29
28
|
# @param [Context] context The context to read baggage from
|
30
|
-
# @param [optional
|
31
|
-
#
|
32
|
-
#
|
33
|
-
# @yield [Carrier, String] if an optional getter is provided, inject will yield the carrier
|
34
|
-
# and the header key to the getter.
|
29
|
+
# @param [optional Setter] setter If the optional setter is provided, it
|
30
|
+
# will be used to write context into the carrier, otherwise the default
|
31
|
+
# setter will be used.
|
35
32
|
# @return [Object] carrier with injected baggage
|
36
|
-
def inject(carrier, context,
|
33
|
+
def inject(carrier, context, setter = nil)
|
37
34
|
return carrier unless (baggage = context[ContextKeys.baggage_key]) && !baggage.empty?
|
38
35
|
|
39
|
-
setter ||= default_setter
|
40
|
-
setter.
|
36
|
+
setter ||= @default_setter
|
37
|
+
setter.set(carrier, BAGGAGE_KEY, encode(baggage))
|
41
38
|
|
42
39
|
carrier
|
43
40
|
end
|
@@ -5,18 +5,43 @@
|
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
7
7
|
require 'opentelemetry/context/propagation/composite_propagator'
|
8
|
-
require 'opentelemetry/context/propagation/default_getter'
|
9
|
-
require 'opentelemetry/context/propagation/default_setter'
|
10
8
|
require 'opentelemetry/context/propagation/noop_extractor'
|
11
9
|
require 'opentelemetry/context/propagation/noop_injector'
|
12
|
-
require 'opentelemetry/context/propagation/propagation'
|
13
10
|
require 'opentelemetry/context/propagation/propagator'
|
11
|
+
require 'opentelemetry/context/propagation/text_map_getter'
|
12
|
+
require 'opentelemetry/context/propagation/text_map_setter'
|
13
|
+
require 'opentelemetry/context/propagation/rack_env_getter'
|
14
14
|
|
15
15
|
module OpenTelemetry
|
16
16
|
class Context
|
17
17
|
# The propagation module contains APIs and utilities to interact with context
|
18
18
|
# and propagate across process boundaries.
|
19
19
|
module Propagation
|
20
|
+
extend self
|
21
|
+
|
22
|
+
TEXT_MAP_GETTER = TextMapGetter.new
|
23
|
+
TEXT_MAP_SETTER = TextMapSetter.new
|
24
|
+
RACK_ENV_GETTER = RackEnvGetter.new
|
25
|
+
|
26
|
+
private_constant :TEXT_MAP_GETTER, :TEXT_MAP_SETTER, :RACK_ENV_GETTER
|
27
|
+
|
28
|
+
# Returns a {TextMapGetter} instance suitable for reading values from a
|
29
|
+
# hash-like carrier
|
30
|
+
def text_map_getter
|
31
|
+
TEXT_MAP_GETTER
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns a {TextMapSetter} instance suitable for writing values into a
|
35
|
+
# hash-like carrier
|
36
|
+
def text_map_setter
|
37
|
+
TEXT_MAP_SETTER
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns a {RackEnvGetter} instance suitable for reading values from a
|
41
|
+
# Rack environment.
|
42
|
+
def rack_env_getter
|
43
|
+
RACK_ENV_GETTER
|
44
|
+
end
|
20
45
|
end
|
21
46
|
end
|
22
47
|
end
|
@@ -30,15 +30,14 @@ module OpenTelemetry
|
|
30
30
|
# context into
|
31
31
|
# @param [optional Context] context Context to be injected into carrier.
|
32
32
|
# Defaults to +Context.current+
|
33
|
-
# @param [optional
|
34
|
-
#
|
35
|
-
#
|
36
|
-
# the carrier to respond to [] and []=.
|
33
|
+
# @param [optional Setter] setter If the optional setter is provided, it
|
34
|
+
# will be used to write context into the carrier, otherwise the default
|
35
|
+
# setter will be used.
|
37
36
|
#
|
38
37
|
# @return [Object] carrier
|
39
|
-
def inject(carrier, context
|
38
|
+
def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter)
|
40
39
|
@injectors.inject(carrier) do |memo, injector|
|
41
|
-
injector.inject(memo, context,
|
40
|
+
injector.inject(memo, context, setter)
|
42
41
|
rescue => e # rubocop:disable Style/RescueStandardError
|
43
42
|
OpenTelemetry.logger.warn "Error in CompositePropagator#inject #{e.message}"
|
44
43
|
carrier
|
@@ -53,15 +52,15 @@ module OpenTelemetry
|
|
53
52
|
# @param [Object] carrier The carrier to extract context from
|
54
53
|
# @param [optional Context] context Context to be updated with the state
|
55
54
|
# extracted from the carrier. Defaults to +Context.current+
|
56
|
-
# @param [optional
|
57
|
-
#
|
58
|
-
#
|
55
|
+
# @param [optional Getter] getter If the optional getter is provided, it
|
56
|
+
# will be used to read the header from the carrier, otherwise the default
|
57
|
+
# getter will be used.
|
59
58
|
#
|
60
59
|
# @return [Context] a new context updated with state extracted from the
|
61
60
|
# carrier
|
62
|
-
def extract(carrier, context
|
61
|
+
def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
|
63
62
|
@extractors.inject(context) do |ctx, extractor|
|
64
|
-
extractor.extract(carrier, ctx,
|
63
|
+
extractor.extract(carrier, ctx, getter)
|
65
64
|
rescue => e # rubocop:disable Style/RescueStandardError
|
66
65
|
OpenTelemetry.logger.warn "Error in CompositePropagator#extract #{e.message}"
|
67
66
|
ctx
|
@@ -17,7 +17,7 @@ module OpenTelemetry
|
|
17
17
|
# @param [optional Callable] getter An optional callable that takes a carrier and a key and
|
18
18
|
# and returns the value associated with the key
|
19
19
|
# @return [Context]
|
20
|
-
def extract(carrier, context,
|
20
|
+
def extract(carrier, context, getter = nil)
|
21
21
|
context
|
22
22
|
end
|
23
23
|
end
|
@@ -28,13 +28,13 @@ module OpenTelemetry
|
|
28
28
|
# context into
|
29
29
|
# @param [optional Context] context Context to be injected into carrier. Defaults
|
30
30
|
# to +Context.current+
|
31
|
-
# @param [optional
|
32
|
-
#
|
33
|
-
# will be used
|
31
|
+
# @param [optional Setter] setter If the optional setter is provided, it
|
32
|
+
# will be used to write context into the carrier, otherwise the default
|
33
|
+
# setter will be used.
|
34
34
|
#
|
35
35
|
# @return [Object] carrier
|
36
|
-
def inject(carrier, context
|
37
|
-
@injector.inject(carrier, context,
|
36
|
+
def inject(carrier, context: Context.current, setter: Context::Propagation.text_map_setter)
|
37
|
+
@injector.inject(carrier, context, setter)
|
38
38
|
rescue => e # rubocop:disable Style/RescueStandardError
|
39
39
|
OpenTelemetry.logger.warn "Error in Propagator#inject #{e.message}"
|
40
40
|
carrier
|
@@ -46,14 +46,14 @@ module OpenTelemetry
|
|
46
46
|
# @param [Object] carrier The carrier to extract context from
|
47
47
|
# @param [optional Context] context Context to be updated with the state
|
48
48
|
# extracted from the carrier. Defaults to +Context.current+
|
49
|
-
# @param [optional
|
50
|
-
#
|
51
|
-
#
|
49
|
+
# @param [optional Getter] getter If the optional getter is provided, it
|
50
|
+
# will be used to read the header from the carrier, otherwise the default
|
51
|
+
# getter will be used.
|
52
52
|
#
|
53
53
|
# @return [Context] a new context updated with state extracted from the
|
54
54
|
# carrier
|
55
|
-
def extract(carrier, context
|
56
|
-
@extractor.extract(carrier, context,
|
55
|
+
def extract(carrier, context: Context.current, getter: Context::Propagation.text_map_getter)
|
56
|
+
@extractor.extract(carrier, context, getter)
|
57
57
|
rescue => e # rubocop:disable Style/RescueStandardError
|
58
58
|
OpenTelemetry.logger.warn "Error in Propagator#extract #{e.message}"
|
59
59
|
context
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
class Context
|
9
|
+
module Propagation
|
10
|
+
# The RackEnvGetter class provides a common methods for reading
|
11
|
+
# keys from a rack environment. It abstracts away the rack-normalization
|
12
|
+
# process so that keys can be looked up without having to transform them
|
13
|
+
# first. With this class you can get +traceparent+ instead of
|
14
|
+
# +HTTP_TRACEPARENT+
|
15
|
+
class RackEnvGetter
|
16
|
+
# Converts key into a rack-normalized key and reads it from the carrier.
|
17
|
+
# Useful for extract operations.
|
18
|
+
def get(carrier, key)
|
19
|
+
carrier[to_rack_key(key)]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Reads all keys from a carrier and converts them from the rack-normalized
|
23
|
+
# form to the original. The resulting keys will be lowercase and
|
24
|
+
# underscores will be replaced with dashes.
|
25
|
+
def keys(carrier)
|
26
|
+
carrier.keys.map(&method(:from_rack_key))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def to_rack_key(key)
|
32
|
+
ret = 'HTTP_' + key
|
33
|
+
ret.tr!('-', '_')
|
34
|
+
ret.upcase!
|
35
|
+
end
|
36
|
+
|
37
|
+
def from_rack_key(key)
|
38
|
+
start = key.start_with?('HTTP_') ? 5 : 0
|
39
|
+
ret = key[start..-1]
|
40
|
+
ret.tr!('_', '-')
|
41
|
+
ret.downcase!
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The 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 methods for reading
|
11
|
+
# key from a carrier that implements +[]+ and a +keys+ method
|
12
|
+
class TextMapGetter
|
13
|
+
# Reads a key from a carrier that implements +[]+. Useful for extract
|
14
|
+
# operations.
|
15
|
+
def get(carrier, key)
|
16
|
+
carrier[key]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Reads all keys from a carrier. Useful for iterating over a carrier's
|
20
|
+
# keys.
|
21
|
+
def keys(carrier)
|
22
|
+
carrier.keys
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The 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
|
+
class TextMapSetter
|
13
|
+
# Writes key into a carrier that implements +[]=+. Useful for inject
|
14
|
+
# operations.
|
15
|
+
def set(carrier, key, value)
|
16
|
+
carrier[key] = value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -15,20 +15,13 @@ module OpenTelemetry
|
|
15
15
|
# for context propagation in the W3C Trace Context format.
|
16
16
|
module TraceContext
|
17
17
|
extend self
|
18
|
-
|
18
|
+
TRACEPARENT_KEY = 'traceparent'
|
19
|
+
TRACESTATE_KEY = 'tracestate'
|
19
20
|
TEXT_MAP_EXTRACTOR = TextMapExtractor.new
|
20
21
|
TEXT_MAP_INJECTOR = TextMapInjector.new
|
21
|
-
RACK_EXTRACTOR = TextMapExtractor.new(
|
22
|
-
traceparent_key: 'HTTP_TRACEPARENT',
|
23
|
-
tracestate_key: 'HTTP_TRACESTATE'
|
24
|
-
)
|
25
|
-
RACK_INJECTOR = TextMapInjector.new(
|
26
|
-
traceparent_key: 'HTTP_TRACEPARENT',
|
27
|
-
tracestate_key: 'HTTP_TRACESTATE'
|
28
|
-
)
|
29
22
|
|
30
|
-
private_constant :
|
31
|
-
:
|
23
|
+
private_constant :TRACEPARENT_KEY, :TRACESTATE_KEY,
|
24
|
+
:TEXT_MAP_INJECTOR, :TEXT_MAP_EXTRACTOR
|
32
25
|
|
33
26
|
# Returns an extractor that extracts context using the W3C Trace Context
|
34
27
|
# format
|
@@ -41,18 +34,6 @@ module OpenTelemetry
|
|
41
34
|
def text_map_injector
|
42
35
|
TEXT_MAP_INJECTOR
|
43
36
|
end
|
44
|
-
|
45
|
-
# Returns an extractor that extracts context using the W3C Trace Context
|
46
|
-
# with Rack normalized keys (upcased and prefixed with HTTP_)
|
47
|
-
def rack_extractor
|
48
|
-
RACK_EXTRACTOR
|
49
|
-
end
|
50
|
-
|
51
|
-
# Returns an injector that injects context using the W3C Trace Context
|
52
|
-
# format with Rack normalized keys (upcased and prefixed with HTTP_)
|
53
|
-
def rack_injector
|
54
|
-
RACK_INJECTOR
|
55
|
-
end
|
56
37
|
end
|
57
38
|
end
|
58
39
|
end
|
@@ -9,18 +9,15 @@ module OpenTelemetry
|
|
9
9
|
module TraceContext
|
10
10
|
# Extracts context from carriers in the W3C Trace Context format
|
11
11
|
class TextMapExtractor
|
12
|
-
include Context::Propagation::DefaultGetter
|
13
|
-
|
14
12
|
# Returns a new TextMapExtractor that extracts context using the
|
15
|
-
# specified
|
13
|
+
# specified getter
|
16
14
|
#
|
17
|
-
# @param [
|
18
|
-
#
|
15
|
+
# @param [optional Getter] default_getter The default getter used to read
|
16
|
+
# headers from a carrier during extract. Defaults to a +TextMapGetter+
|
17
|
+
# instance.
|
19
18
|
# @return [TextMapExtractor]
|
20
|
-
def initialize(
|
21
|
-
|
22
|
-
@traceparent_key = traceparent_key
|
23
|
-
@tracestate_key = tracestate_key
|
19
|
+
def initialize(default_getter = Context::Propagation.text_map_getter)
|
20
|
+
@default_getter = default_getter
|
24
21
|
end
|
25
22
|
|
26
23
|
# Extract a remote {Trace::SpanContext} from the supplied carrier.
|
@@ -28,17 +25,15 @@ module OpenTelemetry
|
|
28
25
|
#
|
29
26
|
# @param [Carrier] carrier The carrier to get the header from.
|
30
27
|
# @param [Context] context The context to be updated with extracted context
|
31
|
-
# @param [optional
|
32
|
-
#
|
33
|
-
#
|
34
|
-
# @yield [Carrier, String] if an optional getter is provided, extract will yield the carrier
|
35
|
-
# and the header key to the getter.
|
28
|
+
# @param [optional Getter] getter If the optional getter is provided, it
|
29
|
+
# will be used to read the header from the carrier, otherwise the default
|
30
|
+
# getter will be used.
|
36
31
|
# @return [Context] Updated context with span context from the header, or the original
|
37
32
|
# context if parsing fails.
|
38
|
-
def extract(carrier, context,
|
39
|
-
getter ||= default_getter
|
40
|
-
tp = TraceParent.from_string(getter.
|
41
|
-
tracestate = Tracestate.from_string(getter.
|
33
|
+
def extract(carrier, context, getter = nil)
|
34
|
+
getter ||= @default_getter
|
35
|
+
tp = TraceParent.from_string(getter.get(carrier, TRACEPARENT_KEY))
|
36
|
+
tracestate = Tracestate.from_string(getter.get(carrier, TRACESTATE_KEY))
|
42
37
|
|
43
38
|
span_context = Trace::SpanContext.new(trace_id: tp.trace_id,
|
44
39
|
span_id: tp.span_id,
|
@@ -9,35 +9,30 @@ module OpenTelemetry
|
|
9
9
|
module TraceContext
|
10
10
|
# Injects context into carriers using the W3C Trace Context format
|
11
11
|
class TextMapInjector
|
12
|
-
include Context::Propagation::DefaultSetter
|
13
|
-
|
14
12
|
# Returns a new TextMapInjector that injects context using the
|
15
|
-
# specified
|
13
|
+
# specified setter
|
16
14
|
#
|
17
|
-
# @param [
|
18
|
-
#
|
15
|
+
# @param [optional Setter] default_setter The default setter used to
|
16
|
+
# write context into a carrier during inject. Defaults to a
|
17
|
+
# {TextMapSetter} instance.
|
19
18
|
# @return [TextMapInjector]
|
20
|
-
def initialize(
|
21
|
-
|
22
|
-
@traceparent_key = traceparent_key
|
23
|
-
@tracestate_key = tracestate_key
|
19
|
+
def initialize(default_setter = Context::Propagation.text_map_setter)
|
20
|
+
@default_setter = default_setter
|
24
21
|
end
|
25
22
|
|
26
23
|
# Set the span context on the supplied carrier.
|
27
24
|
#
|
28
25
|
# @param [Context] context The active {Context}.
|
29
|
-
# @param [optional
|
30
|
-
#
|
31
|
-
# will be used
|
32
|
-
# @yield [Carrier, String, String] if an optional setter is provided, inject will yield
|
33
|
-
# carrier, header key, header value to the setter.
|
26
|
+
# @param [optional Setter] setter If the optional setter is provided, it
|
27
|
+
# will be used to write context into the carrier, otherwise the default
|
28
|
+
# setter will be used.
|
34
29
|
# @return [Object] the carrier with context injected
|
35
|
-
def inject(carrier, context,
|
30
|
+
def inject(carrier, context, setter = nil)
|
36
31
|
return carrier unless (span_context = span_context_from(context))
|
37
32
|
|
38
|
-
setter ||=
|
39
|
-
setter.
|
40
|
-
setter.
|
33
|
+
setter ||= @default_setter
|
34
|
+
setter.set(carrier, TRACEPARENT_KEY, TraceParent.from_span_context(span_context).to_s)
|
35
|
+
setter.set(carrier, TRACESTATE_KEY, span_context.tracestate.to_s) unless span_context.tracestate.empty?
|
41
36
|
|
42
37
|
carrier
|
43
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opentelemetry-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.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-
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ipsa
|
@@ -160,12 +160,12 @@ files:
|
|
160
160
|
- lib/opentelemetry/context/key.rb
|
161
161
|
- lib/opentelemetry/context/propagation.rb
|
162
162
|
- lib/opentelemetry/context/propagation/composite_propagator.rb
|
163
|
-
- lib/opentelemetry/context/propagation/default_getter.rb
|
164
|
-
- lib/opentelemetry/context/propagation/default_setter.rb
|
165
163
|
- lib/opentelemetry/context/propagation/noop_extractor.rb
|
166
164
|
- lib/opentelemetry/context/propagation/noop_injector.rb
|
167
|
-
- lib/opentelemetry/context/propagation/propagation.rb
|
168
165
|
- lib/opentelemetry/context/propagation/propagator.rb
|
166
|
+
- lib/opentelemetry/context/propagation/rack_env_getter.rb
|
167
|
+
- lib/opentelemetry/context/propagation/text_map_getter.rb
|
168
|
+
- lib/opentelemetry/context/propagation/text_map_setter.rb
|
169
169
|
- lib/opentelemetry/error.rb
|
170
170
|
- lib/opentelemetry/instrumentation.rb
|
171
171
|
- lib/opentelemetry/instrumentation/base.rb
|
@@ -196,10 +196,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
|
196
196
|
licenses:
|
197
197
|
- Apache-2.0
|
198
198
|
metadata:
|
199
|
-
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v0.
|
199
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v0.14.0/file.CHANGELOG.html
|
200
200
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/api
|
201
201
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
|
202
|
-
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v0.
|
202
|
+
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v0.14.0
|
203
203
|
post_install_message:
|
204
204
|
rdoc_options: []
|
205
205
|
require_paths:
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Copyright The 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
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Copyright The 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
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# Copyright The 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
|