opentelemetry-api 0.5.1
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 +7 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +1 -0
- data/LICENSE +201 -0
- data/OVERVIEW.md +66 -0
- data/lib/opentelemetry-api.rb +7 -0
- data/lib/opentelemetry.rb +61 -0
- data/lib/opentelemetry/context.rb +154 -0
- 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/correlation_context.rb +16 -0
- data/lib/opentelemetry/correlation_context/builder.rb +18 -0
- data/lib/opentelemetry/correlation_context/manager.rb +36 -0
- data/lib/opentelemetry/correlation_context/propagation.rb +57 -0
- data/lib/opentelemetry/correlation_context/propagation/context_keys.rb +27 -0
- data/lib/opentelemetry/correlation_context/propagation/text_extractor.rb +60 -0
- data/lib/opentelemetry/correlation_context/propagation/text_injector.rb +55 -0
- data/lib/opentelemetry/error.rb +9 -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/internal.rb +22 -0
- data/lib/opentelemetry/metrics.rb +16 -0
- data/lib/opentelemetry/metrics/handles.rb +44 -0
- data/lib/opentelemetry/metrics/instruments.rb +105 -0
- data/lib/opentelemetry/metrics/meter.rb +72 -0
- data/lib/opentelemetry/metrics/meter_provider.rb +22 -0
- data/lib/opentelemetry/trace.rb +51 -0
- data/lib/opentelemetry/trace/event.rb +46 -0
- data/lib/opentelemetry/trace/link.rb +46 -0
- 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_extractor.rb +58 -0
- data/lib/opentelemetry/trace/propagation/trace_context/text_injector.rb +55 -0
- data/lib/opentelemetry/trace/propagation/trace_context/trace_parent.rb +130 -0
- data/lib/opentelemetry/trace/span.rb +145 -0
- data/lib/opentelemetry/trace/span_context.rb +56 -0
- data/lib/opentelemetry/trace/span_kind.rb +35 -0
- data/lib/opentelemetry/trace/status.rb +114 -0
- data/lib/opentelemetry/trace/trace_flags.rb +50 -0
- data/lib/opentelemetry/trace/tracer.rb +103 -0
- 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 +10 -0
- metadata +220 -0
@@ -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
|
@@ -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/correlation_context/builder'
|
8
|
+
require 'opentelemetry/correlation_context/manager'
|
9
|
+
require 'opentelemetry/correlation_context/propagation'
|
10
|
+
|
11
|
+
module OpenTelemetry
|
12
|
+
# The CorrelationContext module provides functionality to record and propagate
|
13
|
+
# correlations in a distributed trace
|
14
|
+
module CorrelationContext
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
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 CorrelationContext
|
9
|
+
# No op implementation of CorrelationContext::Builder
|
10
|
+
class Builder
|
11
|
+
def set_value(key, value); end
|
12
|
+
|
13
|
+
def remove_value(key); end
|
14
|
+
|
15
|
+
def clear; end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
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 CorrelationContext
|
9
|
+
# No op implementation of CorrelationContext::Manager
|
10
|
+
class Manager
|
11
|
+
NOOP_BUILDER = Builder.new
|
12
|
+
private_constant :NOOP_BUILDER
|
13
|
+
|
14
|
+
def build(context: Context.current)
|
15
|
+
yield NOOP_BUILDER
|
16
|
+
context
|
17
|
+
end
|
18
|
+
|
19
|
+
def set_value(key, value, context: Context.current)
|
20
|
+
context
|
21
|
+
end
|
22
|
+
|
23
|
+
def value(key, context: Context.current)
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def remove_value(key, context: Context.current)
|
28
|
+
context
|
29
|
+
end
|
30
|
+
|
31
|
+
def clear(context: Context.current)
|
32
|
+
context
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
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/correlation_context/propagation/context_keys'
|
8
|
+
require 'opentelemetry/correlation_context/propagation/text_injector'
|
9
|
+
require 'opentelemetry/correlation_context/propagation/text_extractor'
|
10
|
+
|
11
|
+
module OpenTelemetry
|
12
|
+
module CorrelationContext
|
13
|
+
# The Correlation::Propagation module contains injectors and
|
14
|
+
# extractors for sending and receiving correlation context over the wire
|
15
|
+
module Propagation
|
16
|
+
extend self
|
17
|
+
|
18
|
+
TEXT_EXTRACTOR = TextExtractor.new
|
19
|
+
TEXT_INJECTOR = TextInjector.new
|
20
|
+
RACK_EXTRACTOR = TextExtractor.new(
|
21
|
+
correlation_context_key: 'HTTP_OTCORRELATIONS'
|
22
|
+
)
|
23
|
+
RACK_INJECTOR = TextInjector.new(
|
24
|
+
correlation_context_key: 'HTTP_OTCORRELATIONS'
|
25
|
+
)
|
26
|
+
|
27
|
+
private_constant :TEXT_INJECTOR, :TEXT_EXTRACTOR, :RACK_INJECTOR,
|
28
|
+
:RACK_EXTRACTOR
|
29
|
+
|
30
|
+
# Returns an extractor that extracts context using the W3C Correlation
|
31
|
+
# Context format
|
32
|
+
def text_injector
|
33
|
+
TEXT_INJECTOR
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns an injector that injects context using the W3C Correlation
|
37
|
+
# Context format
|
38
|
+
def text_extractor
|
39
|
+
TEXT_EXTRACTOR
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns an extractor that extracts context using the W3C Correlation
|
43
|
+
# Context 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 Correlation
|
50
|
+
# Context 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
|