opentelemetry-api 0.5.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +2 -2
- data/CHANGELOG.md +38 -0
- data/{OVERVIEW.md → README.md} +0 -0
- data/lib/opentelemetry.rb +10 -10
- data/lib/opentelemetry/baggage.rb +16 -0
- data/lib/opentelemetry/{correlation_context → baggage}/builder.rb +2 -2
- data/lib/opentelemetry/{correlation_context → baggage}/manager.rb +8 -3
- data/lib/opentelemetry/baggage/propagation.rb +57 -0
- data/lib/opentelemetry/baggage/propagation/context_keys.rb +27 -0
- data/lib/opentelemetry/{correlation_context/propagation/text_extractor.rb → baggage/propagation/text_map_extractor.rb} +14 -14
- data/lib/opentelemetry/baggage/propagation/text_map_injector.rb +55 -0
- data/lib/opentelemetry/trace.rb +38 -4
- data/lib/opentelemetry/trace/link.rb +3 -3
- data/lib/opentelemetry/trace/propagation.rb +0 -1
- data/lib/opentelemetry/trace/propagation/trace_context.rb +11 -11
- data/lib/opentelemetry/trace/propagation/trace_context/{text_extractor.rb → text_map_extractor.rb} +5 -4
- data/lib/opentelemetry/trace/propagation/trace_context/{text_injector.rb → text_map_injector.rb} +5 -6
- data/lib/opentelemetry/trace/propagation/trace_context/trace_parent.rb +4 -4
- data/lib/opentelemetry/trace/span.rb +10 -18
- data/lib/opentelemetry/trace/span_context.rb +25 -1
- data/lib/opentelemetry/trace/status.rb +13 -71
- data/lib/opentelemetry/trace/tracer.rb +13 -54
- data/lib/opentelemetry/trace/util/http_to_status.rb +4 -23
- data/lib/opentelemetry/version.rb +1 -1
- metadata +18 -17
- data/lib/opentelemetry/correlation_context.rb +0 -16
- data/lib/opentelemetry/correlation_context/propagation.rb +0 -57
- data/lib/opentelemetry/correlation_context/propagation/context_keys.rb +0 -27
- data/lib/opentelemetry/correlation_context/propagation/text_injector.rb +0 -55
- data/lib/opentelemetry/internal.rb +0 -22
- data/lib/opentelemetry/trace/event.rb +0 -46
- data/lib/opentelemetry/trace/propagation/context_keys.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cee7fab7654059566d26d776b3813fbf526152804e861788d4c432c1167eb51
|
4
|
+
data.tar.gz: e1fb0ea50cf900e5caa840ddbc7031e083d4ac91250befab42036e7be93ab83d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0bdfb487a5d1031c9f5981ace74e9535e4bd871059ab7f43070e451c4ef598361dde7c15644a31ba9b4f829f578fdb520568f484250f57ce31e686f0005834d
|
7
|
+
data.tar.gz: 3c247ff76a50b9ba58ac6ce3b2f534a86c2792181323c43c5407bc4f13afa17273651eee5eebe808d419b266f7fc94d3cf29a39e05d3b387dd7fbed96819126e
|
data/.yardopts
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1 +1,39 @@
|
|
1
1
|
# Release History: opentelemetry-api
|
2
|
+
|
3
|
+
### v0.10.0 / 2020-12-03
|
4
|
+
|
5
|
+
* (No significant changes)
|
6
|
+
|
7
|
+
### v0.9.0 / 2020-11-27
|
8
|
+
|
9
|
+
* (No significant changes)
|
10
|
+
|
11
|
+
### v0.8.0 / 2020-10-27
|
12
|
+
|
13
|
+
* BREAKING CHANGE: Move context/span methods to Trace module
|
14
|
+
* BREAKING CHANGE: Remove 'canonical' from status codes
|
15
|
+
* BREAKING CHANGE: Assorted SpanContext fixes
|
16
|
+
|
17
|
+
* ADDED: B3 support
|
18
|
+
* FIXED: Move context/span methods to Trace module
|
19
|
+
* FIXED: Remove 'canonical' from status codes
|
20
|
+
* FIXED: Assorted SpanContext fixes
|
21
|
+
|
22
|
+
### v0.7.0 / 2020-10-07
|
23
|
+
|
24
|
+
* FIXED: Safely navigate span variable during error cases
|
25
|
+
* DOCS: Standardize toplevel docs structure and readme
|
26
|
+
* DOCS: Fix param description in TextMapInjector for Baggage
|
27
|
+
|
28
|
+
### v0.6.0 / 2020-09-10
|
29
|
+
|
30
|
+
* ADDED: Add support for OTEL_LOG_LEVEL env var
|
31
|
+
* Documented array valued attributes [#343](https://github.com/open-telemetry/opentelemetry-ruby/pull/343)
|
32
|
+
* Renamed CorrelationContext to Baggage [#338](https://github.com/open-telemetry/opentelemetry-ruby/pull/338)
|
33
|
+
* Renamed Text* to TextMap* (propagators) [#335](https://github.com/open-telemetry/opentelemetry-ruby/pull/335)
|
34
|
+
* Fixed exception semantic conventions (`span.record_error` -> `span.record_exception`) [#333](https://github.com/open-telemetry/opentelemetry-ruby/pull/333)
|
35
|
+
* Removed support for lazy event creation [#329](https://github.com/open-telemetry/opentelemetry-ruby/pull/329)
|
36
|
+
* `name:` named parameter to `span.add_event` becomes first positional argument
|
37
|
+
* `Event` class removed from API
|
38
|
+
* Added `hex_trace_id` and `hex_span_id` helpers to `SpanContext` [#332](https://github.com/open-telemetry/opentelemetry-ruby/pull/332)
|
39
|
+
* Added `CorrelationContext::Manager.values` method to return correlations as a `Hash` [#323](https://github.com/open-telemetry/opentelemetry-ruby/pull/323)
|
data/{OVERVIEW.md → README.md}
RENAMED
File without changes
|
data/lib/opentelemetry.rb
CHANGED
@@ -8,8 +8,7 @@ require 'logger'
|
|
8
8
|
|
9
9
|
require 'opentelemetry/error'
|
10
10
|
require 'opentelemetry/context'
|
11
|
-
require 'opentelemetry/
|
12
|
-
require 'opentelemetry/internal'
|
11
|
+
require 'opentelemetry/baggage'
|
13
12
|
require_relative './opentelemetry/instrumentation'
|
14
13
|
require 'opentelemetry/metrics'
|
15
14
|
require 'opentelemetry/trace'
|
@@ -23,9 +22,12 @@ require 'opentelemetry/version'
|
|
23
22
|
module OpenTelemetry
|
24
23
|
extend self
|
25
24
|
|
26
|
-
attr_writer :tracer_provider, :meter_provider, :
|
25
|
+
attr_writer :tracer_provider, :meter_provider, :baggage, :logger
|
27
26
|
|
28
|
-
|
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,
|
49
|
-
#
|
50
|
+
# @return [Object, Baggage::Manager] registered
|
51
|
+
# baggage manager or a default no-op implementation of the
|
50
52
|
# manager.
|
51
|
-
def
|
52
|
-
@
|
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
|
9
|
-
# No op implementation of
|
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
|
9
|
-
# No op implementation of
|
8
|
+
module Baggage
|
9
|
+
# No op implementation of Baggage::Manager
|
10
10
|
class Manager
|
11
11
|
NOOP_BUILDER = Builder.new
|
12
|
-
|
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
|
10
|
+
module Baggage
|
11
11
|
module Propagation
|
12
|
-
# Extracts
|
13
|
-
class
|
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
|
16
|
+
# Returns a new TextMapExtractor that extracts context using the specified
|
17
17
|
# header key
|
18
18
|
#
|
19
|
-
# @param [String]
|
19
|
+
# @param [String] baggage_key The baggage header
|
20
20
|
# key used in the carrier
|
21
|
-
# @return [
|
22
|
-
def initialize(
|
23
|
-
@
|
21
|
+
# @return [TextMapExtractor]
|
22
|
+
def initialize(baggage_key: 'baggage')
|
23
|
+
@baggage_key = baggage_key
|
24
24
|
end
|
25
25
|
|
26
|
-
# Extract remote
|
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
|
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
|
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, @
|
40
|
+
header = getter.call(carrier, @baggage_key)
|
41
41
|
|
42
42
|
entries = header.gsub(/\s/, '').split(',')
|
43
43
|
|
44
|
-
|
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.
|
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
|
data/lib/opentelemetry/trace.rb
CHANGED
@@ -9,6 +9,12 @@ module OpenTelemetry
|
|
9
9
|
# single logical operation, consolidated across various components of an
|
10
10
|
# application.
|
11
11
|
module Trace
|
12
|
+
extend self
|
13
|
+
|
14
|
+
CURRENT_SPAN_KEY = Context.create_key('current-span')
|
15
|
+
|
16
|
+
private_constant :CURRENT_SPAN_KEY
|
17
|
+
|
12
18
|
# An invalid trace identifier, a 16-byte string with all zero bytes.
|
13
19
|
INVALID_TRACE_ID = ("\0" * 16).b
|
14
20
|
|
@@ -19,7 +25,7 @@ module OpenTelemetry
|
|
19
25
|
# non-zero byte.
|
20
26
|
#
|
21
27
|
# @return [String] a valid trace ID.
|
22
|
-
def
|
28
|
+
def generate_trace_id
|
23
29
|
loop do
|
24
30
|
id = Random::DEFAULT.bytes(16)
|
25
31
|
return id unless id == INVALID_TRACE_ID
|
@@ -30,22 +36,50 @@ module OpenTelemetry
|
|
30
36
|
# non-zero byte.
|
31
37
|
#
|
32
38
|
# @return [String] a valid span ID.
|
33
|
-
def
|
39
|
+
def generate_span_id
|
34
40
|
loop do
|
35
41
|
id = Random::DEFAULT.bytes(8)
|
36
42
|
return id unless id == INVALID_SPAN_ID
|
37
43
|
end
|
38
44
|
end
|
45
|
+
|
46
|
+
# Returns the current span from the current or provided context
|
47
|
+
#
|
48
|
+
# @param [optional Context] context The context to lookup the current
|
49
|
+
# {Span} from. Defaults to Context.current
|
50
|
+
def current_span(context = nil)
|
51
|
+
context ||= Context.current
|
52
|
+
context.value(CURRENT_SPAN_KEY) || Span::INVALID
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns a context containing the span, derived from the optional parent
|
56
|
+
# context, or the current context if one was not provided.
|
57
|
+
#
|
58
|
+
# @param [optional Context] context The context to use as the parent for
|
59
|
+
# the returned context
|
60
|
+
def context_with_span(span, parent_context: Context.current)
|
61
|
+
parent_context.set_value(CURRENT_SPAN_KEY, span)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Activates/deactivates the Span within the current Context, which makes the "current span"
|
65
|
+
# available implicitly.
|
66
|
+
#
|
67
|
+
# On exit, the Span that was active before calling this method will be reactivated.
|
68
|
+
#
|
69
|
+
# @param [Span] span the span to activate
|
70
|
+
# @yield [span, context] yields span and a context containing the span to the block.
|
71
|
+
def with_span(span)
|
72
|
+
Context.with_value(CURRENT_SPAN_KEY, span) { |c, s| yield s, c }
|
73
|
+
end
|
39
74
|
end
|
40
75
|
end
|
41
76
|
|
42
|
-
require 'opentelemetry/trace/event'
|
43
77
|
require 'opentelemetry/trace/link'
|
44
|
-
require 'opentelemetry/trace/propagation'
|
45
78
|
require 'opentelemetry/trace/trace_flags'
|
46
79
|
require 'opentelemetry/trace/span_context'
|
47
80
|
require 'opentelemetry/trace/span_kind'
|
48
81
|
require 'opentelemetry/trace/span'
|
49
82
|
require 'opentelemetry/trace/status'
|
83
|
+
require 'opentelemetry/trace/propagation'
|
50
84
|
require 'opentelemetry/trace/tracer'
|
51
85
|
require 'opentelemetry/trace/tracer_provider'
|