opencensus 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +23 -0
  3. data/README.md +14 -3
  4. data/lib/opencensus.rb +12 -0
  5. data/lib/opencensus/common.rb +1 -0
  6. data/lib/opencensus/common/config.rb +1 -0
  7. data/lib/opencensus/config.rb +5 -3
  8. data/lib/opencensus/context.rb +1 -0
  9. data/lib/opencensus/stats.rb +1 -0
  10. data/lib/opencensus/tags.rb +1 -0
  11. data/lib/opencensus/trace.rb +31 -11
  12. data/lib/opencensus/trace/annotation.rb +1 -0
  13. data/lib/opencensus/trace/config.rb +13 -11
  14. data/lib/opencensus/trace/exporters.rb +1 -0
  15. data/lib/opencensus/trace/exporters/logger.rb +4 -3
  16. data/lib/opencensus/trace/exporters/multi.rb +1 -0
  17. data/lib/opencensus/trace/formatters.rb +3 -2
  18. data/lib/opencensus/trace/formatters/binary.rb +1 -0
  19. data/lib/opencensus/trace/formatters/cloud_trace.rb +1 -0
  20. data/lib/opencensus/trace/formatters/trace_context.rb +3 -2
  21. data/lib/opencensus/trace/integrations.rb +1 -0
  22. data/lib/opencensus/trace/integrations/faraday_middleware.rb +57 -21
  23. data/lib/opencensus/trace/integrations/rack_middleware.rb +11 -19
  24. data/lib/opencensus/trace/integrations/rails.rb +1 -0
  25. data/lib/opencensus/trace/link.rb +17 -7
  26. data/lib/opencensus/trace/message_event.rb +13 -3
  27. data/lib/opencensus/trace/samplers.rb +11 -7
  28. data/lib/opencensus/trace/samplers/always_sample.rb +1 -0
  29. data/lib/opencensus/trace/samplers/never_sample.rb +1 -0
  30. data/lib/opencensus/trace/samplers/probability.rb +13 -5
  31. data/lib/opencensus/trace/samplers/rate_limiting.rb +74 -0
  32. data/lib/opencensus/trace/span.rb +11 -5
  33. data/lib/opencensus/trace/span_builder.rb +84 -27
  34. data/lib/opencensus/trace/span_context.rb +76 -40
  35. data/lib/opencensus/trace/status.rb +227 -5
  36. data/lib/opencensus/trace/time_event.rb +1 -0
  37. data/lib/opencensus/trace/trace_context_data.rb +1 -0
  38. data/lib/opencensus/trace/truncatable_string.rb +1 -0
  39. data/lib/opencensus/version.rb +2 -1
  40. metadata +6 -6
  41. 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
- span_context.in_span get_path(env) do |span|
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 "/http/host", get_host(env)
116
- span.put_attribute "/http/url", get_url(env)
117
- span.put_attribute "/http/method", env["REQUEST_METHOD"]
118
- span.put_attribute "/http/client_protocol", env["SERVER_PROTOCOL"]
119
- span.put_attribute "/http/user_agent", env["HTTP_USER_AGENT"]
120
- span.put_attribute "/pid", ::Process.pid.to_s
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
- span.set_status response[0]
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
  require "active_support"
16
17
  require "rails/railtie"
17
18
  require "opencensus/trace/integrations/rack_middleware"
@@ -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
- # The relationship of the two spans is unknown, or known but other
25
- # than parent-child.
26
- TYPE_UNSPECIFIED = :TYPE_UNSPECIFIED
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
- # The linked span is a child of the current span.
29
- CHILD_LINKED_SPAN = :CHILD_LINKED_SPAN
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
- # The linked span is a parent of the current span.
32
- PARENT_LINKED_SPAN = :PARENT_LINKED_SPAN
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
- # Unknown event type.
24
+ ##
25
+ # An event type, indicating the type is unknown.
26
+ # @return [Symbol]
27
+ #
24
28
  TYPE_UNSPECIFIED = :TYPE_UNSPECIFIED
25
29
 
26
- # Indicates a sent message.
30
+ ##
31
+ # An event type, indicating a sent message.
32
+ # @return [Symbol]
33
+ #
27
34
  SENT = :SENT
28
35
 
29
- # Indicates a received message.
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/max_qps"
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 three samplers: AlwaysSample,
30
- # NeverSample, and Probability. The Ruby implementation also provides a
31
- # fourth, MaxQPS, based on the Stackdriver library.
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 span being sampled.
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,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
  module Samplers
@@ -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
  module Samplers
@@ -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.1
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 used to generate a deterministic value in place of the
51
- # pseudo-random number generator. #
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
- @rng.rand
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
- ## The span kind is unspecified
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
- # Indicates that the span covers server-side handling of an RPC or other
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
- # Indicates that the span covers the client-side wrapper around an RPC
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
- ## The type of a message event or link is unknown.
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
- ## Indicates a sent message.
29
+ ##
30
+ # An event type, indicating a sent message.
31
+ # @return [Symbol]
32
+ #
25
33
  SENT = :SENT
26
34
 
27
- ## Indicates a received message.
35
+ ##
36
+ # An event type, indicating a received message.
37
+ # @return [Symbol]
38
+ #
28
39
  RECEIVED = :RECEIVED
29
40
 
30
- ## The linked span is a child of the current span.
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
- ## The linked span is a parent of the current span.
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
- ## The span kind is unspecified
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
- # Indicates that the span covers server-side handling of an RPC or other
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
- # Indicates that the span covers the client-side wrapper around an RPC
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. Generally this field is set when the
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
- attr_accessor :sampled
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 `SpanBuilder::CLIENT`, `SpanBuilder::SERVER`, and
112
- # `SpanBuilder::SPAN_KIND_UNSPECIFIED`.
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 `SpanBuilder::SENT`
218
- # `SpanBuilder::RECEIVED`, and `SpanBuilder::TYPE_UNSPECIFIED`.
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 Span. The valid range is 64-bit
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 `SpanBuilder::CHILD_LINKED_SPAN`,
254
- # `SpanBuilder::PARENT_LINKED_SPAN`, and
255
- # `SpanBuilder::TYPE_UNSPECIFIED`.
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, sampled, skip_frames: 0
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