opentelemetry-sdk 0.17.0 → 1.0.0.rc1
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/CHANGELOG.md +78 -68
- data/lib/opentelemetry/sdk/internal.rb +3 -3
- data/lib/opentelemetry/sdk/resources/constants.rb +2 -2
- data/lib/opentelemetry/sdk/trace/event.rb +7 -36
- data/lib/opentelemetry/sdk/trace/export/batch_span_processor.rb +2 -2
- data/lib/opentelemetry/sdk/trace/export/multi_span_exporter.rb +3 -3
- data/lib/opentelemetry/sdk/trace/multi_span_processor.rb +2 -2
- data/lib/opentelemetry/sdk/trace/span.rb +15 -14
- data/lib/opentelemetry/sdk/trace/span_data.rb +25 -18
- data/lib/opentelemetry/sdk/trace/tracer.rb +1 -1
- data/lib/opentelemetry/sdk/version.rb +1 -1
- metadata +14 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e5e0b06b7a072f462eeef975e4342a9e9800fb85794e2625f454d17eb20ef2be
|
|
4
|
+
data.tar.gz: a42a11084a981f147bdc5a3c5d21f1a4a1752d5a971819658573cb4964d43f49
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 670059ca8ef7d7aeba579c6b70a8217ac5e4fa879b39afee715b4ff1852e8643bf87581943b70d949480a728c531d20efc8ed42fa878f0a5291d55f31cc22607
|
|
7
|
+
data.tar.gz: 604feaa8d9952cce4a0eff45b743601b85ea2a5f7b03af316c5ae45c6df2fd57a2712d43d417a30a2df44b493fd6c8bc03f8924014a75d2fd29b9bfe513c7adf
|
data/CHANGELOG.md
CHANGED
|
@@ -1,127 +1,137 @@
|
|
|
1
1
|
# Release History: opentelemetry-sdk
|
|
2
2
|
|
|
3
|
+
### v1.0.0.rc1 / 2021-05-21
|
|
4
|
+
|
|
5
|
+
* BREAKING CHANGE: Remove optional parent_context from in_span
|
|
6
|
+
* BREAKING CHANGE: Replace Time.now with Process.clock_gettime
|
|
7
|
+
|
|
8
|
+
* FIXED: Remove optional parent_context from in_span
|
|
9
|
+
* FIXED: Replace Time.now with Process.clock_gettime
|
|
10
|
+
* FIXED: Rename cloud.zone to cloud.availability_zone
|
|
11
|
+
* FIXED: Improve attribute error messages
|
|
12
|
+
|
|
3
13
|
### v0.17.0 / 2021-04-22
|
|
4
14
|
|
|
5
15
|
* BREAKING CHANGE: Replace TextMapInjector/TextMapExtractor pairs with a TextMapPropagator.
|
|
6
16
|
|
|
7
17
|
[Check the propagator documentation](https://open-telemetry.github.io/opentelemetry-ruby/) for the new usage.
|
|
8
18
|
|
|
9
|
-
* ADDED: Add zipkin exporter
|
|
10
|
-
* ADDED: Processors validate exporters on init.
|
|
11
|
-
* ADDED: Add configurable truncation of span and event attribute values
|
|
12
|
-
* ADDED: Add simple 'recording' attr_accessor to InMemorySpanExporter
|
|
13
|
-
* FIXED: Typo in error message
|
|
14
|
-
* FIXED: Improve configuration error reporting
|
|
15
|
-
* FIXED: Refactor propagators to add #fields
|
|
19
|
+
* ADDED: Add zipkin exporter
|
|
20
|
+
* ADDED: Processors validate exporters on init.
|
|
21
|
+
* ADDED: Add configurable truncation of span and event attribute values
|
|
22
|
+
* ADDED: Add simple 'recording' attr_accessor to InMemorySpanExporter
|
|
23
|
+
* FIXED: Typo in error message
|
|
24
|
+
* FIXED: Improve configuration error reporting
|
|
25
|
+
* FIXED: Refactor propagators to add #fields
|
|
16
26
|
|
|
17
27
|
### v0.16.0 / 2021-03-17
|
|
18
28
|
|
|
19
|
-
* BREAKING CHANGE: Update SDK BaggageManager to match API
|
|
20
|
-
* BREAKING CHANGE: Implement Exporter#force_flush
|
|
29
|
+
* BREAKING CHANGE: Update SDK BaggageManager to match API
|
|
30
|
+
* BREAKING CHANGE: Implement Exporter#force_flush
|
|
21
31
|
|
|
22
|
-
* ADDED: Add force_flush to SDK's TracerProvider
|
|
23
|
-
* ADDED: Add k8s node to gcp resource detector
|
|
24
|
-
* ADDED: Add console option for OTEL_TRACES_EXPORTER
|
|
25
|
-
* ADDED: Span#add_attributes
|
|
26
|
-
* ADDED: Implement Exporter#force_flush
|
|
27
|
-
* FIXED: Update SDK BaggageManager to match API
|
|
28
|
-
* DOCS: Replace Gitter with GitHub Discussions
|
|
32
|
+
* ADDED: Add force_flush to SDK's TracerProvider
|
|
33
|
+
* ADDED: Add k8s node to gcp resource detector
|
|
34
|
+
* ADDED: Add console option for OTEL_TRACES_EXPORTER
|
|
35
|
+
* ADDED: Span#add_attributes
|
|
36
|
+
* ADDED: Implement Exporter#force_flush
|
|
37
|
+
* FIXED: Update SDK BaggageManager to match API
|
|
38
|
+
* DOCS: Replace Gitter with GitHub Discussions
|
|
29
39
|
|
|
30
40
|
### v0.15.0 / 2021-02-18
|
|
31
41
|
|
|
32
|
-
* BREAKING CHANGE: Streamline processor pipeline
|
|
42
|
+
* BREAKING CHANGE: Streamline processor pipeline
|
|
33
43
|
|
|
34
|
-
* ADDED: Add instrumentation config validation
|
|
35
|
-
* FIXED: Streamline processor pipeline
|
|
36
|
-
* FIXED: OTEL_TRACE -> OTEL_TRACES env vars
|
|
37
|
-
* FIXED: Change limits from 1000 to 128
|
|
38
|
-
* FIXED: OTEL_TRACES_EXPORTER and OTEL_PROPAGATORS
|
|
39
|
-
* FIXED: Add thread error handling to the BSP
|
|
40
|
-
* DOCS: Clarify nil attribute values not allowed
|
|
44
|
+
* ADDED: Add instrumentation config validation
|
|
45
|
+
* FIXED: Streamline processor pipeline
|
|
46
|
+
* FIXED: OTEL_TRACE -> OTEL_TRACES env vars
|
|
47
|
+
* FIXED: Change limits from 1000 to 128
|
|
48
|
+
* FIXED: OTEL_TRACES_EXPORTER and OTEL_PROPAGATORS
|
|
49
|
+
* FIXED: Add thread error handling to the BSP
|
|
50
|
+
* DOCS: Clarify nil attribute values not allowed
|
|
41
51
|
|
|
42
52
|
### v0.14.0 / 2021-02-03
|
|
43
53
|
|
|
44
|
-
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
|
54
|
+
* BREAKING CHANGE: Replace getter and setter callables and remove rack specific propagators
|
|
45
55
|
|
|
46
|
-
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
|
56
|
+
* ADDED: Replace getter and setter callables and remove rack specific propagators
|
|
47
57
|
|
|
48
58
|
### v0.13.1 / 2021-02-01
|
|
49
59
|
|
|
50
|
-
* FIXED: Leaky test
|
|
51
|
-
* FIXED: Allow env var override of service.name
|
|
60
|
+
* FIXED: Leaky test
|
|
61
|
+
* FIXED: Allow env var override of service.name
|
|
52
62
|
|
|
53
63
|
### v0.13.0 / 2021-01-29
|
|
54
64
|
|
|
55
|
-
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
|
65
|
+
* BREAKING CHANGE: Remove MILLIS from BatchSpanProcessor vars
|
|
56
66
|
|
|
57
|
-
* ADDED: Process.runtime resource
|
|
58
|
-
* ADDED: Provide default resource in SDK
|
|
59
|
-
* ADDED: Add optional attributes to record_exception
|
|
60
|
-
* FIXED: Resource.merge consistency
|
|
61
|
-
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
|
67
|
+
* ADDED: Process.runtime resource
|
|
68
|
+
* ADDED: Provide default resource in SDK
|
|
69
|
+
* ADDED: Add optional attributes to record_exception
|
|
70
|
+
* FIXED: Resource.merge consistency
|
|
71
|
+
* FIXED: Remove MILLIS from BatchSpanProcessor vars
|
|
62
72
|
|
|
63
73
|
### v0.12.1 / 2021-01-13
|
|
64
74
|
|
|
65
|
-
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
|
66
|
-
* FIXED: Define default value for traceid ratio
|
|
75
|
+
* FIXED: Fix several BatchSpanProcessor errors related to fork safety
|
|
76
|
+
* FIXED: Define default value for traceid ratio
|
|
67
77
|
|
|
68
78
|
### v0.12.0 / 2020-12-24
|
|
69
79
|
|
|
70
|
-
* ADDED: Structured error handling
|
|
71
|
-
* ADDED: Pluggable ID generation
|
|
72
|
-
* FIXED: BSP dropped span buffer full reporting
|
|
73
|
-
* FIXED: Implement SDK environment variables
|
|
74
|
-
* FIXED: Remove incorrect TODO
|
|
80
|
+
* ADDED: Structured error handling
|
|
81
|
+
* ADDED: Pluggable ID generation
|
|
82
|
+
* FIXED: BSP dropped span buffer full reporting
|
|
83
|
+
* FIXED: Implement SDK environment variables
|
|
84
|
+
* FIXED: Remove incorrect TODO
|
|
75
85
|
|
|
76
86
|
### v0.11.1 / 2020-12-16
|
|
77
87
|
|
|
78
|
-
* FIXED: BSP dropped span buffer full reporting
|
|
88
|
+
* FIXED: BSP dropped span buffer full reporting
|
|
79
89
|
|
|
80
90
|
### v0.11.0 / 2020-12-11
|
|
81
91
|
|
|
82
|
-
* ADDED: Metrics reporting from trace export
|
|
83
|
-
* FIXED: Copyright comments to not reference year
|
|
92
|
+
* ADDED: Metrics reporting from trace export
|
|
93
|
+
* FIXED: Copyright comments to not reference year
|
|
84
94
|
|
|
85
95
|
### v0.10.0 / 2020-12-03
|
|
86
96
|
|
|
87
|
-
* BREAKING CHANGE: Allow samplers to modify tracestate
|
|
97
|
+
* BREAKING CHANGE: Allow samplers to modify tracestate
|
|
88
98
|
|
|
89
|
-
* FIXED: Allow samplers to modify tracestate
|
|
99
|
+
* FIXED: Allow samplers to modify tracestate
|
|
90
100
|
|
|
91
101
|
### v0.9.0 / 2020-11-27
|
|
92
102
|
|
|
93
|
-
* BREAKING CHANGE: Pass full Context to samplers
|
|
94
|
-
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
|
103
|
+
* BREAKING CHANGE: Pass full Context to samplers
|
|
104
|
+
* BREAKING CHANGE: Add timeout for force_flush and shutdown
|
|
95
105
|
|
|
96
|
-
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
|
97
|
-
* ADDED: Add timeout for force_flush and shutdown
|
|
98
|
-
* FIXED: Signal at batch_size
|
|
99
|
-
* FIXED: SDK Span.recording? after finish
|
|
100
|
-
* FIXED: Pass full Context to samplers
|
|
101
|
-
* DOCS: Add documentation on usage scenarios for span processors
|
|
106
|
+
* ADDED: Add OTEL_RUBY_BSP_START_THREAD_ON_BOOT env var
|
|
107
|
+
* ADDED: Add timeout for force_flush and shutdown
|
|
108
|
+
* FIXED: Signal at batch_size
|
|
109
|
+
* FIXED: SDK Span.recording? after finish
|
|
110
|
+
* FIXED: Pass full Context to samplers
|
|
111
|
+
* DOCS: Add documentation on usage scenarios for span processors
|
|
102
112
|
|
|
103
113
|
### v0.8.0 / 2020-10-27
|
|
104
114
|
|
|
105
|
-
* BREAKING CHANGE: Move context/span methods to Trace module
|
|
106
|
-
* BREAKING CHANGE: Remove 'canonical' from status codes
|
|
107
|
-
* BREAKING CHANGE: Assorted SpanContext fixes
|
|
115
|
+
* BREAKING CHANGE: Move context/span methods to Trace module
|
|
116
|
+
* BREAKING CHANGE: Remove 'canonical' from status codes
|
|
117
|
+
* BREAKING CHANGE: Assorted SpanContext fixes
|
|
108
118
|
|
|
109
|
-
* FIXED: Move context/span methods to Trace module
|
|
110
|
-
* FIXED: Remove 'canonical' from status codes
|
|
111
|
-
* FIXED: Assorted SpanContext fixes
|
|
119
|
+
* FIXED: Move context/span methods to Trace module
|
|
120
|
+
* FIXED: Remove 'canonical' from status codes
|
|
121
|
+
* FIXED: Assorted SpanContext fixes
|
|
112
122
|
|
|
113
123
|
### v0.7.0 / 2020-10-07
|
|
114
124
|
|
|
115
|
-
* ADDED: Add service_name setter to configurator
|
|
116
|
-
* ADDED: Add service_version setter to configurator
|
|
117
|
-
* FIXED: Fork safety for batch processor
|
|
118
|
-
* FIXED: Don't generate a span ID unnecessarily
|
|
119
|
-
* DOCS: Fix Configurator#add_span_processor
|
|
120
|
-
* DOCS: Standardize toplevel docs structure and readme
|
|
125
|
+
* ADDED: Add service_name setter to configurator
|
|
126
|
+
* ADDED: Add service_version setter to configurator
|
|
127
|
+
* FIXED: Fork safety for batch processor
|
|
128
|
+
* FIXED: Don't generate a span ID unnecessarily
|
|
129
|
+
* DOCS: Fix Configurator#add_span_processor
|
|
130
|
+
* DOCS: Standardize toplevel docs structure and readme
|
|
121
131
|
|
|
122
132
|
### v0.6.0 / 2020-09-10
|
|
123
133
|
|
|
124
|
-
* BREAKING CHANGE: Rename Resource labels to attributes
|
|
134
|
+
* BREAKING CHANGE: Rename Resource labels to attributes
|
|
125
135
|
* BREAKING CHANGE: Export resource from Span/SpanData instead of library_resource
|
|
126
136
|
* BREAKING CHANGE: Rename CorrelationContext to Baggage
|
|
127
137
|
* BREAKING CHANGE: Rename Text* to TextMap* (propagators, injectors, extractors)
|
|
@@ -131,7 +141,7 @@
|
|
|
131
141
|
|
|
132
142
|
* ADDED: Add OTLP exporter
|
|
133
143
|
* ADDED: Add support for OTEL_LOG_LEVEL env var
|
|
134
|
-
* FIXED: Rename Resource labels to attributes
|
|
144
|
+
* FIXED: Rename Resource labels to attributes
|
|
135
145
|
* ADDED: Environment variable resource detection
|
|
136
146
|
* ADDED: BatchSpanProcessor environment variable support
|
|
137
147
|
* FIXED: Remove semver prefix
|
|
@@ -44,13 +44,13 @@ module OpenTelemetry
|
|
|
44
44
|
valid_simple_value?(value) || valid_array_value?(value)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def valid_attributes?(attrs)
|
|
47
|
+
def valid_attributes?(owner, kind, attrs)
|
|
48
48
|
attrs.nil? || attrs.all? do |k, v|
|
|
49
49
|
if !valid_key?(k)
|
|
50
|
-
OpenTelemetry.handle_error(message: "invalid attribute key type #{k.class}")
|
|
50
|
+
OpenTelemetry.handle_error(message: "invalid #{kind} attribute key type #{k.class} on span '#{owner}'")
|
|
51
51
|
false
|
|
52
52
|
elsif !valid_value?(v)
|
|
53
|
-
OpenTelemetry.handle_error(message: "invalid attribute value type #{v.class}")
|
|
53
|
+
OpenTelemetry.handle_error(message: "invalid #{kind} attribute value type #{v.class} for key '#{k}' on span '#{owner}'")
|
|
54
54
|
false
|
|
55
55
|
else
|
|
56
56
|
true
|
|
@@ -196,8 +196,8 @@ module OpenTelemetry
|
|
|
196
196
|
# A specific geographical location where different entities can run.
|
|
197
197
|
region: 'cloud.region',
|
|
198
198
|
|
|
199
|
-
#
|
|
200
|
-
|
|
199
|
+
# Availability zones are a sub set of the region connected through low-latency links.
|
|
200
|
+
availability_zone: 'cloud.availability_zone'
|
|
201
201
|
}.freeze
|
|
202
202
|
end
|
|
203
203
|
end
|
|
@@ -7,42 +7,13 @@
|
|
|
7
7
|
module OpenTelemetry
|
|
8
8
|
module SDK
|
|
9
9
|
module Trace
|
|
10
|
-
# A text annotation with a set of attributes and a timestamp.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
#
|
|
18
|
-
# @return [String]
|
|
19
|
-
attr_reader :name
|
|
20
|
-
|
|
21
|
-
# Returns the frozen attributes for this event
|
|
22
|
-
#
|
|
23
|
-
# @return [Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
|
|
24
|
-
attr_reader :attributes
|
|
25
|
-
|
|
26
|
-
# Returns the timestamp for this event
|
|
27
|
-
#
|
|
28
|
-
# @return [Time]
|
|
29
|
-
attr_reader :timestamp
|
|
30
|
-
|
|
31
|
-
# Returns a new immutable {Event}.
|
|
32
|
-
#
|
|
33
|
-
# @param [String] name The name of this event
|
|
34
|
-
# @param [optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}]
|
|
35
|
-
# attributes A hash of attributes for this event. Attributes will be
|
|
36
|
-
# frozen during Event initialization.
|
|
37
|
-
# @param [optional Time] timestamp The timestamp for this event.
|
|
38
|
-
# Defaults to Time.now.
|
|
39
|
-
# @return [Event]
|
|
40
|
-
def initialize(name:, attributes: nil, timestamp: nil)
|
|
41
|
-
@name = name
|
|
42
|
-
@attributes = attributes.freeze || EMPTY_ATTRIBUTES
|
|
43
|
-
@timestamp = timestamp || Time.now
|
|
44
|
-
end
|
|
45
|
-
end
|
|
10
|
+
# A text annotation with a set of attributes and a timestamp for export.
|
|
11
|
+
#
|
|
12
|
+
# Field types are as follows:
|
|
13
|
+
# name: String
|
|
14
|
+
# attributes: frozen Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}
|
|
15
|
+
# timestamp: Integer nanoseconds since Epoch
|
|
16
|
+
Event = Struct.new(:name, :attributes, :timestamp)
|
|
46
17
|
end
|
|
47
18
|
end
|
|
48
19
|
end
|
|
@@ -101,7 +101,7 @@ module OpenTelemetry
|
|
|
101
101
|
# @return [Integer] SUCCESS if no error occurred, FAILURE if a
|
|
102
102
|
# non-specific failure occurred, TIMEOUT if a timeout occurred.
|
|
103
103
|
def force_flush(timeout: nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
|
|
104
|
-
start_time =
|
|
104
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
105
105
|
snapshot = lock do
|
|
106
106
|
reset_on_fork if @keep_running
|
|
107
107
|
spans.shift(spans.size)
|
|
@@ -137,7 +137,7 @@ module OpenTelemetry
|
|
|
137
137
|
# @return [Integer] SUCCESS if no error occurred, FAILURE if a
|
|
138
138
|
# non-specific failure occurred, TIMEOUT if a timeout occurred.
|
|
139
139
|
def shutdown(timeout: nil)
|
|
140
|
-
start_time =
|
|
140
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
141
141
|
thread = lock do
|
|
142
142
|
@keep_running = false
|
|
143
143
|
@condition.signal
|
|
@@ -26,7 +26,7 @@ module OpenTelemetry
|
|
|
26
26
|
# @param [optional Numeric] timeout An optional timeout in seconds.
|
|
27
27
|
# @return [Integer] the result of the export.
|
|
28
28
|
def export(spans, timeout: nil)
|
|
29
|
-
start_time =
|
|
29
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
30
30
|
results = @span_exporters.map do |span_exporter|
|
|
31
31
|
span_exporter.export(spans, timeout: OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time))
|
|
32
32
|
rescue => e # rubocop:disable Style/RescueStandardError
|
|
@@ -43,7 +43,7 @@ module OpenTelemetry
|
|
|
43
43
|
# @return [Integer] SUCCESS if no error occurred, FAILURE if a
|
|
44
44
|
# non-specific failure occurred, TIMEOUT if a timeout occurred.
|
|
45
45
|
def force_flush(timeout: nil)
|
|
46
|
-
start_time =
|
|
46
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
47
47
|
results = @span_exporters.map do |processor|
|
|
48
48
|
remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
|
|
49
49
|
return TIMEOUT if remaining_timeout&.zero?
|
|
@@ -60,7 +60,7 @@ module OpenTelemetry
|
|
|
60
60
|
# @return [Integer] SUCCESS if no error occurred, FAILURE if a
|
|
61
61
|
# non-specific failure occurred, TIMEOUT if a timeout occurred.
|
|
62
62
|
def shutdown(timeout: nil)
|
|
63
|
-
start_time =
|
|
63
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
64
64
|
results = @span_exporters.map do |processor|
|
|
65
65
|
remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
|
|
66
66
|
return TIMEOUT if remaining_timeout&.zero?
|
|
@@ -55,7 +55,7 @@ module OpenTelemetry
|
|
|
55
55
|
# @return [Integer] Export::SUCCESS if no error occurred, Export::FAILURE if
|
|
56
56
|
# a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.
|
|
57
57
|
def force_flush(timeout: nil)
|
|
58
|
-
start_time =
|
|
58
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
59
59
|
results = @span_processors.map do |processor|
|
|
60
60
|
remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
|
|
61
61
|
return Export::TIMEOUT if remaining_timeout&.zero?
|
|
@@ -71,7 +71,7 @@ module OpenTelemetry
|
|
|
71
71
|
# @return [Integer] Export::SUCCESS if no error occurred, Export::FAILURE if
|
|
72
72
|
# a non-specific failure occurred, Export::TIMEOUT if a timeout occurred.
|
|
73
73
|
def shutdown(timeout: nil)
|
|
74
|
-
start_time =
|
|
74
|
+
start_time = OpenTelemetry::Common::Utilities.timeout_timestamp
|
|
75
75
|
results = @span_processors.map do |processor|
|
|
76
76
|
remaining_timeout = OpenTelemetry::Common::Utilities.maybe_timeout(timeout, start_time)
|
|
77
77
|
return Export::TIMEOUT if remaining_timeout&.zero?
|
|
@@ -17,8 +17,9 @@ module OpenTelemetry
|
|
|
17
17
|
# rubocop:disable Metrics/ClassLength
|
|
18
18
|
class Span < OpenTelemetry::Trace::Span
|
|
19
19
|
DEFAULT_STATUS = OpenTelemetry::Trace::Status.new(OpenTelemetry::Trace::Status::UNSET)
|
|
20
|
+
EMPTY_ATTRIBUTES = {}.freeze
|
|
20
21
|
|
|
21
|
-
private_constant
|
|
22
|
+
private_constant :DEFAULT_STATUS, :EMPTY_ATTRIBUTES
|
|
22
23
|
|
|
23
24
|
# The following readers are intended for the use of SpanProcessors and
|
|
24
25
|
# should not be considered part of the public interface for instrumentation.
|
|
@@ -70,7 +71,6 @@ module OpenTelemetry
|
|
|
70
71
|
#
|
|
71
72
|
# @return [self] returns itself
|
|
72
73
|
def set_attribute(key, value)
|
|
73
|
-
super
|
|
74
74
|
@mutex.synchronize do
|
|
75
75
|
if @ended
|
|
76
76
|
OpenTelemetry.logger.warn('Calling set_attribute on an ended Span.')
|
|
@@ -99,7 +99,6 @@ module OpenTelemetry
|
|
|
99
99
|
#
|
|
100
100
|
# @return [self] returns itself
|
|
101
101
|
def add_attributes(attributes)
|
|
102
|
-
super
|
|
103
102
|
@mutex.synchronize do
|
|
104
103
|
if @ended
|
|
105
104
|
OpenTelemetry.logger.warn('Calling add_attributes on an ended Span.')
|
|
@@ -132,8 +131,7 @@ module OpenTelemetry
|
|
|
132
131
|
#
|
|
133
132
|
# @return [self] returns itself
|
|
134
133
|
def add_event(name, attributes: nil, timestamp: nil)
|
|
135
|
-
|
|
136
|
-
event = Event.new(name: name, attributes: truncate_attribute_values(attributes), timestamp: timestamp || Time.now)
|
|
134
|
+
event = Event.new(name, truncate_attribute_values(attributes), wall_clock(timestamp))
|
|
137
135
|
|
|
138
136
|
@mutex.synchronize do
|
|
139
137
|
if @ended
|
|
@@ -179,7 +177,6 @@ module OpenTelemetry
|
|
|
179
177
|
#
|
|
180
178
|
# @return [void]
|
|
181
179
|
def status=(status)
|
|
182
|
-
super
|
|
183
180
|
@mutex.synchronize do
|
|
184
181
|
if @ended
|
|
185
182
|
OpenTelemetry.logger.warn('Calling status= on an ended Span.')
|
|
@@ -199,7 +196,6 @@ module OpenTelemetry
|
|
|
199
196
|
#
|
|
200
197
|
# @return [void]
|
|
201
198
|
def name=(new_name)
|
|
202
|
-
super
|
|
203
199
|
@mutex.synchronize do
|
|
204
200
|
if @ended
|
|
205
201
|
OpenTelemetry.logger.warn('Calling name= on an ended Span.')
|
|
@@ -234,7 +230,7 @@ module OpenTelemetry
|
|
|
234
230
|
OpenTelemetry.logger.warn('Calling finish on an ended Span.')
|
|
235
231
|
return self
|
|
236
232
|
end
|
|
237
|
-
@end_timestamp = end_timestamp
|
|
233
|
+
@end_timestamp = wall_clock(end_timestamp)
|
|
238
234
|
@attributes = validated_attributes(@attributes).freeze
|
|
239
235
|
@events.freeze
|
|
240
236
|
@ended = true
|
|
@@ -292,7 +288,7 @@ module OpenTelemetry
|
|
|
292
288
|
@total_recorded_events = 0
|
|
293
289
|
@total_recorded_links = links&.size || 0
|
|
294
290
|
@total_recorded_attributes = attributes&.size || 0
|
|
295
|
-
@start_timestamp = start_timestamp
|
|
291
|
+
@start_timestamp = wall_clock(start_timestamp)
|
|
296
292
|
@end_timestamp = nil
|
|
297
293
|
@attributes = attributes.nil? ? nil : Hash[attributes] # We need a mutable copy of attributes.
|
|
298
294
|
trim_span_attributes(@attributes)
|
|
@@ -306,7 +302,7 @@ module OpenTelemetry
|
|
|
306
302
|
private
|
|
307
303
|
|
|
308
304
|
def validated_attributes(attrs)
|
|
309
|
-
return attrs if Internal.valid_attributes?(attrs)
|
|
305
|
+
return attrs if Internal.valid_attributes?(name, 'span', attrs)
|
|
310
306
|
|
|
311
307
|
attrs.keep_if { |key, value| Internal.valid_key?(key) && Internal.valid_value?(value) }
|
|
312
308
|
end
|
|
@@ -321,7 +317,7 @@ module OpenTelemetry
|
|
|
321
317
|
end
|
|
322
318
|
|
|
323
319
|
def truncate_attribute_values(attrs)
|
|
324
|
-
return if attrs.nil?
|
|
320
|
+
return EMPTY_ATTRIBUTES if attrs.nil?
|
|
325
321
|
|
|
326
322
|
max_attributes_length = @trace_config.max_attributes_length
|
|
327
323
|
attrs.each { |key, value| attrs[key] = OpenTelemetry::Common::Utilities.truncate(value, max_attributes_length) } if max_attributes_length
|
|
@@ -333,7 +329,7 @@ module OpenTelemetry
|
|
|
333
329
|
return nil if links.nil?
|
|
334
330
|
|
|
335
331
|
if links.size <= max_links_count &&
|
|
336
|
-
links.all? { |link| link.attributes.size <= max_attributes_per_link && Internal.valid_attributes?(link.attributes) }
|
|
332
|
+
links.all? { |link| link.attributes.size <= max_attributes_per_link && Internal.valid_attributes?(name, 'link', link.attributes) }
|
|
337
333
|
return links.frozen? ? links : links.clone.freeze
|
|
338
334
|
end
|
|
339
335
|
|
|
@@ -350,7 +346,7 @@ module OpenTelemetry
|
|
|
350
346
|
def append_event(events, event) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
351
347
|
max_events_count = @trace_config.max_events_count
|
|
352
348
|
max_attributes_per_event = @trace_config.max_attributes_per_event
|
|
353
|
-
valid_attributes = Internal.valid_attributes?(event.attributes)
|
|
349
|
+
valid_attributes = Internal.valid_attributes?(name, 'event', event.attributes)
|
|
354
350
|
|
|
355
351
|
# Fast path (likely) common case.
|
|
356
352
|
if events.size < max_events_count &&
|
|
@@ -369,10 +365,15 @@ module OpenTelemetry
|
|
|
369
365
|
attrs.keep_if { |key, value| Internal.valid_key?(key) && Internal.valid_value?(value) }
|
|
370
366
|
excess = attrs.size - max_attributes_per_event
|
|
371
367
|
excess.times { attrs.shift } if excess.positive?
|
|
372
|
-
event = Event.new(
|
|
368
|
+
event = Event.new(event.name, attrs.freeze, event.timestamp)
|
|
373
369
|
end
|
|
374
370
|
events << event
|
|
375
371
|
end
|
|
372
|
+
|
|
373
|
+
def wall_clock(timestamp)
|
|
374
|
+
timestamp = (timestamp.to_r * 1_000_000_000).to_i unless timestamp.nil?
|
|
375
|
+
timestamp || Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
|
|
376
|
+
end
|
|
376
377
|
end
|
|
377
378
|
# rubocop:enable Metrics/ClassLength
|
|
378
379
|
end
|
|
@@ -10,24 +10,24 @@ module OpenTelemetry
|
|
|
10
10
|
# implementation.
|
|
11
11
|
module Trace
|
|
12
12
|
# SpanData is a Struct containing {Span} data for export.
|
|
13
|
-
SpanData = Struct.new(:name,
|
|
14
|
-
:kind,
|
|
15
|
-
:status,
|
|
16
|
-
:parent_span_id,
|
|
17
|
-
:total_recorded_attributes,
|
|
18
|
-
:total_recorded_events,
|
|
19
|
-
:total_recorded_links,
|
|
20
|
-
:start_timestamp,
|
|
21
|
-
:end_timestamp,
|
|
22
|
-
:attributes,
|
|
23
|
-
:links,
|
|
24
|
-
:events,
|
|
25
|
-
:resource,
|
|
26
|
-
:instrumentation_library,
|
|
27
|
-
:span_id,
|
|
28
|
-
:trace_id,
|
|
29
|
-
:trace_flags,
|
|
30
|
-
:tracestate) do
|
|
13
|
+
SpanData = Struct.new(:name, # String
|
|
14
|
+
:kind, # Symbol: :internal, :producer, :consumer, :client, :server
|
|
15
|
+
:status, # Status
|
|
16
|
+
:parent_span_id, # String (8 byte binary), may be OpenTelemetry::Trace::INVALID_SPAN_ID
|
|
17
|
+
:total_recorded_attributes, # Integer
|
|
18
|
+
:total_recorded_events, # Integer
|
|
19
|
+
:total_recorded_links, # Integer
|
|
20
|
+
:start_timestamp, # Integer nanoseconds since Epoch
|
|
21
|
+
:end_timestamp, # Integer nanoseconds since Epoch
|
|
22
|
+
:attributes, # optional Hash{String => String, Numeric, Boolean, Array<String, Numeric, Boolean>}
|
|
23
|
+
:links, # optional Array[OpenTelemetry::Trace::Link]
|
|
24
|
+
:events, # optional Array[Event]
|
|
25
|
+
:resource, # OpenTelemetry::SDK::Resources::Resource
|
|
26
|
+
:instrumentation_library, # OpenTelemetry::SDK::InstrumentationLibrary
|
|
27
|
+
:span_id, # String (8 byte binary)
|
|
28
|
+
:trace_id, # String (16-byte binary)
|
|
29
|
+
:trace_flags, # Integer (8-bit byte of bit flags)
|
|
30
|
+
:tracestate) do # OpenTelemetry::Trace::Tracestate
|
|
31
31
|
# Returns the lowercase [hex encoded](https://tools.ietf.org/html/rfc4648#section-8) span ID.
|
|
32
32
|
#
|
|
33
33
|
# @return [String] A 16-hex-character lowercase string.
|
|
@@ -41,6 +41,13 @@ module OpenTelemetry
|
|
|
41
41
|
def hex_trace_id
|
|
42
42
|
trace_id.unpack1('H*')
|
|
43
43
|
end
|
|
44
|
+
|
|
45
|
+
# Returns the lowercase [hex encoded](https://tools.ietf.org/html/rfc4648#section-8) parent span ID.
|
|
46
|
+
#
|
|
47
|
+
# @return [String] A 16-hex-character lowercase string.
|
|
48
|
+
def hex_parent_span_id
|
|
49
|
+
parent_span_id.unpack1('H*')
|
|
50
|
+
end
|
|
44
51
|
end
|
|
45
52
|
end
|
|
46
53
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: opentelemetry-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0.rc1
|
|
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-05-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: opentelemetry-api
|
|
@@ -16,42 +16,42 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 1.0.0.rc1
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 1.0.0.rc1
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: opentelemetry-common
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.
|
|
33
|
+
version: 0.18.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.
|
|
40
|
+
version: 0.18.0
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: opentelemetry-instrumentation-base
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.
|
|
47
|
+
version: 0.18.0
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.
|
|
54
|
+
version: 0.18.0
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: bundler
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,14 +100,14 @@ dependencies:
|
|
|
100
100
|
requirements:
|
|
101
101
|
- - "~>"
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.
|
|
103
|
+
version: 0.18.0
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
108
|
- - "~>"
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.
|
|
110
|
+
version: 0.18.0
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: rake
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -226,10 +226,10 @@ homepage: https://github.com/open-telemetry/opentelemetry-ruby
|
|
|
226
226
|
licenses:
|
|
227
227
|
- Apache-2.0
|
|
228
228
|
metadata:
|
|
229
|
-
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/
|
|
229
|
+
changelog_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.0.0.rc1/file.CHANGELOG.html
|
|
230
230
|
source_code_uri: https://github.com/open-telemetry/opentelemetry-ruby/tree/main/sdk
|
|
231
231
|
bug_tracker_uri: https://github.com/open-telemetry/opentelemetry-ruby/issues
|
|
232
|
-
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/
|
|
232
|
+
documentation_uri: https://open-telemetry.github.io/opentelemetry-ruby/opentelemetry-sdk/v1.0.0.rc1
|
|
233
233
|
post_install_message:
|
|
234
234
|
rdoc_options: []
|
|
235
235
|
require_paths:
|
|
@@ -241,9 +241,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
241
241
|
version: 2.5.0
|
|
242
242
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
243
|
requirements:
|
|
244
|
-
- - "
|
|
244
|
+
- - ">"
|
|
245
245
|
- !ruby/object:Gem::Version
|
|
246
|
-
version:
|
|
246
|
+
version: 1.3.1
|
|
247
247
|
requirements: []
|
|
248
248
|
rubygems_version: 3.1.6
|
|
249
249
|
signing_key:
|