opentelemetry-sdk 0.17.0 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|