opencensus 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +23 -0
- data/README.md +14 -3
- data/lib/opencensus.rb +12 -0
- data/lib/opencensus/common.rb +1 -0
- data/lib/opencensus/common/config.rb +1 -0
- data/lib/opencensus/config.rb +5 -3
- data/lib/opencensus/context.rb +1 -0
- data/lib/opencensus/stats.rb +1 -0
- data/lib/opencensus/tags.rb +1 -0
- data/lib/opencensus/trace.rb +31 -11
- data/lib/opencensus/trace/annotation.rb +1 -0
- data/lib/opencensus/trace/config.rb +13 -11
- data/lib/opencensus/trace/exporters.rb +1 -0
- data/lib/opencensus/trace/exporters/logger.rb +4 -3
- data/lib/opencensus/trace/exporters/multi.rb +1 -0
- data/lib/opencensus/trace/formatters.rb +3 -2
- data/lib/opencensus/trace/formatters/binary.rb +1 -0
- data/lib/opencensus/trace/formatters/cloud_trace.rb +1 -0
- data/lib/opencensus/trace/formatters/trace_context.rb +3 -2
- data/lib/opencensus/trace/integrations.rb +1 -0
- data/lib/opencensus/trace/integrations/faraday_middleware.rb +57 -21
- data/lib/opencensus/trace/integrations/rack_middleware.rb +11 -19
- data/lib/opencensus/trace/integrations/rails.rb +1 -0
- data/lib/opencensus/trace/link.rb +17 -7
- data/lib/opencensus/trace/message_event.rb +13 -3
- data/lib/opencensus/trace/samplers.rb +11 -7
- data/lib/opencensus/trace/samplers/always_sample.rb +1 -0
- data/lib/opencensus/trace/samplers/never_sample.rb +1 -0
- data/lib/opencensus/trace/samplers/probability.rb +13 -5
- data/lib/opencensus/trace/samplers/rate_limiting.rb +74 -0
- data/lib/opencensus/trace/span.rb +11 -5
- data/lib/opencensus/trace/span_builder.rb +84 -27
- data/lib/opencensus/trace/span_context.rb +76 -40
- data/lib/opencensus/trace/status.rb +227 -5
- data/lib/opencensus/trace/time_event.rb +1 -0
- data/lib/opencensus/trace/trace_context_data.rb +1 -0
- data/lib/opencensus/trace/truncatable_string.rb +1 -0
- data/lib/opencensus/version.rb +2 -1
- metadata +6 -6
- data/lib/opencensus/trace/samplers/max_qps.rb +0 -55
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
require "opencensus"
|
16
17
|
|
17
18
|
module OpenCensus
|
@@ -76,7 +77,7 @@ module OpenCensus
|
|
76
77
|
trace_context: context,
|
77
78
|
same_process_as_parent: false do |span_context|
|
78
79
|
begin
|
79
|
-
|
80
|
+
Trace.in_span get_path(env) do |span|
|
80
81
|
start_request span, env
|
81
82
|
@app.call(env).tap do |response|
|
82
83
|
finish_request span, response
|
@@ -100,30 +101,21 @@ module OpenCensus
|
|
100
101
|
env["HTTP_HOST"] || env["SERVER_NAME"]
|
101
102
|
end
|
102
103
|
|
103
|
-
def get_url env
|
104
|
-
path = get_path env
|
105
|
-
host = get_host env
|
106
|
-
scheme = env["SERVER_PROTOCOL"]
|
107
|
-
query_string = env["QUERY_STRING"].to_s
|
108
|
-
url = "#{scheme}://#{host}#{path}"
|
109
|
-
url = "#{url}?#{query_string}" unless query_string.empty?
|
110
|
-
url
|
111
|
-
end
|
112
|
-
|
113
104
|
def start_request span, env
|
114
105
|
span.kind = SpanBuilder::SERVER
|
115
|
-
span.put_attribute "
|
116
|
-
span.put_attribute "
|
117
|
-
span.put_attribute "
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
span.put_attribute "/tid", ::Thread.current.object_id.to_s
|
106
|
+
span.put_attribute "http.host", get_host(env)
|
107
|
+
span.put_attribute "http.path", get_path(env)
|
108
|
+
span.put_attribute "http.method", env["REQUEST_METHOD"].to_s.upcase
|
109
|
+
if env["HTTP_USER_AGENT"]
|
110
|
+
span.put_attribute "http.user_agent", env["HTTP_USER_AGENT"]
|
111
|
+
end
|
122
112
|
end
|
123
113
|
|
124
114
|
def finish_request span, response
|
125
115
|
if response.is_a?(::Array) && response.size == 3
|
126
|
-
|
116
|
+
http_status = response[0]
|
117
|
+
span.set_http_status http_status
|
118
|
+
span.put_attribute "http.status_code", http_status
|
127
119
|
end
|
128
120
|
end
|
129
121
|
end
|
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
module OpenCensus
|
16
17
|
module Trace
|
17
18
|
##
|
@@ -21,15 +22,24 @@ module OpenCensus
|
|
21
22
|
# traces or when the handler receives a request from a different project.
|
22
23
|
#
|
23
24
|
class Link
|
24
|
-
|
25
|
-
#
|
26
|
-
|
25
|
+
##
|
26
|
+
# A link type, indicating the relationship of the two spans is unknown,
|
27
|
+
# or is known but is other than parent-child.
|
28
|
+
# @return [Symbol]
|
29
|
+
#
|
30
|
+
TYPE_UNSPECIFIED = :TYPE_UNSPECIFIED
|
27
31
|
|
28
|
-
|
29
|
-
|
32
|
+
##
|
33
|
+
# A link type, indicating the linked span is a child of the current span.
|
34
|
+
# @return [Symbol]
|
35
|
+
#
|
36
|
+
CHILD_LINKED_SPAN = :CHILD_LINKED_SPAN
|
30
37
|
|
31
|
-
|
32
|
-
|
38
|
+
##
|
39
|
+
# A link type, indicating the linked span is a parent of the current span.
|
40
|
+
# @return [Symbol]
|
41
|
+
#
|
42
|
+
PARENT_LINKED_SPAN = :PARENT_LINKED_SPAN
|
33
43
|
|
34
44
|
##
|
35
45
|
# A unique identifier for a trace. All spans from the same trace share
|
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
require "opencensus/trace/time_event"
|
16
17
|
|
17
18
|
module OpenCensus
|
@@ -20,13 +21,22 @@ module OpenCensus
|
|
20
21
|
# An event describing a message sent/received between Spans.
|
21
22
|
#
|
22
23
|
class MessageEvent < TimeEvent
|
23
|
-
|
24
|
+
##
|
25
|
+
# An event type, indicating the type is unknown.
|
26
|
+
# @return [Symbol]
|
27
|
+
#
|
24
28
|
TYPE_UNSPECIFIED = :TYPE_UNSPECIFIED
|
25
29
|
|
26
|
-
|
30
|
+
##
|
31
|
+
# An event type, indicating a sent message.
|
32
|
+
# @return [Symbol]
|
33
|
+
#
|
27
34
|
SENT = :SENT
|
28
35
|
|
29
|
-
|
36
|
+
##
|
37
|
+
# An event type, indicating a received message.
|
38
|
+
# @return [Symbol]
|
39
|
+
#
|
30
40
|
RECEIVED = :RECEIVED
|
31
41
|
|
32
42
|
##
|
@@ -12,10 +12,11 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
require "opencensus/trace/samplers/always_sample"
|
16
17
|
require "opencensus/trace/samplers/never_sample"
|
17
18
|
require "opencensus/trace/samplers/probability"
|
18
|
-
require "opencensus/trace/samplers/
|
19
|
+
require "opencensus/trace/samplers/rate_limiting"
|
19
20
|
|
20
21
|
module OpenCensus
|
21
22
|
module Trace
|
@@ -26,19 +27,22 @@ module OpenCensus
|
|
26
27
|
# use a sampler to decide, for a given request, whether to report its
|
27
28
|
# trace.
|
28
29
|
#
|
29
|
-
# The OpenCensus specification defines
|
30
|
-
#
|
31
|
-
#
|
30
|
+
# The OpenCensus specification defines four samplers:
|
31
|
+
# {OpenCensus::Trace::Samplers::AlwaysSample},
|
32
|
+
# {OpenCensus::Trace::Samplers::NeverSample},
|
33
|
+
# {OpenCensus::Trace::Samplers::Probability}, and
|
34
|
+
# {OpenCensus::Trace::Samplers::RateLimiting}.
|
32
35
|
#
|
33
|
-
# A sampler is a Proc that takes a hash of environment information and
|
36
|
+
# A sampler is a `Proc` that takes a hash of environment information and
|
34
37
|
# returns a boolean indicating whether or not to sample the current
|
35
|
-
# request. Alternately, it could be an object that duck-types the Proc
|
38
|
+
# request. Alternately, it could be an object that duck-types the `Proc`
|
36
39
|
# interface by implementing the `call` method. The hash passed to `call`
|
37
40
|
# may contain the following keys, all of which are optional. Samplers must
|
38
41
|
# adjust their behavior to account for the availability or absence of any
|
39
42
|
# environment information:
|
40
43
|
#
|
41
|
-
# * `span_context` The SpanContext that created the
|
44
|
+
# * `span_context` The {OpenCensus::Trace::SpanContext} that created the
|
45
|
+
# span being sampled.
|
42
46
|
# * `rack_env` The hash of Rack environment information
|
43
47
|
#
|
44
48
|
# Applications may set a default sampler in the config. In addition, the
|
@@ -12,6 +12,9 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
16
|
+
require "monitor"
|
17
|
+
|
15
18
|
module OpenCensus
|
16
19
|
module Trace
|
17
20
|
module Samplers
|
@@ -21,9 +24,9 @@ module OpenCensus
|
|
21
24
|
#
|
22
25
|
class Probability
|
23
26
|
##
|
24
|
-
# The default sampling probability.
|
27
|
+
# The default sampling probability, equal to 1/10000.
|
25
28
|
#
|
26
|
-
DEFAULT_RATE = 0.
|
29
|
+
DEFAULT_RATE = 0.0001
|
27
30
|
|
28
31
|
##
|
29
32
|
# Create a sampler for the given probability.
|
@@ -39,6 +42,7 @@ module OpenCensus
|
|
39
42
|
end
|
40
43
|
@rate = rate
|
41
44
|
@rng = rng || Random.new
|
45
|
+
@lock = Monitor.new
|
42
46
|
end
|
43
47
|
|
44
48
|
##
|
@@ -47,8 +51,10 @@ module OpenCensus
|
|
47
51
|
#
|
48
52
|
# @param [Hash] opts The options to sample with.
|
49
53
|
# @option opts [SpanContext] :span_context If provided, the span context
|
50
|
-
# will be
|
51
|
-
#
|
54
|
+
# will be checked and the parent's sampling decision will be
|
55
|
+
# propagated if the parent was sampled. The span context will
|
56
|
+
# also be used to generate a deterministic value in place of the
|
57
|
+
# pseudo-random number generator.
|
52
58
|
# @return [boolean] Whether to sample at this time.
|
53
59
|
#
|
54
60
|
def call opts = {}
|
@@ -59,7 +65,9 @@ module OpenCensus
|
|
59
65
|
(span_context.trace_id.to_i(16) % 0x10000000000000000).to_f /
|
60
66
|
0x10000000000000000
|
61
67
|
else
|
62
|
-
@
|
68
|
+
@lock.synchronize do
|
69
|
+
@rng.rand
|
70
|
+
end
|
63
71
|
end
|
64
72
|
value <= @rate
|
65
73
|
end
|
@@ -0,0 +1,74 @@
|
|
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
|
+
|
16
|
+
require "monitor"
|
17
|
+
|
18
|
+
module OpenCensus
|
19
|
+
module Trace
|
20
|
+
module Samplers
|
21
|
+
##
|
22
|
+
# The RateLimiting sampler delays a minimum amount of time between each
|
23
|
+
# sample, enforcing a maximum QPS across traces that use this sampler.
|
24
|
+
#
|
25
|
+
class RateLimiting
|
26
|
+
##
|
27
|
+
# Default rate in samples per second.
|
28
|
+
#
|
29
|
+
DEFAULT_RATE = 0.1
|
30
|
+
|
31
|
+
##
|
32
|
+
# Create a sampler for the given QPS.
|
33
|
+
#
|
34
|
+
# @param [Number] qps Samples per second. Default is {DEFAULT_RATE}.
|
35
|
+
# @param [#rand] rng The random number generator to use. Default is a
|
36
|
+
# new `::Random` instance.
|
37
|
+
# @param [#now] time_class The time class to use. Default is `::Time`.
|
38
|
+
# Generally used for testing.
|
39
|
+
#
|
40
|
+
def initialize qps = DEFAULT_RATE, rng: nil, time_class: nil
|
41
|
+
@qps = qps
|
42
|
+
@time_class = time_class || Time
|
43
|
+
@rng = rng || Random.new
|
44
|
+
@last_time = @time_class.now.to_f
|
45
|
+
@lock = Monitor.new
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# Implements the sampler contract. Checks to see whether a sample
|
50
|
+
# should be taken at this time.
|
51
|
+
#
|
52
|
+
# @param [Hash] opts The options to sample with.
|
53
|
+
# @option opts [SpanContext] :span_context If provided, the span context
|
54
|
+
# will be checked and the parent's sampling decision will be
|
55
|
+
# propagated if the parent was sampled.
|
56
|
+
# @return [boolean] Whether to sample at this time.
|
57
|
+
#
|
58
|
+
def call opts = {}
|
59
|
+
span_context = opts[:span_context]
|
60
|
+
return true if span_context && span_context.sampled?
|
61
|
+
@lock.synchronize do
|
62
|
+
time = @time_class.now.to_f
|
63
|
+
elapsed = time - @last_time
|
64
|
+
@last_time = time
|
65
|
+
@rng.rand <= elapsed * @qps
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# MaxQPS is an older, deprecated name for the RateLimiting sampler.
|
71
|
+
MaxQPS = RateLimiting
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -12,6 +12,7 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
module OpenCensus
|
16
17
|
module Trace
|
17
18
|
##
|
@@ -20,18 +21,23 @@ module OpenCensus
|
|
20
21
|
# or have a parent span, and may have zero or more children.
|
21
22
|
#
|
22
23
|
class Span
|
23
|
-
##
|
24
|
+
##
|
25
|
+
# A span kind, indicating the span kind is unspecified.
|
26
|
+
# @return [Symbol]
|
27
|
+
#
|
24
28
|
SPAN_KIND_UNSPECIFIED = :SPAN_KIND_UNSPECIFIED
|
25
29
|
|
26
30
|
##
|
27
|
-
#
|
28
|
-
# remote network request.
|
31
|
+
# A span kind, indicating that the span covers server-side handling of an
|
32
|
+
# RPC or other remote network request.
|
33
|
+
# @return [Symbol]
|
29
34
|
#
|
30
35
|
SERVER = :SERVER
|
31
36
|
|
32
37
|
##
|
33
|
-
#
|
34
|
-
# or other remote request.
|
38
|
+
# A span kind, indicating that the span covers the client-side wrapper
|
39
|
+
# around an RPC or other remote request.
|
40
|
+
# @return [Symbol]
|
35
41
|
#
|
36
42
|
CLIENT = :CLIENT
|
37
43
|
|
@@ -12,39 +12,62 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
+
|
15
16
|
module OpenCensus
|
16
17
|
module Trace
|
17
18
|
##
|
18
19
|
# Span represents a single span within a request trace.
|
19
20
|
#
|
20
21
|
class SpanBuilder
|
21
|
-
##
|
22
|
+
##
|
23
|
+
# This value may be used as an event type or a link type, and indicates
|
24
|
+
# that the type is unknown.
|
25
|
+
# @return [Symbol]
|
26
|
+
#
|
22
27
|
TYPE_UNSPECIFIED = :TYPE_UNSPECIFIED
|
23
28
|
|
24
|
-
##
|
29
|
+
##
|
30
|
+
# An event type, indicating a sent message.
|
31
|
+
# @return [Symbol]
|
32
|
+
#
|
25
33
|
SENT = :SENT
|
26
34
|
|
27
|
-
##
|
35
|
+
##
|
36
|
+
# An event type, indicating a received message.
|
37
|
+
# @return [Symbol]
|
38
|
+
#
|
28
39
|
RECEIVED = :RECEIVED
|
29
40
|
|
30
|
-
##
|
41
|
+
##
|
42
|
+
# A link type, indicating the linked span is a child of the current span.
|
43
|
+
# @return [Symbol]
|
44
|
+
#
|
31
45
|
CHILD_LINKED_SPAN = :CHILD_LINKED_SPAN
|
32
46
|
|
33
|
-
##
|
47
|
+
##
|
48
|
+
# A link type, indicating the linked span is a parent of the current span.
|
49
|
+
# @return [Symbol]
|
50
|
+
#
|
34
51
|
PARENT_LINKED_SPAN = :PARENT_LINKED_SPAN
|
35
52
|
|
36
|
-
##
|
53
|
+
##
|
54
|
+
# A span kind, indicating that the span is either neither a server nor
|
55
|
+
# a client, or is unknown.
|
56
|
+
# @return [Symbol]
|
57
|
+
#
|
37
58
|
SPAN_KIND_UNSPECIFIED = :SPAN_KIND_UNSPECIFIED
|
38
59
|
|
39
60
|
##
|
40
|
-
#
|
41
|
-
# remote network request.
|
61
|
+
# A span kind, indicating that the span covers server-side handling of an
|
62
|
+
# RPC or other remote network request.
|
63
|
+
# @return [Symbol]
|
42
64
|
#
|
43
65
|
SERVER = :SERVER
|
44
66
|
|
45
67
|
##
|
46
|
-
#
|
47
|
-
# or other remote request.
|
68
|
+
# A span kind, indicating that the span covers the client-side wrapper
|
69
|
+
# around an RPC or other remote request.
|
70
|
+
# @return [Symbol]
|
48
71
|
#
|
49
72
|
CLIENT = :CLIENT
|
50
73
|
|
@@ -84,12 +107,14 @@ module OpenCensus
|
|
84
107
|
end
|
85
108
|
|
86
109
|
##
|
87
|
-
# Sampling decision for this span.
|
88
|
-
# span is first created. However, you can also change it after the fact.
|
110
|
+
# Sampling decision for this span.
|
89
111
|
#
|
90
112
|
# @return [boolean]
|
91
113
|
#
|
92
|
-
|
114
|
+
def sampled?
|
115
|
+
context.sampled?
|
116
|
+
end
|
117
|
+
alias sampled sampled?
|
93
118
|
|
94
119
|
##
|
95
120
|
# A description of the span's operation.
|
@@ -108,8 +133,9 @@ module OpenCensus
|
|
108
133
|
##
|
109
134
|
# The kind of span. Can be used to specify additional relationships
|
110
135
|
# between spans in addition to a parent/child relationship.
|
111
|
-
# Valid values are
|
112
|
-
#
|
136
|
+
# Valid values are {OpenCensus::Trace::SpanBuilder::CLIENT},
|
137
|
+
# {OpenCensus::Trace::SpanBuilder::SERVER}, and
|
138
|
+
# {OpenCensus::Trace::SpanBuilder::SPAN_KIND_UNSPECIFIED}.
|
113
139
|
#
|
114
140
|
# This field is required.
|
115
141
|
#
|
@@ -135,7 +161,7 @@ module OpenCensus
|
|
135
161
|
# the local machine where the span execution ends. On the server side,
|
136
162
|
# this is the time when the server application handler stops running.
|
137
163
|
#
|
138
|
-
# In Ruby, this is represented by a Time object in UTC, or `nil` if the
|
164
|
+
# In Ruby, this is represented by a `Time` object in UTC, or `nil` if the
|
139
165
|
# starting timestamp has not yet been populated.
|
140
166
|
#
|
141
167
|
# @return [Time, nil]
|
@@ -214,12 +240,14 @@ module OpenCensus
|
|
214
240
|
# Add an event describing a message sent/received between spans.
|
215
241
|
#
|
216
242
|
# @param [Symbol] type The type of MessageEvent. Indicates whether the
|
217
|
-
# message was sent or received. Valid values are
|
218
|
-
#
|
243
|
+
# message was sent or received. Valid values are
|
244
|
+
# {OpenCensus::Trace::SpanBuilder::SENT},
|
245
|
+
# {OpenCensus::Trace::SpanBuilder::RECEIVED}, and
|
246
|
+
# {OpenCensus::Trace::SpanBuilder::TYPE_UNSPECIFIED}.
|
219
247
|
# @param [Integer] id An identifier for the MessageEvent's message that
|
220
248
|
# can be used to match SENT and RECEIVED events. For example, this
|
221
249
|
# field could represent a sequence ID for a streaming RPC. It is
|
222
|
-
# recommended to be unique within a
|
250
|
+
# recommended to be unique within a span. The valid range is 64-bit
|
223
251
|
# unsigned `(0..2^64-1)`
|
224
252
|
# @param [Integer] uncompressed_size The number of uncompressed bytes
|
225
253
|
# sent or received.
|
@@ -250,9 +278,10 @@ module OpenCensus
|
|
250
278
|
# @param [String] span_id The unique identifier for a span within a trace.
|
251
279
|
# An 8-byte array expressed as 16 hex digits.
|
252
280
|
# @param [Symbol] type The relationship of the current span relative to
|
253
|
-
# the linked span. Valid values are
|
254
|
-
#
|
255
|
-
#
|
281
|
+
# the linked span. Valid values are
|
282
|
+
# {OpenCensus::Trace::SpanBuilder::CHILD_LINKED_SPAN},
|
283
|
+
# {OpenCensus::Trace::SpanBuilder::PARENT_LINKED_SPAN}, and
|
284
|
+
# {OpenCensus::Trace::SpanBuilder::TYPE_UNSPECIFIED}.
|
256
285
|
# @param [String] attributes Key-value pairs providing additional
|
257
286
|
# properties of the link. Keys must be strings, and values are
|
258
287
|
# restricted to the same types as attributes (see #put_attribute).
|
@@ -269,21 +298,33 @@ module OpenCensus
|
|
269
298
|
# @param [Integer] code Status code as a 32-bit signed integer
|
270
299
|
# @param [String] message A developer-facing error message, which should
|
271
300
|
# be in English.
|
301
|
+
#
|
272
302
|
def set_status code, message = ""
|
273
303
|
@status_code = code
|
274
304
|
@status_message = message
|
275
305
|
self
|
276
306
|
end
|
277
307
|
|
308
|
+
##
|
309
|
+
# Set the optional final status for the span using an http status code.
|
310
|
+
#
|
311
|
+
# @param [Integer] code HTTP status code as a 32-bit signed integer
|
312
|
+
# @param [String] message A developer-facing error message, which should
|
313
|
+
# be in English.
|
314
|
+
#
|
315
|
+
def set_http_status code, message = ""
|
316
|
+
set_status map_http_status(code), message
|
317
|
+
end
|
318
|
+
|
278
319
|
##
|
279
320
|
# Set the stack trace for this span.
|
280
|
-
# You may call this in one of three ways:
|
281
321
|
#
|
322
|
+
# You may call this in one of three ways:
|
282
323
|
# * Pass in no argument to use the caller's stack trace.
|
283
324
|
# * Pass in an integer to use the caller's stack trace, but skip
|
284
325
|
# additional stack frames.
|
285
|
-
# * Pass in an explicit array of Thread::Backtrace::Location as
|
286
|
-
# returned from Kernel#caller_locations
|
326
|
+
# * Pass in an explicit array of `Thread::Backtrace::Location` as
|
327
|
+
# returned from `Kernel#caller_locations`
|
287
328
|
#
|
288
329
|
# @param [Array<Thread::Backtrace::Location>, Integer] stack_trace
|
289
330
|
#
|
@@ -381,9 +422,8 @@ module OpenCensus
|
|
381
422
|
#
|
382
423
|
# @private
|
383
424
|
#
|
384
|
-
def initialize span_context,
|
425
|
+
def initialize span_context, skip_frames: 0
|
385
426
|
@context = span_context
|
386
|
-
@sampled = sampled
|
387
427
|
@name = ""
|
388
428
|
@kind = SPAN_KIND_UNSPECIFIED
|
389
429
|
@start_time = nil
|
@@ -601,6 +641,23 @@ module OpenCensus
|
|
601
641
|
tstr
|
602
642
|
end
|
603
643
|
end
|
644
|
+
|
645
|
+
private
|
646
|
+
|
647
|
+
def map_http_status http_status
|
648
|
+
case http_status
|
649
|
+
when 200..399 then Status::OK
|
650
|
+
when 400 then Status::INVALID_ARGUMENT
|
651
|
+
when 401 then Status::UNAUTHENTICATED
|
652
|
+
when 403 then Status::PERMISSION_DENIED
|
653
|
+
when 404 then Status::NOT_FOUND
|
654
|
+
when 429 then Status::RESOURCE_EXHAUSTED
|
655
|
+
when 501 then Status::UNIMPLEMENTED
|
656
|
+
when 503 then Status::UNAVAILABLE
|
657
|
+
when 504 then Status::DEADLINE_EXCEEDED
|
658
|
+
else Status::UNKNOWN
|
659
|
+
end
|
660
|
+
end
|
604
661
|
end
|
605
662
|
end
|
606
663
|
end
|