opencensus 0.1.0 → 0.2.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/CHANGELOG.md +18 -0
- data/README.md +1 -1
- data/Rakefile +4 -0
- data/lib/opencensus/trace.rb +8 -3
- data/lib/opencensus/trace/exporters/logger.rb +7 -0
- data/lib/opencensus/trace/integrations/rack_middleware.rb +3 -1
- data/lib/opencensus/trace/message_event.rb +2 -2
- data/lib/opencensus/trace/span.rb +17 -2
- data/lib/opencensus/trace/span_builder.rb +19 -2
- data/lib/opencensus/trace/span_context.rb +48 -10
- data/lib/opencensus/version.rb +1 -1
- data/opencensus.gemspec +2 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90ff804d909c01ac8eb0ba83fd0add78451b186f
|
4
|
+
data.tar.gz: 16805cbe660a480f7aa52a3e3cb25ff8a799f039
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6be6ad106a73d7f5972e5eba7af5449a484bc04e6c967ffd3d59d4776bb4c9d2d79308938fe0d7bc538f4d95b0fc567c286a9d21056a9695e52ac5c049016597
|
7
|
+
data.tar.gz: 9557b149c2ba5997152d511c22149b2c21922e6ec723d7fa0ecf0571f83440afd086e2a6a1c8c4e55bbd5f22989f4bbc434ccd298525d9a428c70b6739e79954
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Release History
|
2
|
+
|
3
|
+
### 0.2.0 / 2018-02-13
|
4
|
+
|
5
|
+
* Span creation sets the "same_process_as_parent_span" field if possible.
|
6
|
+
* The "stack_trace_hash_id" field was missing from the interfaces. Fixed.
|
7
|
+
* Nullability of a few fields did not match the proto specs. Fixed.
|
8
|
+
* Fixed some documentation errors and omissions.
|
9
|
+
|
10
|
+
### 0.1.0 / 2018-01-12
|
11
|
+
|
12
|
+
Initial release of the core library, including:
|
13
|
+
|
14
|
+
* Trace interfaces
|
15
|
+
* Rack integration
|
16
|
+
* Rails integration
|
17
|
+
* Faraday integration
|
18
|
+
* Logging exporter
|
data/README.md
CHANGED
@@ -130,7 +130,7 @@ config.opencensus.trace.default_sampler =
|
|
130
130
|
config.opencensus.trace.default_max_attributes = 16
|
131
131
|
```
|
132
132
|
|
133
|
-
You can configure a variety of core
|
133
|
+
You can configure a variety of core OpenCensus options, including:
|
134
134
|
|
135
135
|
* Sampling, which controls how often a request is traced.
|
136
136
|
* Exporting, which controls how trace information is reported.
|
data/Rakefile
CHANGED
data/lib/opencensus/trace.rb
CHANGED
@@ -88,9 +88,14 @@ module OpenCensus
|
|
88
88
|
#
|
89
89
|
# @param [TraceContextData] trace_context The request's incoming trace
|
90
90
|
# context (optional)
|
91
|
-
#
|
92
|
-
|
93
|
-
|
91
|
+
# @param [boolean, nil] same_process_as_parent Set to `true` if the parent
|
92
|
+
# span is local, `false` if it is remote, or `nil` if there is no
|
93
|
+
# parent span or this information is not available.
|
94
|
+
#
|
95
|
+
def start_request_trace trace_context: nil, same_process_as_parent: nil
|
96
|
+
span_context = SpanContext.create_root \
|
97
|
+
trace_context: trace_context,
|
98
|
+
same_process_as_parent: same_process_as_parent
|
94
99
|
self.span_context = span_context
|
95
100
|
if block_given?
|
96
101
|
begin
|
@@ -48,6 +48,9 @@ module OpenCensus
|
|
48
48
|
|
49
49
|
private
|
50
50
|
|
51
|
+
# rubocop:disable Metrics/MethodLength
|
52
|
+
# rubocop:disable Metrics/AbcSize
|
53
|
+
|
51
54
|
def format_span span
|
52
55
|
{
|
53
56
|
name: format_value(span.name),
|
@@ -60,6 +63,7 @@ module OpenCensus
|
|
60
63
|
dropped_attributes_count: span.dropped_attributes_count,
|
61
64
|
stack_trace: span.stack_trace,
|
62
65
|
dropped_frames_count: span.dropped_frames_count,
|
66
|
+
stack_trace_hash_id: span.stack_trace_hash_id,
|
63
67
|
time_events: span.time_events.map { |te| format_time_event(te) },
|
64
68
|
dropped_annotations_count: span.dropped_annotations_count,
|
65
69
|
dropped_message_events_count: span.dropped_message_events_count,
|
@@ -71,6 +75,9 @@ module OpenCensus
|
|
71
75
|
}
|
72
76
|
end
|
73
77
|
|
78
|
+
# rubocop:enable Metrics/MethodLength
|
79
|
+
# rubocop:enable Metrics/AbcSize
|
80
|
+
|
74
81
|
def format_time_event time_event
|
75
82
|
case time_event
|
76
83
|
when Annotation
|
@@ -70,7 +70,9 @@ module OpenCensus
|
|
70
70
|
context = formatter.deserialize env[formatter.rack_header_name]
|
71
71
|
end
|
72
72
|
|
73
|
-
Trace.start_request_trace
|
73
|
+
Trace.start_request_trace \
|
74
|
+
trace_context: context,
|
75
|
+
same_process_as_parent: false do |span_context|
|
74
76
|
begin
|
75
77
|
span_context.in_span get_path(env) do |span|
|
76
78
|
start_request span, env
|
@@ -58,7 +58,7 @@ module OpenCensus
|
|
58
58
|
# The number of compressed bytes sent or received. If zero, assumed to
|
59
59
|
# be the same size as uncompressed.
|
60
60
|
#
|
61
|
-
# @return [Integer
|
61
|
+
# @return [Integer]
|
62
62
|
#
|
63
63
|
attr_reader :compressed_size
|
64
64
|
|
@@ -67,7 +67,7 @@ module OpenCensus
|
|
67
67
|
#
|
68
68
|
# @private
|
69
69
|
#
|
70
|
-
def initialize type, id, uncompressed_size, compressed_size:
|
70
|
+
def initialize type, id, uncompressed_size, compressed_size: 0,
|
71
71
|
time: nil
|
72
72
|
super time: time
|
73
73
|
@type = type
|
@@ -79,6 +79,9 @@ module OpenCensus
|
|
79
79
|
# The number of attributes that were discarded. Attributes can be
|
80
80
|
# discarded because their keys are too long or because there are too
|
81
81
|
# many attributes. If this value is 0, then no attributes were dropped.
|
82
|
+
#
|
83
|
+
# @return [Integer]
|
84
|
+
#
|
82
85
|
attr_reader :dropped_attributes_count
|
83
86
|
|
84
87
|
##
|
@@ -88,6 +91,15 @@ module OpenCensus
|
|
88
91
|
#
|
89
92
|
attr_reader :stack_trace
|
90
93
|
|
94
|
+
##
|
95
|
+
# A hash of the stack trace. This may be used by exporters to identify
|
96
|
+
# duplicate stack traces transmitted in the same request; only one copy
|
97
|
+
# of the actual data needs to be sent.
|
98
|
+
#
|
99
|
+
# @return [Integer]
|
100
|
+
#
|
101
|
+
attr_reader :stack_trace_hash_id
|
102
|
+
|
91
103
|
##
|
92
104
|
# The number of stack frames that were dropped because there were too many
|
93
105
|
# stack frames. If this value is 0, then no stack frames were dropped.
|
@@ -138,6 +150,7 @@ module OpenCensus
|
|
138
150
|
# An optional final status for this span.
|
139
151
|
#
|
140
152
|
# @return [Status, nil]
|
153
|
+
#
|
141
154
|
attr_reader :status
|
142
155
|
|
143
156
|
##
|
@@ -145,7 +158,7 @@ module OpenCensus
|
|
145
158
|
# crosses a process boundary. True when the parent_span belongs to the
|
146
159
|
# same process as the current span.
|
147
160
|
#
|
148
|
-
# @return [
|
161
|
+
# @return [boolean, nil]
|
149
162
|
#
|
150
163
|
attr_reader :same_process_as_parent_span
|
151
164
|
|
@@ -170,7 +183,7 @@ module OpenCensus
|
|
170
183
|
dropped_annotations_count: 0,
|
171
184
|
dropped_message_events_count: 0, links: [],
|
172
185
|
dropped_links_count: 0, status: nil,
|
173
|
-
same_process_as_parent_span:
|
186
|
+
same_process_as_parent_span: nil,
|
174
187
|
child_span_count: nil
|
175
188
|
@name = name
|
176
189
|
@trace_id = trace_id
|
@@ -181,6 +194,8 @@ module OpenCensus
|
|
181
194
|
@attributes = attributes
|
182
195
|
@dropped_attributes_count = dropped_attributes_count
|
183
196
|
@stack_trace = stack_trace
|
197
|
+
@stack_trace_hash_id = [stack_trace, dropped_frames_count].hash
|
198
|
+
@stack_trace_hash_id = -1 if @stack_trace_hash_id.zero?
|
184
199
|
@dropped_frames_count = dropped_frames_count
|
185
200
|
@time_events = time_events
|
186
201
|
@dropped_annotations_count = dropped_annotations_count
|
@@ -279,6 +279,21 @@ module OpenCensus
|
|
279
279
|
##
|
280
280
|
# Return a read-only version of this span
|
281
281
|
#
|
282
|
+
# @param [Integer, nil] max_attributes The maximum number of attributes
|
283
|
+
# to save, or `nil` to use the config value.
|
284
|
+
# @param [Integer, nil] max_stack_frames The maximum number of stack
|
285
|
+
# frames to save, or `nil` to use the config value.
|
286
|
+
# @param [Integer, nil] max_annotations The maximum number of annotations
|
287
|
+
# to save, or `nil` to use the config value.
|
288
|
+
# @param [Integer, nil] max_message_events The maximum number of message
|
289
|
+
# events to save, or `nil` to use the config value.
|
290
|
+
# @param [Integer, nil] max_links The maximum number of links to save,
|
291
|
+
# or `nil` to use the config value.
|
292
|
+
# @param [Integer, nil] max_string_length The maximum length in bytes for
|
293
|
+
# truncated strings, or `nil` to use the config value.
|
294
|
+
# @param [Integer, nil] child_span_count The number of child spans to
|
295
|
+
# declare, or `nil` to omit the `child_span_count` field.
|
296
|
+
#
|
282
297
|
# @return [Span]
|
283
298
|
#
|
284
299
|
def to_span max_attributes: nil,
|
@@ -287,7 +302,7 @@ module OpenCensus
|
|
287
302
|
max_message_events: nil,
|
288
303
|
max_links: nil,
|
289
304
|
max_string_length: nil,
|
290
|
-
|
305
|
+
child_span_count: nil
|
291
306
|
|
292
307
|
raise "Span must have start_time" unless @start_time
|
293
308
|
raise "Span must have end_time" unless @end_time
|
@@ -312,6 +327,7 @@ module OpenCensus
|
|
312
327
|
built_links = builder.convert_links @links
|
313
328
|
dropped_links_count = @links.size - built_links.size
|
314
329
|
built_status = builder.convert_status @status_code, @status_message
|
330
|
+
same_process_as_parent_span = context.parent.same_process_as_parent
|
315
331
|
|
316
332
|
Span.new trace_id, span_id, built_name, @start_time, @end_time,
|
317
333
|
parent_span_id: parent_span_id,
|
@@ -325,7 +341,8 @@ module OpenCensus
|
|
325
341
|
links: built_links,
|
326
342
|
dropped_links_count: dropped_links_count,
|
327
343
|
status: built_status,
|
328
|
-
same_process_as_parent_span: same_process_as_parent_span
|
344
|
+
same_process_as_parent_span: same_process_as_parent_span,
|
345
|
+
child_span_count: child_span_count
|
329
346
|
end
|
330
347
|
|
331
348
|
# rubocop:enable Metrics/MethodLength
|
@@ -15,9 +15,9 @@
|
|
15
15
|
module OpenCensus
|
16
16
|
module Trace
|
17
17
|
##
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
18
|
+
# SpanContext represents the context within which a span may be created.
|
19
|
+
# It includes the ID of the parent trace, the ID of the parent span, and
|
20
|
+
# sampling state.
|
21
21
|
#
|
22
22
|
class SpanContext
|
23
23
|
##
|
@@ -51,19 +51,23 @@ module OpenCensus
|
|
51
51
|
#
|
52
52
|
# @param [TraceContextData] trace_context The request's incoming trace
|
53
53
|
# context (optional)
|
54
|
+
# @param [boolean, nil] same_process_as_parent Set to `true` if the
|
55
|
+
# parent span is local, `false` if it is remote, or `nil` if there
|
56
|
+
# is no parent span or this information is not available.
|
54
57
|
#
|
55
58
|
# @return [SpanContext]
|
56
59
|
#
|
57
|
-
def create_root trace_context: nil
|
60
|
+
def create_root trace_context: nil, same_process_as_parent: nil
|
58
61
|
if trace_context
|
59
62
|
trace_data = TraceData.new \
|
60
63
|
trace_context.trace_id, trace_context.trace_options, {}
|
61
|
-
new trace_data, nil, trace_context.span_id
|
64
|
+
new trace_data, nil, trace_context.span_id,
|
65
|
+
same_process_as_parent
|
62
66
|
else
|
63
67
|
trace_id = rand 1..MAX_TRACE_ID
|
64
68
|
trace_id = trace_id.to_s(16).rjust(32, "0")
|
65
69
|
trace_data = TraceData.new trace_id, 0, {}
|
66
|
-
new trace_data, nil, ""
|
70
|
+
new trace_data, nil, "", nil
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|
@@ -132,6 +136,14 @@ module OpenCensus
|
|
132
136
|
#
|
133
137
|
attr_reader :span_id
|
134
138
|
|
139
|
+
##
|
140
|
+
# Whether the parent of spans created by this context is local, or `nil`
|
141
|
+
# if this context creates root spans or this information is unknown.
|
142
|
+
#
|
143
|
+
# @return [boolean, nil]
|
144
|
+
#
|
145
|
+
attr_reader :same_process_as_parent
|
146
|
+
|
135
147
|
##
|
136
148
|
# Whether the context (e.g. the parent span) has been sampled. This
|
137
149
|
# information may be used in sampling decisions for new spans.
|
@@ -227,10 +239,35 @@ module OpenCensus
|
|
227
239
|
# Does not build any ancestor spans. If you want the entire span tree
|
228
240
|
# built, call this method on the `#root` context.
|
229
241
|
#
|
242
|
+
# @param [Integer, nil] max_attributes The maximum number of attributes
|
243
|
+
# to save, or `nil` to use the config value.
|
244
|
+
# @param [Integer, nil] max_stack_frames The maximum number of stack
|
245
|
+
# frames to save, or `nil` to use the config value.
|
246
|
+
# @param [Integer, nil] max_annotations The maximum number of annotations
|
247
|
+
# to save, or `nil` to use the config value.
|
248
|
+
# @param [Integer, nil] max_message_events The maximum number of message
|
249
|
+
# events to save, or `nil` to use the config value.
|
250
|
+
# @param [Integer, nil] max_links The maximum number of links to save,
|
251
|
+
# or `nil` to use the config value.
|
252
|
+
# @param [Integer, nil] max_string_length The maximum length in bytes for
|
253
|
+
# truncated strings, or `nil` to use the config value.
|
254
|
+
#
|
230
255
|
# @return [Array<Span>] Built Span objects
|
231
256
|
#
|
232
|
-
def build_contained_spans
|
233
|
-
|
257
|
+
def build_contained_spans max_attributes: nil,
|
258
|
+
max_stack_frames: nil,
|
259
|
+
max_annotations: nil,
|
260
|
+
max_message_events: nil,
|
261
|
+
max_links: nil,
|
262
|
+
max_string_length: nil
|
263
|
+
contained_span_builders.find_all(&:finished?).map do |sb|
|
264
|
+
sb.to_span max_attributes: max_attributes,
|
265
|
+
max_stack_frames: max_stack_frames,
|
266
|
+
max_annotations: max_annotations,
|
267
|
+
max_message_events: max_message_events,
|
268
|
+
max_links: max_links,
|
269
|
+
max_string_length: max_string_length
|
270
|
+
end
|
234
271
|
end
|
235
272
|
|
236
273
|
##
|
@@ -240,10 +277,11 @@ module OpenCensus
|
|
240
277
|
#
|
241
278
|
# @private
|
242
279
|
#
|
243
|
-
def initialize trace_data, parent, span_id
|
280
|
+
def initialize trace_data, parent, span_id, same_process_as_parent
|
244
281
|
@trace_data = trace_data
|
245
282
|
@parent = parent
|
246
283
|
@span_id = span_id
|
284
|
+
@same_process_as_parent = same_process_as_parent
|
247
285
|
end
|
248
286
|
|
249
287
|
##
|
@@ -289,7 +327,7 @@ module OpenCensus
|
|
289
327
|
child_span_id = rand 1..MAX_SPAN_ID
|
290
328
|
child_span_id = child_span_id.to_s(16).rjust(16, "0")
|
291
329
|
unless @trace_data.span_map.key? child_span_id
|
292
|
-
return SpanContext.new @trace_data, self, child_span_id
|
330
|
+
return SpanContext.new @trace_data, self, child_span_id, true
|
293
331
|
end
|
294
332
|
end
|
295
333
|
end
|
data/lib/opencensus/version.rb
CHANGED
data/opencensus.gemspec
CHANGED
@@ -6,8 +6,8 @@ require "opencensus/version"
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "opencensus"
|
8
8
|
spec.version = OpenCensus::VERSION
|
9
|
-
spec.authors = ["Jeff Ching"]
|
10
|
-
spec.email = ["chingor@google.com"]
|
9
|
+
spec.authors = ["Jeff Ching", "Daniel Azuma"]
|
10
|
+
spec.email = ["chingor@google.com", "dazuma@google.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{A stats collection and distributed tracing framework}
|
13
13
|
spec.description = %q{A stats collection and distributed tracing framework}
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opencensus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Ching
|
8
|
+
- Daniel Azuma
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2018-
|
12
|
+
date: 2018-02-13 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
@@ -125,6 +126,7 @@ dependencies:
|
|
125
126
|
description: A stats collection and distributed tracing framework
|
126
127
|
email:
|
127
128
|
- chingor@google.com
|
129
|
+
- dazuma@google.com
|
128
130
|
executables: []
|
129
131
|
extensions: []
|
130
132
|
extra_rdoc_files: []
|
@@ -133,6 +135,7 @@ files:
|
|
133
135
|
- ".rubocop.yml"
|
134
136
|
- ".travis.yml"
|
135
137
|
- AUTHORS
|
138
|
+
- CHANGELOG.md
|
136
139
|
- CODE_OF_CONDUCT.md
|
137
140
|
- CONTRIBUTING.md
|
138
141
|
- Gemfile
|