opencensus 0.3.1 → 0.4.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.
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