opencensus 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rubocop.yml +48 -0
- data/.travis.yml +16 -0
- data/AUTHORS +1 -0
- data/CODE_OF_CONDUCT.md +43 -0
- data/CONTRIBUTING.md +34 -0
- data/Gemfile +4 -0
- data/LICENSE +201 -0
- data/README.md +180 -0
- data/Rakefile +20 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/.gitignore +3 -0
- data/docs/404.html +24 -0
- data/docs/Gemfile +31 -0
- data/docs/_config.yml +39 -0
- data/docs/_layouts/default.html +65 -0
- data/docs/index.md +151 -0
- data/lib/opencensus.rb +21 -0
- data/lib/opencensus/common.rb +24 -0
- data/lib/opencensus/common/config.rb +521 -0
- data/lib/opencensus/config.rb +54 -0
- data/lib/opencensus/context.rb +72 -0
- data/lib/opencensus/stats.rb +26 -0
- data/lib/opencensus/tags.rb +25 -0
- data/lib/opencensus/trace.rb +181 -0
- data/lib/opencensus/trace/annotation.rb +60 -0
- data/lib/opencensus/trace/config.rb +119 -0
- data/lib/opencensus/trace/exporters.rb +26 -0
- data/lib/opencensus/trace/exporters/logger.rb +149 -0
- data/lib/opencensus/trace/formatters.rb +29 -0
- data/lib/opencensus/trace/formatters/binary.rb +66 -0
- data/lib/opencensus/trace/formatters/cloud_trace.rb +102 -0
- data/lib/opencensus/trace/formatters/trace_context.rb +124 -0
- data/lib/opencensus/trace/integrations.rb +24 -0
- data/lib/opencensus/trace/integrations/faraday_middleware.rb +176 -0
- data/lib/opencensus/trace/integrations/rack_middleware.rb +127 -0
- data/lib/opencensus/trace/integrations/rails.rb +121 -0
- data/lib/opencensus/trace/link.rb +90 -0
- data/lib/opencensus/trace/message_event.rb +80 -0
- data/lib/opencensus/trace/samplers.rb +50 -0
- data/lib/opencensus/trace/samplers/always_sample.rb +34 -0
- data/lib/opencensus/trace/samplers/max_qps.rb +55 -0
- data/lib/opencensus/trace/samplers/never_sample.rb +34 -0
- data/lib/opencensus/trace/samplers/probability.rb +69 -0
- data/lib/opencensus/trace/span.rb +196 -0
- data/lib/opencensus/trace/span_builder.rb +560 -0
- data/lib/opencensus/trace/span_context.rb +308 -0
- data/lib/opencensus/trace/status.rb +49 -0
- data/lib/opencensus/trace/time_event.rb +38 -0
- data/lib/opencensus/trace/trace_context_data.rb +22 -0
- data/lib/opencensus/trace/truncatable_string.rb +61 -0
- data/lib/opencensus/version.rb +18 -0
- data/opencensus.gemspec +32 -0
- metadata +210 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "opencensus/common/config"
|
16
|
+
|
17
|
+
module OpenCensus
|
18
|
+
# The OpenCensus overall configuration.
|
19
|
+
@config = Common::Config.new
|
20
|
+
|
21
|
+
class << self
|
22
|
+
##
|
23
|
+
# Configure OpenCensus. Most configuration parameters are part of
|
24
|
+
# subconfigurations that live under this main configuration.
|
25
|
+
#
|
26
|
+
# If the OpenCensus Railtie is installed in a Rails application, the
|
27
|
+
# toplevel configuration object is also exposed as `config.opencensus`.
|
28
|
+
#
|
29
|
+
# Generally, you should configure this once at process initialization,
|
30
|
+
# but it can be modified at any time.
|
31
|
+
#
|
32
|
+
# Example:
|
33
|
+
#
|
34
|
+
# OpenCensus.configure do |config|
|
35
|
+
# config.trace.default_sampler =
|
36
|
+
# OpenCensus::Trace::Samplers::AlwaysSample.new
|
37
|
+
# config.trace.default_max_attributes = 16
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
def configure
|
41
|
+
if block_given?
|
42
|
+
yield @config
|
43
|
+
else
|
44
|
+
@config
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Get the current configuration.
|
50
|
+
# @private
|
51
|
+
#
|
52
|
+
attr_reader :config
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module OpenCensus
|
16
|
+
##
|
17
|
+
# The Context module provides per-thread storage.
|
18
|
+
#
|
19
|
+
module Context
|
20
|
+
##
|
21
|
+
# Thread local storage key under which all OpenCensus context data is
|
22
|
+
# stored.
|
23
|
+
#
|
24
|
+
# @private
|
25
|
+
#
|
26
|
+
THREAD_KEY = :__opencensus_context__
|
27
|
+
|
28
|
+
class << self
|
29
|
+
##
|
30
|
+
# Store a value in the context.
|
31
|
+
#
|
32
|
+
# @param [String, Symbol] key The name of the context value to store.
|
33
|
+
# @param [Object] value The value associated with the key.
|
34
|
+
def set key, value
|
35
|
+
storage[key] = value
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Return a value from the context. Returns nil if no value is set.
|
40
|
+
#
|
41
|
+
# @param [String, Symbol] key The name of the context value to fetch.
|
42
|
+
# @return [Object, nil] The fetched value.
|
43
|
+
#
|
44
|
+
def get key
|
45
|
+
storage[key]
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Unsets a value from the context.
|
50
|
+
#
|
51
|
+
# @param [String, Symbol] key The name of the context value to unset.
|
52
|
+
# @return [Object, nil] The value of the context value just unset.
|
53
|
+
#
|
54
|
+
def unset key
|
55
|
+
storage.delete key
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Clears all values from the context.
|
60
|
+
#
|
61
|
+
def reset!
|
62
|
+
Thread.current[THREAD_KEY] = {}
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def storage
|
68
|
+
Thread.current[THREAD_KEY] ||= {}
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module OpenCensus
|
16
|
+
##
|
17
|
+
# The Stats module contains support for OpenCensus stats collection.
|
18
|
+
#
|
19
|
+
# OpenCensus allows users to create typed measures, record measurements,
|
20
|
+
# aggregate the collected data, and export the aggregated data.
|
21
|
+
#
|
22
|
+
# TODO: implement stats
|
23
|
+
#
|
24
|
+
module Stats
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
module OpenCensus
|
16
|
+
##
|
17
|
+
# The Tags module contains support for OpenCensus tags. Tags are key-value
|
18
|
+
# pairs. Tags provide additional cardinality to the OpenCensus instrumentation
|
19
|
+
# data.
|
20
|
+
#
|
21
|
+
# TODO: implement tags
|
22
|
+
#
|
23
|
+
module Tags
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "opencensus/trace/annotation"
|
16
|
+
require "opencensus/trace/config"
|
17
|
+
require "opencensus/trace/exporters"
|
18
|
+
require "opencensus/trace/formatters"
|
19
|
+
require "opencensus/trace/integrations"
|
20
|
+
require "opencensus/trace/link"
|
21
|
+
require "opencensus/trace/message_event"
|
22
|
+
require "opencensus/trace/samplers"
|
23
|
+
require "opencensus/trace/span_builder"
|
24
|
+
require "opencensus/trace/span_context"
|
25
|
+
require "opencensus/trace/span"
|
26
|
+
require "opencensus/trace/status"
|
27
|
+
require "opencensus/trace/trace_context_data"
|
28
|
+
require "opencensus/trace/truncatable_string"
|
29
|
+
|
30
|
+
module OpenCensus
|
31
|
+
##
|
32
|
+
# # OpenCensus Trace API
|
33
|
+
#
|
34
|
+
# This is a Ruby implementation of OpenCensus Trace, providing a common API
|
35
|
+
# for latency trace tools.
|
36
|
+
#
|
37
|
+
module Trace
|
38
|
+
##
|
39
|
+
# Internal key for storing the current SpanContext in the thread local
|
40
|
+
# Context
|
41
|
+
#
|
42
|
+
# @private
|
43
|
+
#
|
44
|
+
SPAN_CONTEXT_KEY = :__span_context__
|
45
|
+
|
46
|
+
class << self
|
47
|
+
##
|
48
|
+
# Sets the current thread-local SpanContext, which governs the behavior
|
49
|
+
# of the span creation class methods of OpenCensus::Trace.
|
50
|
+
#
|
51
|
+
# @param [SpanContext] span_context
|
52
|
+
#
|
53
|
+
def span_context= span_context
|
54
|
+
OpenCensus::Context.set SPAN_CONTEXT_KEY, span_context
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Unsets the current thread-local SpanContext, disabling span creation
|
59
|
+
# class methods of OpenCensus::Trace
|
60
|
+
#
|
61
|
+
def unset_span_context
|
62
|
+
OpenCensus::Context.unset SPAN_CONTEXT_KEY
|
63
|
+
end
|
64
|
+
|
65
|
+
##
|
66
|
+
# Returns the current thread-local SpanContext, which governs the
|
67
|
+
# behavior of the span creation class methods of OpenCensus::Trace.
|
68
|
+
# Returns `nil` if there is no current SpanContext.
|
69
|
+
#
|
70
|
+
# @return [SpanContext, nil]
|
71
|
+
#
|
72
|
+
def span_context
|
73
|
+
OpenCensus::Context.get SPAN_CONTEXT_KEY
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# Starts tracing a request in the current thread, by creating a new
|
78
|
+
# SpanContext and setting it as the current thread-local context.
|
79
|
+
# Generally you should call this when beginning the handling of a
|
80
|
+
# request. If there is a rack environment or a provided Trace-Context
|
81
|
+
# header, pass it in so the SpanContext is constructed accordingly.
|
82
|
+
#
|
83
|
+
# If you pass a block, this method will yield the SpanContext to the
|
84
|
+
# block. When the block finishes, the span context will automatically
|
85
|
+
# be unset. If you do not pass a block, this method will return the
|
86
|
+
# SpanContext. You must then call `unset_span_context` yourself at the
|
87
|
+
# end of the request
|
88
|
+
#
|
89
|
+
# @param [TraceContextData] trace_context The request's incoming trace
|
90
|
+
# context (optional)
|
91
|
+
#
|
92
|
+
def start_request_trace trace_context: nil
|
93
|
+
span_context = SpanContext.create_root trace_context: trace_context
|
94
|
+
self.span_context = span_context
|
95
|
+
if block_given?
|
96
|
+
begin
|
97
|
+
yield span_context
|
98
|
+
ensure
|
99
|
+
unset_span_context
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
##
|
105
|
+
# Create a new span in the current thread-local context.
|
106
|
+
# You must pass a name for the span. All other span attributes should
|
107
|
+
# be set using the SpanBuilder methods.
|
108
|
+
#
|
109
|
+
# The span will be started automatically with the current timestamp.
|
110
|
+
# However, you are responsible for finishing the span yourself.
|
111
|
+
# Furthermore, the current thread-local SpanContext will be updated so
|
112
|
+
# subsequent calls to `start_span` will create spans within the new span.
|
113
|
+
#
|
114
|
+
# You should always match `start_span` calls with a corresponding call to
|
115
|
+
# `end_span`, which finishes the span and updates the SpanContext
|
116
|
+
# accordingly. If you want this done automatically, consider using
|
117
|
+
# the `in_span` method.
|
118
|
+
#
|
119
|
+
# Will throw an exception if there is no current SpanContext.
|
120
|
+
#
|
121
|
+
# @param [String] name Name of the span
|
122
|
+
# @param [Sampler] sampler Span-scoped sampler. If not provided,
|
123
|
+
# defaults to the trace configuration's default sampler.
|
124
|
+
#
|
125
|
+
# @return [SpanBuilder] A SpanBuilder object that you can use to
|
126
|
+
# set span attributes and create children.
|
127
|
+
#
|
128
|
+
def start_span name, skip_frames: 0, sampler: nil
|
129
|
+
context = span_context
|
130
|
+
raise "No currently active span context" unless context
|
131
|
+
span = context.start_span name, skip_frames: skip_frames + 1,
|
132
|
+
sampler: sampler
|
133
|
+
self.span_context = span.context
|
134
|
+
span
|
135
|
+
end
|
136
|
+
|
137
|
+
##
|
138
|
+
# Create a new span in this context.
|
139
|
+
# You must pass a name for the span. All other span attributes should
|
140
|
+
# be set using the SpanBuilder methods.
|
141
|
+
#
|
142
|
+
# The span will be started automatically with the current timestamp. The
|
143
|
+
# SpanBuilder will then be passed to the block you provide. The span will
|
144
|
+
# be finished automatically at the end of the block. Within the block,
|
145
|
+
# the thread-local SpanContext will be updated so calls to `start_span`
|
146
|
+
# will create subspans.
|
147
|
+
#
|
148
|
+
# @param [String] name Name of the span
|
149
|
+
# @param [Sampler] sampler Span-scoped sampler. If not provided,
|
150
|
+
# defaults to the trace configuration's default sampler.
|
151
|
+
#
|
152
|
+
def in_span name, skip_frames: 0, sampler: nil
|
153
|
+
span = start_span name, skip_frames: skip_frames + 1, sampler: sampler
|
154
|
+
begin
|
155
|
+
yield span
|
156
|
+
ensure
|
157
|
+
end_span span
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
##
|
162
|
+
# Finish the given span, which must be the span that created the
|
163
|
+
# current thread-local SpanContext. Also updates the thread-local
|
164
|
+
# SpanContext so subsequent calls no longer create subspans of the
|
165
|
+
# finished span.
|
166
|
+
#
|
167
|
+
# @param [SpanBuilder] span The expected currently active span to finish.
|
168
|
+
#
|
169
|
+
def end_span span
|
170
|
+
context = span_context
|
171
|
+
raise "No currently active span context" unless context
|
172
|
+
unless span.equal? context.this_span
|
173
|
+
raise "The given span doesn't match the currently active span"
|
174
|
+
end
|
175
|
+
span.finish!
|
176
|
+
self.span_context = context.parent
|
177
|
+
span
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "opencensus/trace/time_event"
|
16
|
+
|
17
|
+
module OpenCensus
|
18
|
+
module Trace
|
19
|
+
##
|
20
|
+
# A text annotation with a set of attributes.
|
21
|
+
#
|
22
|
+
class Annotation < TimeEvent
|
23
|
+
##
|
24
|
+
# A user-supplied message describing the event.
|
25
|
+
#
|
26
|
+
# @return [TruncatableString]
|
27
|
+
#
|
28
|
+
attr_reader :description
|
29
|
+
|
30
|
+
##
|
31
|
+
# A set of attributes on the annotation.
|
32
|
+
#
|
33
|
+
# @return [Hash<String, (TruncatableString, Integer, Boolean)>]
|
34
|
+
#
|
35
|
+
attr_reader :attributes
|
36
|
+
|
37
|
+
##
|
38
|
+
# The number of attributes that were discarded. Attributes can be
|
39
|
+
# discarded because their keys are too long or because there are too
|
40
|
+
# many attributes. If this value is 0, then no attributes were dropped.
|
41
|
+
#
|
42
|
+
# @return [Integer]
|
43
|
+
#
|
44
|
+
attr_reader :dropped_attributes_count
|
45
|
+
|
46
|
+
##
|
47
|
+
# Create an Annotation object.
|
48
|
+
#
|
49
|
+
# @private
|
50
|
+
#
|
51
|
+
def initialize description, attributes: {}, dropped_attributes_count: 0,
|
52
|
+
time: nil
|
53
|
+
super time: time
|
54
|
+
@description = description
|
55
|
+
@attributes = attributes
|
56
|
+
@dropped_attributes_count = dropped_attributes_count
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# Copyright 2017 OpenCensus Authors
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
require "opencensus/trace/exporters"
|
16
|
+
require "opencensus/trace/formatters"
|
17
|
+
require "opencensus/trace/samplers"
|
18
|
+
|
19
|
+
module OpenCensus
|
20
|
+
module Trace
|
21
|
+
# Schema of the Trace configuration. See Trace#configure for more info.
|
22
|
+
@config = Common::Config.new do |config|
|
23
|
+
default_sampler =
|
24
|
+
Samplers::Probability.new Samplers::Probability::DEFAULT_RATE
|
25
|
+
config.add_option! :default_sampler, default_sampler do |value|
|
26
|
+
value.respond_to? :call
|
27
|
+
end
|
28
|
+
default_exporter =
|
29
|
+
Exporters::Logger.new ::Logger.new(STDOUT, ::Logger::INFO)
|
30
|
+
config.add_option! :exporter, default_exporter do |value|
|
31
|
+
value.respond_to? :export
|
32
|
+
end
|
33
|
+
default_formatter =
|
34
|
+
Formatters::TraceContext.new
|
35
|
+
config.add_option! :http_formatter, default_formatter do |value|
|
36
|
+
value.respond_to?(:serialize) &&
|
37
|
+
value.respond_to?(:deserialize) &&
|
38
|
+
value.respond_to?(:header_name) &&
|
39
|
+
value.respond_to?(:rack_header_name)
|
40
|
+
end
|
41
|
+
config.add_option! :default_max_attributes, 32
|
42
|
+
config.add_option! :default_max_stack_frames, 32
|
43
|
+
config.add_option! :default_max_annotations, 32
|
44
|
+
config.add_option! :default_max_message_events, 128
|
45
|
+
config.add_option! :default_max_links, 128
|
46
|
+
config.add_option! :default_max_string_length, 1024
|
47
|
+
end
|
48
|
+
|
49
|
+
# Expose the trace config as a subconfig under the main config.
|
50
|
+
OpenCensus.configure do |config|
|
51
|
+
config.add_alias! :trace, config: @config
|
52
|
+
end
|
53
|
+
|
54
|
+
class << self
|
55
|
+
##
|
56
|
+
# Configure OpenCensus Trace. These configuration fields include
|
57
|
+
# parameters governing sampling, span creation, and exporting.
|
58
|
+
#
|
59
|
+
# This configuration is also available as the `trace` subconfig under the
|
60
|
+
# main configuration `OpenCensus.configure`. If the OpenCensus Railtie is
|
61
|
+
# installed in a Rails application, the configuration object is also
|
62
|
+
# exposed as `config.opencensus.trace`.
|
63
|
+
#
|
64
|
+
# Generally, you should configure this once at process initialization,
|
65
|
+
# but it can be modified at any time.
|
66
|
+
#
|
67
|
+
# Example:
|
68
|
+
#
|
69
|
+
# OpenCensus::Trace.configure do |config|
|
70
|
+
# config.default_sampler =
|
71
|
+
# OpenCensus::Trace::Samplers::AlwaysSample.new
|
72
|
+
# config.default_max_attributes = 16
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# Supported fields are:
|
76
|
+
#
|
77
|
+
# * `default_sampler` The default sampler to use. Must be a sampler,
|
78
|
+
# an object with a `call` method that takes a single options hash.
|
79
|
+
# See OpenCensus::Trace::Samplers. The initial value is a Probability
|
80
|
+
# sampler with a default rate.
|
81
|
+
# * `exporter` The exporter to use. Must be an exporter, an object with
|
82
|
+
# an export method that takes an array of Span objects. See
|
83
|
+
# OpenCensus::Trace::Exporters. The initial value is a Logger exporter
|
84
|
+
# that logs to STDOUT.
|
85
|
+
# * `http_formatter` The trace context propagation formatter to use.
|
86
|
+
# Must be a formatter, an object with `serialize`, `deserialize`,
|
87
|
+
# `header_name`, and `rack_header_name` methods. See
|
88
|
+
# OpenCensus::Trace::Formatter. The initial value is a TraceContext
|
89
|
+
# formatter.
|
90
|
+
# * `default_max_attributes` The maximum number of attributes to add to
|
91
|
+
# a span. Initial value is 32. Use 0 for no maximum.
|
92
|
+
# * `default_max_stack_frames` The maximum number of stack frames to
|
93
|
+
# represent in a span's stack trace. Initial value is 32. Use 0 for
|
94
|
+
# no maximum.
|
95
|
+
# * `default_max_annotations` The maximum number of annotations to add
|
96
|
+
# to a span. Initial value is 32. Use 0 for no maximum.
|
97
|
+
# * `default_max_message_events` The maximum number of message events
|
98
|
+
# to add to a span. Initial value is 128. Use 0 for no maximum.
|
99
|
+
# * `default_max_links` The maximum number of links to add to a span.
|
100
|
+
# Initial value is 128. Use 0 for no maximum.
|
101
|
+
# * `default_max_string_length` The maximum length of string fields.
|
102
|
+
# Initial value is 1024. Use 0 for no maximum.
|
103
|
+
#
|
104
|
+
def configure
|
105
|
+
if block_given?
|
106
|
+
yield @config
|
107
|
+
else
|
108
|
+
@config
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
##
|
113
|
+
# Get the current configuration
|
114
|
+
# @private
|
115
|
+
#
|
116
|
+
attr_reader :config
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|