opentelemetry-api 0.6.0 → 0.11.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 +2 -2
- data/CHANGELOG.md +33 -0
- data/LICENSE +1 -1
- data/{OVERVIEW.md → README.md} +0 -0
- data/lib/opentelemetry-api.rb +1 -1
- data/lib/opentelemetry.rb +1 -1
- data/lib/opentelemetry/baggage.rb +1 -1
- data/lib/opentelemetry/baggage/builder.rb +1 -1
- data/lib/opentelemetry/baggage/manager.rb +1 -1
- data/lib/opentelemetry/baggage/propagation.rb +1 -1
- data/lib/opentelemetry/baggage/propagation/context_keys.rb +1 -1
- data/lib/opentelemetry/baggage/propagation/text_map_extractor.rb +1 -1
- data/lib/opentelemetry/baggage/propagation/text_map_injector.rb +2 -2
- data/lib/opentelemetry/context.rb +1 -1
- data/lib/opentelemetry/context/key.rb +1 -1
- data/lib/opentelemetry/context/propagation.rb +1 -1
- data/lib/opentelemetry/context/propagation/composite_propagator.rb +1 -1
- data/lib/opentelemetry/context/propagation/default_getter.rb +1 -1
- data/lib/opentelemetry/context/propagation/default_setter.rb +1 -1
- data/lib/opentelemetry/context/propagation/noop_extractor.rb +1 -1
- data/lib/opentelemetry/context/propagation/noop_injector.rb +1 -1
- data/lib/opentelemetry/context/propagation/propagation.rb +1 -1
- data/lib/opentelemetry/context/propagation/propagator.rb +1 -1
- data/lib/opentelemetry/error.rb +1 -1
- data/lib/opentelemetry/instrumentation.rb +1 -1
- data/lib/opentelemetry/instrumentation/base.rb +1 -1
- data/lib/opentelemetry/instrumentation/registry.rb +2 -2
- data/lib/opentelemetry/metrics.rb +1 -1
- data/lib/opentelemetry/metrics/handles.rb +1 -1
- data/lib/opentelemetry/metrics/instruments.rb +1 -1
- data/lib/opentelemetry/metrics/meter.rb +1 -1
- data/lib/opentelemetry/metrics/meter_provider.rb +1 -1
- data/lib/opentelemetry/trace.rb +39 -3
- data/lib/opentelemetry/trace/link.rb +4 -4
- data/lib/opentelemetry/trace/propagation.rb +1 -2
- data/lib/opentelemetry/trace/propagation/trace_context.rb +1 -1
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_extractor.rb +5 -6
- data/lib/opentelemetry/trace/propagation/trace_context/text_map_injector.rb +4 -5
- data/lib/opentelemetry/trace/propagation/trace_context/trace_parent.rb +3 -3
- data/lib/opentelemetry/trace/span.rb +1 -1
- data/lib/opentelemetry/trace/span_context.rb +3 -3
- data/lib/opentelemetry/trace/span_kind.rb +1 -1
- data/lib/opentelemetry/trace/status.rb +14 -72
- data/lib/opentelemetry/trace/trace_flags.rb +1 -1
- data/lib/opentelemetry/trace/tracer.rb +14 -55
- data/lib/opentelemetry/trace/tracer_provider.rb +1 -1
- data/lib/opentelemetry/trace/tracestate.rb +158 -0
- data/lib/opentelemetry/trace/util/http_to_status.rb +5 -24
- data/lib/opentelemetry/version.rb +2 -2
- metadata +10 -6
- 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: 5b7fecd268c9efe43c452847e831bf1456d502c8531e589691b865bd1264b53f
|
4
|
+
data.tar.gz: d8b33160247e5d8c94b248f607b621333112cda1a6fc7af00ce68ef1caed1cb0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06e4bda488c11623f710a74288de802c8af5fbb879bb52edbd003dd10159ff443bde7c9d6f511915e0ecdaaf54244f7b8897c4137b466bd11bdc87f51b87d337
|
7
|
+
data.tar.gz: 8466f42436e3e89e0a4339699887b3eae95551dd601f66be5b3f9ffc76f3aaad2075e95cb6aeed945422e0ea998148b769dc2781d3095a67c2051c2cc52068a7
|
data/.yardopts
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,38 @@
|
|
1
1
|
# Release History: opentelemetry-api
|
2
2
|
|
3
|
+
### v0.11.0 / 2020-12-11
|
4
|
+
|
5
|
+
* BREAKING CHANGE: Implement tracestate
|
6
|
+
|
7
|
+
* ADDED: Implement tracestate
|
8
|
+
* FIXED: Missing white space from install messages
|
9
|
+
* FIXED: Copyright comments to not reference year
|
10
|
+
|
11
|
+
### v0.10.0 / 2020-12-03
|
12
|
+
|
13
|
+
* (No significant changes)
|
14
|
+
|
15
|
+
### v0.9.0 / 2020-11-27
|
16
|
+
|
17
|
+
* (No significant changes)
|
18
|
+
|
19
|
+
### v0.8.0 / 2020-10-27
|
20
|
+
|
21
|
+
* BREAKING CHANGE: Move context/span methods to Trace module
|
22
|
+
* BREAKING CHANGE: Remove 'canonical' from status codes
|
23
|
+
* BREAKING CHANGE: Assorted SpanContext fixes
|
24
|
+
|
25
|
+
* ADDED: B3 support
|
26
|
+
* FIXED: Move context/span methods to Trace module
|
27
|
+
* FIXED: Remove 'canonical' from status codes
|
28
|
+
* FIXED: Assorted SpanContext fixes
|
29
|
+
|
30
|
+
### v0.7.0 / 2020-10-07
|
31
|
+
|
32
|
+
* FIXED: Safely navigate span variable during error cases
|
33
|
+
* DOCS: Standardize toplevel docs structure and readme
|
34
|
+
* DOCS: Fix param description in TextMapInjector for Baggage
|
35
|
+
|
3
36
|
### v0.6.0 / 2020-09-10
|
4
37
|
|
5
38
|
* ADDED: Add support for OTEL_LOG_LEVEL env var
|
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
|
189
|
+
Copyright The 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.
|
data/{OVERVIEW.md → README.md}
RENAMED
File without changes
|
data/lib/opentelemetry-api.rb
CHANGED
data/lib/opentelemetry.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -16,7 +16,7 @@ module OpenTelemetry
|
|
16
16
|
# Returns a new TextMapInjector that injects 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
21
|
# @return [TextMapInjector]
|
22
22
|
def initialize(baggage_key: 'baggage')
|
data/lib/opentelemetry/error.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -79,7 +79,7 @@ module OpenTelemetry
|
|
79
79
|
OpenTelemetry.logger.warn "Instrumentation: #{instrumentation.name} failed to install"
|
80
80
|
end
|
81
81
|
rescue => e # rubocop:disable Style/RescueStandardError
|
82
|
-
OpenTelemetry.logger.warn "Instrumentation: #{instrumentation.name} unhandled exception" \
|
82
|
+
OpenTelemetry.logger.warn "Instrumentation: #{instrumentation.name} unhandled exception " \
|
83
83
|
"during install #{e}: #{e.backtrace}"
|
84
84
|
end
|
85
85
|
end
|
data/lib/opentelemetry/trace.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -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,17 +36,47 @@ 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
77
|
require 'opentelemetry/trace/link'
|
43
78
|
require 'opentelemetry/trace/trace_flags'
|
79
|
+
require 'opentelemetry/trace/tracestate'
|
44
80
|
require 'opentelemetry/trace/span_context'
|
45
81
|
require 'opentelemetry/trace/span_kind'
|
46
82
|
require 'opentelemetry/trace/span'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -18,7 +18,7 @@ module OpenTelemetry
|
|
18
18
|
# Returns the {SpanContext} for this link
|
19
19
|
#
|
20
20
|
# @return [SpanContext]
|
21
|
-
attr_reader :
|
21
|
+
attr_reader :span_context
|
22
22
|
|
23
23
|
# Returns the frozen attributes for this link.
|
24
24
|
#
|
@@ -33,13 +33,13 @@ module OpenTelemetry
|
|
33
33
|
# frozen during Link initialization.
|
34
34
|
# @return [Link]
|
35
35
|
def initialize(span_context, attributes = nil)
|
36
|
-
@
|
36
|
+
@span_context = span_context
|
37
37
|
@attributes = attributes.freeze || EMPTY_ATTRIBUTES
|
38
38
|
end
|
39
39
|
|
40
40
|
# Returns true if two {Link}s are equal.
|
41
41
|
def ==(other)
|
42
|
-
other.
|
42
|
+
other.span_context == @span_context && other.attributes == @attributes
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
7
|
-
require 'opentelemetry/trace/propagation/context_keys'
|
8
7
|
require 'opentelemetry/trace/propagation/trace_context'
|
9
8
|
|
10
9
|
module OpenTelemetry
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
module OpenTelemetry
|
@@ -37,17 +37,16 @@ module OpenTelemetry
|
|
37
37
|
# context if parsing fails.
|
38
38
|
def extract(carrier, context, &getter)
|
39
39
|
getter ||= default_getter
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
tracestate = getter.call(carrier, @tracestate_key)
|
40
|
+
tp = TraceParent.from_string(getter.call(carrier, @traceparent_key))
|
41
|
+
tracestate = Tracestate.from_string(getter.call(carrier, @tracestate_key))
|
44
42
|
|
45
43
|
span_context = Trace::SpanContext.new(trace_id: tp.trace_id,
|
46
44
|
span_id: tp.span_id,
|
47
45
|
trace_flags: tp.flags,
|
48
46
|
tracestate: tracestate,
|
49
47
|
remote: true)
|
50
|
-
|
48
|
+
span = Trace::Span.new(span_context: span_context)
|
49
|
+
OpenTelemetry::Trace.context_with_span(span)
|
51
50
|
rescue OpenTelemetry::Error
|
52
51
|
context
|
53
52
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
module OpenTelemetry
|
@@ -36,8 +36,8 @@ module OpenTelemetry
|
|
36
36
|
return carrier unless (span_context = span_context_from(context))
|
37
37
|
|
38
38
|
setter ||= DEFAULT_SETTER
|
39
|
-
setter.call(carrier, @traceparent_key, TraceParent.
|
40
|
-
setter.call(carrier, @tracestate_key, span_context.tracestate) unless span_context.tracestate.
|
39
|
+
setter.call(carrier, @traceparent_key, TraceParent.from_span_context(span_context).to_s)
|
40
|
+
setter.call(carrier, @tracestate_key, span_context.tracestate.to_s) unless span_context.tracestate.empty?
|
41
41
|
|
42
42
|
carrier
|
43
43
|
end
|
@@ -45,8 +45,7 @@ module OpenTelemetry
|
|
45
45
|
private
|
46
46
|
|
47
47
|
def span_context_from(context)
|
48
|
-
context
|
49
|
-
context[ContextKeys.extracted_span_context_key]
|
48
|
+
OpenTelemetry::Trace.current_span(context).context
|
50
49
|
end
|
51
50
|
end
|
52
51
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
module OpenTelemetry
|
@@ -31,9 +31,9 @@ module OpenTelemetry
|
|
31
31
|
|
32
32
|
class << self
|
33
33
|
# Creates a new {TraceParent} from a supplied {Trace::SpanContext}
|
34
|
-
# @param [SpanContext] ctx The context
|
34
|
+
# @param [SpanContext] ctx The span context
|
35
35
|
# @return [TraceParent] a trace parent
|
36
|
-
def
|
36
|
+
def from_span_context(ctx)
|
37
37
|
new(trace_id: ctx.trace_id, span_id: ctx.span_id, flags: ctx.trace_flags)
|
38
38
|
end
|
39
39
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -18,14 +18,14 @@ module OpenTelemetry
|
|
18
18
|
# @param [optional String] trace_id The trace ID associated with a {Span}.
|
19
19
|
# @param [optional String] span_id The span ID associated with a {Span}.
|
20
20
|
# @param [optional TraceFlags] trace_flags The trace flags associated with a {Span}.
|
21
|
-
# @param [optional
|
21
|
+
# @param [optional Tracestate] tracestate The tracestate associated with a {Span}. May be nil.
|
22
22
|
# @param [optional Boolean] remote Whether the {SpanContext} was extracted from the wire.
|
23
23
|
# @return [SpanContext]
|
24
24
|
def initialize(
|
25
25
|
trace_id: Trace.generate_trace_id,
|
26
26
|
span_id: Trace.generate_span_id,
|
27
27
|
trace_flags: TraceFlags::DEFAULT,
|
28
|
-
tracestate:
|
28
|
+
tracestate: Tracestate::DEFAULT,
|
29
29
|
remote: false
|
30
30
|
)
|
31
31
|
@trace_id = trace_id
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -9,15 +9,15 @@ require 'opentelemetry/trace/util/http_to_status'
|
|
9
9
|
module OpenTelemetry
|
10
10
|
module Trace
|
11
11
|
# Status represents the status of a finished {Span}. It is composed of a
|
12
|
-
#
|
12
|
+
# status code in conjunction with an optional descriptive message.
|
13
13
|
class Status
|
14
14
|
# Convenience utility, not in API spec:
|
15
15
|
extend Util::HttpToStatus
|
16
16
|
|
17
|
-
# Retrieve the
|
17
|
+
# Retrieve the status code of this Status.
|
18
18
|
#
|
19
19
|
# @return [Integer]
|
20
|
-
attr_reader :
|
20
|
+
attr_reader :code
|
21
21
|
|
22
22
|
# Retrieve the description of this Status.
|
23
23
|
#
|
@@ -26,10 +26,10 @@ module OpenTelemetry
|
|
26
26
|
|
27
27
|
# Initialize a Status.
|
28
28
|
#
|
29
|
-
# @param [Integer]
|
29
|
+
# @param [Integer] code One of the status codes below
|
30
30
|
# @param [String] description
|
31
|
-
def initialize(
|
32
|
-
@
|
31
|
+
def initialize(code, description: '')
|
32
|
+
@code = code
|
33
33
|
@description = description
|
34
34
|
end
|
35
35
|
|
@@ -37,78 +37,20 @@ module OpenTelemetry
|
|
37
37
|
#
|
38
38
|
# @return [Boolean]
|
39
39
|
def ok?
|
40
|
-
@
|
40
|
+
@code != ERROR
|
41
41
|
end
|
42
42
|
|
43
|
-
# The following represents the
|
44
|
-
# finished {Span}
|
45
|
-
# https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
|
43
|
+
# The following represents the set of status codes of a
|
44
|
+
# finished {Span}
|
46
45
|
|
47
46
|
# The operation completed successfully.
|
48
47
|
OK = 0
|
49
48
|
|
50
|
-
# The
|
51
|
-
|
49
|
+
# The default status.
|
50
|
+
UNSET = 1
|
52
51
|
|
53
|
-
# An
|
54
|
-
|
55
|
-
|
56
|
-
# Client specified an invalid argument. Note that this differs from
|
57
|
-
# {FAILED_PRECONDITION}. {INVALID_ARGUMENT} indicates arguments that are
|
58
|
-
# problematic regardless of the state of the system.
|
59
|
-
INVALID_ARGUMENT = 3
|
60
|
-
|
61
|
-
# Deadline expired before operation could complete. For operations that
|
62
|
-
# change the state of the system, this error may be returned even if the
|
63
|
-
# operation has completed successfully.
|
64
|
-
DEADLINE_EXCEEDED = 4
|
65
|
-
|
66
|
-
# Some requested entity (e.g., file or directory) was not found.
|
67
|
-
NOT_FOUND = 5
|
68
|
-
|
69
|
-
# Some entity that we attempted to create (e.g., file or directory)
|
70
|
-
# already exists.
|
71
|
-
ALREADY_EXISTS = 6
|
72
|
-
|
73
|
-
# The caller does not have permission to execute the specified operation.
|
74
|
-
# {PERMISSION_DENIED} must not be used if the caller cannot be identified
|
75
|
-
# (use {UNAUTHENTICATED} instead for those errors).
|
76
|
-
PERMISSION_DENIED = 7
|
77
|
-
|
78
|
-
# Some resource has been exhausted, perhaps a per-user quota, or perhaps
|
79
|
-
# the entire file system is out of space.
|
80
|
-
RESOURCE_EXHAUSTED = 8
|
81
|
-
|
82
|
-
# Operation was rejected because the system is not in a state required
|
83
|
-
# for the operation's execution.
|
84
|
-
FAILED_PRECONDITION = 9
|
85
|
-
|
86
|
-
# The operation was aborted, typically due to a concurrency issue like
|
87
|
-
# sequencer check failures, transaction aborts, etc.
|
88
|
-
ABORTED = 10
|
89
|
-
|
90
|
-
# Operation was attempted past the valid range. E.g., seeking or reading
|
91
|
-
# past end of file. Unlike {INVALID_ARGUMENT}, this error indicates a
|
92
|
-
# problem that may be fixed if the system state changes.
|
93
|
-
OUT_OF_RANGE = 11
|
94
|
-
|
95
|
-
# Operation is not implemented or not supported/enabled in this service.
|
96
|
-
UNIMPLEMENTED = 12
|
97
|
-
|
98
|
-
# Internal errors. Means some invariants expected by underlying system
|
99
|
-
# has been broken.
|
100
|
-
INTERNAL_ERROR = 13
|
101
|
-
|
102
|
-
# The service is currently unavailable. This is a most likely a transient
|
103
|
-
# condition and may be corrected by retrying with a backoff.
|
104
|
-
UNAVAILABLE = 14
|
105
|
-
|
106
|
-
# Unrecoverable data loss or corruption.
|
107
|
-
DATA_LOSS = 15
|
108
|
-
|
109
|
-
# The request does not have valid authentication credentials for the
|
110
|
-
# operation.
|
111
|
-
UNAUTHENTICATED = 16
|
52
|
+
# An error.
|
53
|
+
ERROR = 2
|
112
54
|
end
|
113
55
|
end
|
114
56
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -8,35 +8,6 @@ module OpenTelemetry
|
|
8
8
|
module Trace
|
9
9
|
# No-op implementation of Tracer.
|
10
10
|
class Tracer
|
11
|
-
EXTRACTED_SPAN_CONTEXT_KEY = Propagation::ContextKeys.extracted_span_context_key
|
12
|
-
CURRENT_SPAN_KEY = Propagation::ContextKeys.current_span_key
|
13
|
-
|
14
|
-
private_constant :EXTRACTED_SPAN_CONTEXT_KEY, :CURRENT_SPAN_KEY
|
15
|
-
|
16
|
-
# Returns the current span from the current or provided context
|
17
|
-
#
|
18
|
-
# @param [optional Context] context The context to lookup the current
|
19
|
-
# {Span} from. Defaults to Context.current
|
20
|
-
def current_span(context = Context.current)
|
21
|
-
context.value(CURRENT_SPAN_KEY) || Span::INVALID
|
22
|
-
end
|
23
|
-
|
24
|
-
# Returns the the active span context from the given {Context}, or current
|
25
|
-
# if one is not explicitly passed in. The active span context may refer to
|
26
|
-
# a {SpanContext} that has been extracted. If both a current {Span} and an
|
27
|
-
# extracted, {SpanContext} exist, the context of the current {Span} will be
|
28
|
-
# returned.
|
29
|
-
#
|
30
|
-
# @param [optional Context] context The context to lookup the active
|
31
|
-
# {SpanContext} from.
|
32
|
-
#
|
33
|
-
def active_span_context(context = nil)
|
34
|
-
context ||= Context.current
|
35
|
-
context.value(CURRENT_SPAN_KEY)&.context ||
|
36
|
-
context.value(EXTRACTED_SPAN_CONTEXT_KEY) ||
|
37
|
-
SpanContext::INVALID
|
38
|
-
end
|
39
|
-
|
40
11
|
# This is a helper for the default use-case of extending the current trace with a span.
|
41
12
|
#
|
42
13
|
# With this helper:
|
@@ -45,34 +16,24 @@ module OpenTelemetry
|
|
45
16
|
#
|
46
17
|
# Equivalent without helper:
|
47
18
|
#
|
48
|
-
# OpenTelemetry.
|
19
|
+
# OpenTelemetry::Trace.with_span(tracer.start_span('do-the-thing')) do ... end
|
49
20
|
#
|
50
21
|
# On exit, the Span that was active before calling this method will be reactivated. If an
|
51
22
|
# exception occurs during the execution of the provided block, it will be recorded on the
|
52
23
|
# span and reraised.
|
53
24
|
# @yield [span, context] yields the newly created span and a context containing the
|
54
25
|
# span to the block.
|
55
|
-
def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil, with_parent: nil
|
56
|
-
span =
|
57
|
-
|
26
|
+
def in_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil, with_parent: nil)
|
27
|
+
span = nil
|
28
|
+
span = start_span(name, attributes: attributes, links: links, start_timestamp: start_timestamp, kind: kind, with_parent: with_parent)
|
29
|
+
Trace.with_span(span) { |s, c| yield s, c }
|
58
30
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
59
|
-
span
|
60
|
-
span
|
61
|
-
|
31
|
+
span&.record_exception(e)
|
32
|
+
span&.status = Status.new(Status::ERROR,
|
33
|
+
description: "Unhandled exception of type: #{e.class}")
|
62
34
|
raise e
|
63
35
|
ensure
|
64
|
-
span
|
65
|
-
end
|
66
|
-
|
67
|
-
# Activates/deactivates the Span within the current Context, which makes the "current span"
|
68
|
-
# available implicitly.
|
69
|
-
#
|
70
|
-
# On exit, the Span that was active before calling this method will be reactivated.
|
71
|
-
#
|
72
|
-
# @param [Span] span the span to activate
|
73
|
-
# @yield [span, context] yields span and a context containing the span to the block.
|
74
|
-
def with_span(span)
|
75
|
-
Context.with_value(CURRENT_SPAN_KEY, span) { |c, s| yield s, c }
|
36
|
+
span&.finish
|
76
37
|
end
|
77
38
|
|
78
39
|
def start_root_span(name, attributes: nil, links: nil, start_timestamp: nil, kind: nil)
|
@@ -84,14 +45,12 @@ module OpenTelemetry
|
|
84
45
|
#
|
85
46
|
# Parent context can be either passed explicitly, or inferred from currently activated span.
|
86
47
|
#
|
87
|
-
# @param [optional
|
88
|
-
# +with_parent_context+.
|
89
|
-
# @param [optional Context] with_parent_context Explicitly managed. Overridden by
|
90
|
-
# +with_parent+.
|
48
|
+
# @param [optional Context] with_parent Explicitly managed parent context
|
91
49
|
#
|
92
50
|
# @return [Span]
|
93
|
-
def start_span(name, with_parent: nil,
|
94
|
-
span_context = with_parent
|
51
|
+
def start_span(name, with_parent: nil, attributes: nil, links: nil, start_timestamp: nil, kind: nil)
|
52
|
+
span_context = OpenTelemetry::Trace.current_span(with_parent).context
|
53
|
+
|
95
54
|
if span_context.valid?
|
96
55
|
Span.new(span_context: span_context)
|
97
56
|
else
|
@@ -0,0 +1,158 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
|
+
#
|
5
|
+
# SPDX-License-Identifier: Apache-2.0
|
6
|
+
|
7
|
+
module OpenTelemetry
|
8
|
+
module Trace
|
9
|
+
# Tracestate is a part of SpanContext, represented by an immutable list of
|
10
|
+
# string key/value pairs and formally defined by the W3C Trace Context
|
11
|
+
# specification https://www.w3.org/TR/trace-context/
|
12
|
+
class Tracestate
|
13
|
+
class << self
|
14
|
+
private :new # rubocop:disable Style/AccessModifierDeclarations
|
15
|
+
|
16
|
+
# Returns a newly created Tracestate parsed from the header provided.
|
17
|
+
#
|
18
|
+
# @param [String] header Encoding of the tracestate header defined by
|
19
|
+
# the W3C Trace Context specification https://www.w3.org/TR/trace-context/
|
20
|
+
# @return [Tracestate] A new Tracestate instance or DEFAULT
|
21
|
+
def from_string(header) # rubocop:disable Metrics/CyclomaticComplexity:
|
22
|
+
return DEFAULT if header.nil? || header.empty?
|
23
|
+
|
24
|
+
hash = header.split(',').each_with_object({}) do |member, memo|
|
25
|
+
member.strip!
|
26
|
+
kv = member.split('=')
|
27
|
+
k, v = *kv
|
28
|
+
next unless kv.length == 2 && VALID_KEY.match?(k) && VALID_VALUE.match?(v)
|
29
|
+
|
30
|
+
memo[k] = v
|
31
|
+
end
|
32
|
+
return DEFAULT if hash.empty?
|
33
|
+
|
34
|
+
new(hash)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns a Tracestate created from a Hash.
|
38
|
+
#
|
39
|
+
# @param [Hash<String, String>] hash Key-value pairs to store in the
|
40
|
+
# Tracestate. Keys and values are validated against the W3C Trace
|
41
|
+
# Context specification, and any invalid members are logged at
|
42
|
+
# DEBUG level and dropped.
|
43
|
+
# @return [Tracestate] A new Tracestate instance or DEFAULT
|
44
|
+
def from_hash(hash)
|
45
|
+
hash = hash.select do |k, v|
|
46
|
+
valid = VALID_KEY.match?(k) && VALID_VALUE.match?(v)
|
47
|
+
OpenTelemetry.logger.debug("Invalid Tracestate member - #{k} : #{v}") unless valid
|
48
|
+
valid
|
49
|
+
end
|
50
|
+
new(hash)
|
51
|
+
end
|
52
|
+
|
53
|
+
# @api private
|
54
|
+
# Returns a new Tracestate created from the Hash provided. This
|
55
|
+
# skips validation of the keys and values, assuming they are already
|
56
|
+
# valid.
|
57
|
+
# This method is intended only for the use of instance methods in
|
58
|
+
# this class.
|
59
|
+
def create(hash)
|
60
|
+
new(hash)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
MAX_MEMBER_COUNT = 32 # Defined by https://www.w3.org/TR/trace-context/
|
65
|
+
VALID_KEY = Regexp.union(%r(^[a-z][a-z0-9_\-*/]{,255}$), %r(^[a-z0-9][a-z0-9_\-*/]{,240}@[a-z][a-z0-9_\-*/]{,13}$)).freeze
|
66
|
+
VALID_VALUE = /^[ -~&&[^,=]]{,255}[!-~&&[^,=]]$/.freeze
|
67
|
+
private_constant(:MAX_MEMBER_COUNT, :VALID_KEY, :VALID_VALUE)
|
68
|
+
|
69
|
+
# @api private
|
70
|
+
# The constructor is private and only for use internally by the class.
|
71
|
+
# Users should use the {from_hash} or {from_string} factory methods to
|
72
|
+
# obtain a {Tracestate} instance.
|
73
|
+
#
|
74
|
+
# @param [Hash<String, String>] hash Key-value pairs
|
75
|
+
# @return [Tracestate]
|
76
|
+
def initialize(hash)
|
77
|
+
excess = hash.size - MAX_MEMBER_COUNT
|
78
|
+
hash = Hash[hash.drop(excess)] if excess.positive?
|
79
|
+
@hash = hash.freeze
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns the value associated with the given key, or nil if the key
|
83
|
+
# is not present.
|
84
|
+
#
|
85
|
+
# @param [String] key The key to lookup.
|
86
|
+
# @return [String] The value associated with the key, or nil.
|
87
|
+
def value(key)
|
88
|
+
@hash[key]
|
89
|
+
end
|
90
|
+
|
91
|
+
alias [] value
|
92
|
+
|
93
|
+
# Adds a new key/value pair or updates an existing value for a given key.
|
94
|
+
# Keys and values are validated against the W3C Trace Context
|
95
|
+
# specification, and any invalid members are logged at DEBUG level and
|
96
|
+
# ignored.
|
97
|
+
#
|
98
|
+
# @param [String] key The key to add or update.
|
99
|
+
# @param [String] value The value to add or update.
|
100
|
+
# @return [Tracestate] self, if unchanged, or a new Tracestate containing
|
101
|
+
# the new or updated key/value pair.
|
102
|
+
def set_value(key, value)
|
103
|
+
return self unless VALID_KEY.match?(key) && VALID_VALUE.match?(value)
|
104
|
+
|
105
|
+
h = Hash[@hash]
|
106
|
+
h[key] = value
|
107
|
+
self.class.create(h)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Deletes the key/value pair associated with the given key.
|
111
|
+
#
|
112
|
+
# @param [String] key The key to remove.
|
113
|
+
# @return [Tracestate] self, if unchanged, or a new Tracestate without
|
114
|
+
# the specified key.
|
115
|
+
def delete(key)
|
116
|
+
return self unless @hash.key?(key)
|
117
|
+
|
118
|
+
h = Hash[@hash]
|
119
|
+
h.delete(key)
|
120
|
+
self.class.create(h)
|
121
|
+
end
|
122
|
+
|
123
|
+
# Returns this Tracestate encoded according to the W3C Trace Context
|
124
|
+
# specification https://www.w3.org/TR/trace-context/
|
125
|
+
#
|
126
|
+
# @return [String] this Tracestate encoded as a string.
|
127
|
+
def to_s
|
128
|
+
@hash.inject(+'') do |memo, (k, v)|
|
129
|
+
memo << k << '=' << v << ','
|
130
|
+
end.chop! || ''
|
131
|
+
end
|
132
|
+
|
133
|
+
# Returns this Tracestate as a Hash.
|
134
|
+
#
|
135
|
+
# @return [Hash] the members of this Tracestate
|
136
|
+
def to_h
|
137
|
+
@hash.dup
|
138
|
+
end
|
139
|
+
|
140
|
+
# Returns true if this Tracestate is empty.
|
141
|
+
#
|
142
|
+
# @return [Boolean] true if this Tracestate is empty, else false.
|
143
|
+
def empty?
|
144
|
+
@hash.empty?
|
145
|
+
end
|
146
|
+
|
147
|
+
# Returns true if this Tracestate equals other.
|
148
|
+
#
|
149
|
+
# @param [Tracestate] other The Tracestate for comparison.
|
150
|
+
# @return [Boolean] true if this Tracestate == other, else false.
|
151
|
+
def ==(other)
|
152
|
+
@hash == other.to_h
|
153
|
+
end
|
154
|
+
|
155
|
+
DEFAULT = new({})
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
@@ -9,36 +9,17 @@ module OpenTelemetry
|
|
9
9
|
module Util
|
10
10
|
# Convenience methods, not necessarily required by the API specification.
|
11
11
|
module HttpToStatus
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/data-http.md#status
|
12
|
+
# Maps numeric HTTP status codes to Trace::Status. This module is a mixin for Trace::Status
|
13
|
+
# and is not intended for standalone use.
|
15
14
|
#
|
16
15
|
# @param code Numeric HTTP status
|
17
16
|
# @return Status
|
18
|
-
def http_to_status(code)
|
17
|
+
def http_to_status(code)
|
19
18
|
case code.to_i
|
20
19
|
when 100..399
|
21
20
|
new(const_get(:OK))
|
22
|
-
when 401
|
23
|
-
new(const_get(:UNAUTHENTICATED))
|
24
|
-
when 403
|
25
|
-
new(const_get(:PERMISSION_DENIED))
|
26
|
-
when 404
|
27
|
-
new(const_get(:NOT_FOUND))
|
28
|
-
when 429
|
29
|
-
new(const_get(:RESOURCE_EXHAUSTED))
|
30
|
-
when 400..499
|
31
|
-
new(const_get(:INVALID_ARGUMENT))
|
32
|
-
when 501
|
33
|
-
new(const_get(:UNIMPLEMENTED))
|
34
|
-
when 503
|
35
|
-
new(const_get(:UNAVAILABLE))
|
36
|
-
when 504
|
37
|
-
new(const_get(:DEADLINE_EXCEEDED))
|
38
|
-
when 500..599
|
39
|
-
new(const_get(:INTERNAL_ERROR))
|
40
21
|
else
|
41
|
-
new(const_get(:
|
22
|
+
new(const_get(:ERROR))
|
42
23
|
end
|
43
24
|
end
|
44
25
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Copyright
|
3
|
+
# Copyright The OpenTelemetry Authors
|
4
4
|
#
|
5
5
|
# SPDX-License-Identifier: Apache-2.0
|
6
6
|
|
7
7
|
module OpenTelemetry
|
8
8
|
## Current OpenTelemetry version
|
9
|
-
VERSION = '0.
|
9
|
+
VERSION = '0.11.0'
|
10
10
|
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.11.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: 2020-
|
11
|
+
date: 2020-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: benchmark-ipsa
|
@@ -146,7 +146,7 @@ files:
|
|
146
146
|
- ".yardopts"
|
147
147
|
- CHANGELOG.md
|
148
148
|
- LICENSE
|
149
|
-
-
|
149
|
+
- README.md
|
150
150
|
- lib/opentelemetry-api.rb
|
151
151
|
- lib/opentelemetry.rb
|
152
152
|
- lib/opentelemetry/baggage.rb
|
@@ -178,7 +178,6 @@ files:
|
|
178
178
|
- lib/opentelemetry/trace.rb
|
179
179
|
- lib/opentelemetry/trace/link.rb
|
180
180
|
- lib/opentelemetry/trace/propagation.rb
|
181
|
-
- lib/opentelemetry/trace/propagation/context_keys.rb
|
182
181
|
- lib/opentelemetry/trace/propagation/trace_context.rb
|
183
182
|
- lib/opentelemetry/trace/propagation/trace_context/text_map_extractor.rb
|
184
183
|
- lib/opentelemetry/trace/propagation/trace_context/text_map_injector.rb
|
@@ -190,12 +189,17 @@ files:
|
|
190
189
|
- lib/opentelemetry/trace/trace_flags.rb
|
191
190
|
- lib/opentelemetry/trace/tracer.rb
|
192
191
|
- lib/opentelemetry/trace/tracer_provider.rb
|
192
|
+
- lib/opentelemetry/trace/tracestate.rb
|
193
193
|
- lib/opentelemetry/trace/util/http_to_status.rb
|
194
194
|
- lib/opentelemetry/version.rb
|
195
195
|
homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
196
196
|
licenses:
|
197
197
|
- Apache-2.0
|
198
|
-
metadata:
|
198
|
+
metadata:
|
199
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-api/v0.11.0/file.CHANGELOG.html
|
200
|
+
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/master/api
|
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.11.0
|
199
203
|
post_install_message:
|
200
204
|
rdoc_options: []
|
201
205
|
require_paths:
|
@@ -211,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
215
|
- !ruby/object:Gem::Version
|
212
216
|
version: '0'
|
213
217
|
requirements: []
|
214
|
-
rubygems_version: 3.1.
|
218
|
+
rubygems_version: 3.1.4
|
215
219
|
signing_key:
|
216
220
|
specification_version: 4
|
217
221
|
summary: A stats collection and distributed tracing framework
|
@@ -1,35 +0,0 @@
|
|
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 Trace
|
9
|
-
module Propagation
|
10
|
-
# Contains the keys used to index the current span, or extracted span
|
11
|
-
# context in a {Context} instance
|
12
|
-
module ContextKeys
|
13
|
-
extend self
|
14
|
-
|
15
|
-
EXTRACTED_SPAN_CONTEXT_KEY = Context.create_key('extracted-span-context')
|
16
|
-
CURRENT_SPAN_KEY = Context.create_key('current-span')
|
17
|
-
private_constant :EXTRACTED_SPAN_CONTEXT_KEY, :CURRENT_SPAN_KEY
|
18
|
-
|
19
|
-
# Returns the context key that an extracted span context is indexed by
|
20
|
-
#
|
21
|
-
# @return [Context::Key]
|
22
|
-
def extracted_span_context_key
|
23
|
-
EXTRACTED_SPAN_CONTEXT_KEY
|
24
|
-
end
|
25
|
-
|
26
|
-
# Returns the context key that the current span is indexed by
|
27
|
-
#
|
28
|
-
# @return [Context::Key]
|
29
|
-
def current_span_key
|
30
|
-
CURRENT_SPAN_KEY
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|