Class: Sentry::Span
- Inherits:
-
Object
- Object
- Sentry::Span
- Defined in:
- lib/sentry/span.rb
Direct Known Subclasses
Defined Under Namespace
Modules: DataConventions
Constant Summary collapse
- STATUS_MAP =
{ 400 => "invalid_argument", 401 => "unauthenticated", 403 => "permission_denied", 404 => "not_found", 409 => "already_exists", 429 => "resource_exhausted", 499 => "cancelled", 500 => "internal_error", 501 => "unimplemented", 503 => "unavailable", 504 => "deadline_exceeded" }
- DEFAULT_SPAN_ORIGIN =
"manual"
Instance Attribute Summary collapse
-
#data ⇒ Hash
readonly
Span data.
-
#description ⇒ String
readonly
Span description.
-
#op ⇒ String
readonly
Span operation.
-
#origin ⇒ String
readonly
Span origin that tracks what kind of instrumentation created a span.
-
#parent_span_id ⇒ String
readonly
Span parent’s span_id.
-
#sampled ⇒ Boolean?
readonly
Sampling result of the span.
-
#span_id ⇒ String
readonly
An uuid that can be used to identify the span.
-
#span_recorder ⇒ SpanRecorder
The SpanRecorder the current span belongs to.
-
#start_timestamp ⇒ Float
readonly
Starting timestamp of the span.
-
#status ⇒ String
readonly
Span status.
-
#tags ⇒ Hash
readonly
Span tags.
-
#timestamp ⇒ Float
readonly
Finishing timestamp of the span.
-
#trace_id ⇒ String
readonly
An uuid that can be used to identify a trace.
-
#transaction ⇒ Transaction
readonly
The Transaction object the Span belongs to.
Instance Method Summary collapse
- #deep_dup ⇒ Object
-
#finish(end_timestamp: nil) ⇒ self
Finishes the span by adding a timestamp.
-
#get_dynamic_sampling_context ⇒ Hash?
Returns the Dynamic Sampling Context from the transaction baggage.
-
#get_trace_context ⇒ Hash
Returns the span’s context that can be used to embed in an Event.
-
#initialize(transaction:, description: nil, op: nil, status: nil, trace_id: nil, span_id: nil, parent_span_id: nil, sampled: nil, start_timestamp: nil, timestamp: nil, origin: nil) ⇒ Span
constructor
A new instance of Span.
-
#metrics_local_aggregator ⇒ Object
Collects gauge metrics on the span for metric summaries.
- #metrics_summary ⇒ Object
-
#set_data(key, value) ⇒ Object
Inserts a key-value pair to the span’s data payload.
-
#set_description(description) ⇒ Object
Sets the span’s description.
-
#set_http_status(status_code) ⇒ Object
Sets the span’s status with given http status code.
-
#set_op(op) ⇒ Object
Sets the span’s operation.
-
#set_origin(origin) ⇒ Object
Sets the origin of the span.
-
#set_status(status) ⇒ Object
Sets the span’s status.
-
#set_tag(key, value) ⇒ Object
Sets a tag to the span.
-
#set_timestamp(timestamp) ⇒ Object
Sets the span’s finish timestamp.
-
#start_child(**attributes) ⇒ Object
Starts a child span with given attributes.
-
#to_baggage ⇒ String?
Generates a W3C Baggage header string for distributed tracing from the incoming baggage stored on the transaction.
- #to_hash ⇒ Hash
-
#to_sentry_trace ⇒ String
Generates a trace string that can be used to connect other transactions.
-
#with_child_span(**attributes, &block) {|child_span| ... } ⇒ Object
Starts a child span, yield it to the given block, and then finish the span after the block is executed.
Constructor Details
#initialize(transaction:, description: nil, op: nil, status: nil, trace_id: nil, span_id: nil, parent_span_id: nil, sampled: nil, start_timestamp: nil, timestamp: nil, origin: nil) ⇒ Span
Returns a new instance of Span.
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/sentry/span.rb', line 117 def initialize( transaction:, description: nil, op: nil, status: nil, trace_id: nil, span_id: nil, parent_span_id: nil, sampled: nil, start_timestamp: nil, timestamp: nil, origin: nil ) @trace_id = trace_id || SecureRandom.uuid.delete("-") @span_id = span_id || SecureRandom.uuid.delete("-").slice(0, 16) @parent_span_id = parent_span_id @sampled = sampled @start_timestamp = || Sentry.utc_now.to_f @timestamp = @description = description @transaction = transaction @op = op @status = status @data = {} @tags = {} @origin = origin || DEFAULT_SPAN_ORIGIN end |
Instance Attribute Details
#data ⇒ Hash (readonly)
Span data
102 103 104 |
# File 'lib/sentry/span.rb', line 102 def data @data end |
#description ⇒ String (readonly)
Span description
90 91 92 |
# File 'lib/sentry/span.rb', line 90 def description @description end |
#op ⇒ String (readonly)
Span operation
93 94 95 |
# File 'lib/sentry/span.rb', line 93 def op @op end |
#origin ⇒ String (readonly)
Span origin that tracks what kind of instrumentation created a span
105 106 107 |
# File 'lib/sentry/span.rb', line 105 def origin @origin end |
#parent_span_id ⇒ String (readonly)
Span parent’s span_id.
78 79 80 |
# File 'lib/sentry/span.rb', line 78 def parent_span_id @parent_span_id end |
#sampled ⇒ Boolean? (readonly)
Sampling result of the span.
81 82 83 |
# File 'lib/sentry/span.rb', line 81 def sampled @sampled end |
#span_id ⇒ String (readonly)
An uuid that can be used to identify the span.
75 76 77 |
# File 'lib/sentry/span.rb', line 75 def span_id @span_id end |
#span_recorder ⇒ SpanRecorder
The SpanRecorder the current span belongs to. SpanRecorder holds all spans under the same Transaction object (including the Transaction itself).
110 111 112 |
# File 'lib/sentry/span.rb', line 110 def span_recorder @span_recorder end |
#start_timestamp ⇒ Float (readonly)
Starting timestamp of the span.
84 85 86 |
# File 'lib/sentry/span.rb', line 84 def @start_timestamp end |
#status ⇒ String (readonly)
Span status
96 97 98 |
# File 'lib/sentry/span.rb', line 96 def status @status end |
#tags ⇒ Hash (readonly)
Span tags
99 100 101 |
# File 'lib/sentry/span.rb', line 99 def @tags end |
#timestamp ⇒ Float (readonly)
Finishing timestamp of the span.
87 88 89 |
# File 'lib/sentry/span.rb', line 87 def @timestamp end |
#trace_id ⇒ String (readonly)
An uuid that can be used to identify a trace.
72 73 74 |
# File 'lib/sentry/span.rb', line 72 def trace_id @trace_id end |
#transaction ⇒ Transaction (readonly)
The Transaction object the Span belongs to. Every span needs to be attached to a Transaction and their child spans will also inherit the same transaction.
115 116 117 |
# File 'lib/sentry/span.rb', line 115 def transaction @transaction end |
Instance Method Details
#deep_dup ⇒ Object
246 247 248 |
# File 'lib/sentry/span.rb', line 246 def deep_dup dup end |
#finish(end_timestamp: nil) ⇒ self
Finishes the span by adding a timestamp.
147 148 149 150 |
# File 'lib/sentry/span.rb', line 147 def finish(end_timestamp: nil) @timestamp = || @timestamp || Sentry.utc_now.to_f self end |
#get_dynamic_sampling_context ⇒ Hash?
Returns the Dynamic Sampling Context from the transaction baggage.
170 171 172 |
# File 'lib/sentry/span.rb', line 170 def get_dynamic_sampling_context transaction.get_baggage&.dynamic_sampling_context end |
#get_trace_context ⇒ Hash
Returns the span’s context that can be used to embed in an Event.
198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/sentry/span.rb', line 198 def get_trace_context { trace_id: @trace_id, span_id: @span_id, parent_span_id: @parent_span_id, description: @description, op: @op, status: @status, origin: @origin, data: @data } end |
#metrics_local_aggregator ⇒ Object
Collects gauge metrics on the span for metric summaries.
311 312 313 |
# File 'lib/sentry/span.rb', line 311 def metrics_local_aggregator @metrics_local_aggregator ||= Sentry::Metrics::LocalAggregator.new end |
#metrics_summary ⇒ Object
315 316 317 |
# File 'lib/sentry/span.rb', line 315 def metrics_summary @metrics_local_aggregator&.to_hash end |
#set_data(key, value) ⇒ Object
Inserts a key-value pair to the span’s data payload.
293 294 295 |
# File 'lib/sentry/span.rb', line 293 def set_data(key, value) @data[key] = value end |
#set_description(description) ⇒ Object
Sets the span’s description.
258 259 260 |
# File 'lib/sentry/span.rb', line 258 def set_description(description) @description = description end |
#set_http_status(status_code) ⇒ Object
Sets the span’s status with given http status code.
277 278 279 280 281 282 283 284 285 286 287 288 |
# File 'lib/sentry/span.rb', line 277 def set_http_status(status_code) status_code = status_code.to_i set_data(DataConventions::HTTP_STATUS_CODE, status_code) status = if status_code >= 200 && status_code < 299 "ok" else STATUS_MAP[status_code] end set_status(status) end |
#set_op(op) ⇒ Object
Sets the span’s operation.
252 253 254 |
# File 'lib/sentry/span.rb', line 252 def set_op(op) @op = op end |
#set_origin(origin) ⇒ Object
Sets the origin of the span.
306 307 308 |
# File 'lib/sentry/span.rb', line 306 def set_origin(origin) @origin = origin end |
#set_status(status) ⇒ Object
Sets the span’s status.
265 266 267 |
# File 'lib/sentry/span.rb', line 265 def set_status(status) @status = status end |
#set_tag(key, value) ⇒ Object
Sets a tag to the span.
300 301 302 |
# File 'lib/sentry/span.rb', line 300 def set_tag(key, value) @tags[key] = value end |
#set_timestamp(timestamp) ⇒ Object
Sets the span’s finish timestamp.
271 272 273 |
# File 'lib/sentry/span.rb', line 271 def () @timestamp = end |
#start_child(**attributes) ⇒ Object
Starts a child span with given attributes.
213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/sentry/span.rb', line 213 def start_child(**attributes) attributes = attributes.dup.merge(transaction: @transaction, trace_id: @trace_id, parent_span_id: @span_id, sampled: @sampled) new_span = Span.new(**attributes) new_span.span_recorder = span_recorder if span_recorder span_recorder.add(new_span) end new_span end |
#to_baggage ⇒ String?
Generates a W3C Baggage header string for distributed tracing from the incoming baggage stored on the transaction.
164 165 166 |
# File 'lib/sentry/span.rb', line 164 def to_baggage transaction.get_baggage&.serialize end |
#to_hash ⇒ Hash
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/sentry/span.rb', line 175 def to_hash hash = { trace_id: @trace_id, span_id: @span_id, parent_span_id: @parent_span_id, start_timestamp: @start_timestamp, timestamp: @timestamp, description: @description, op: @op, status: @status, tags: @tags, data: @data, origin: @origin } summary = metrics_summary hash[:_metrics_summary] = summary if summary hash end |
#to_sentry_trace ⇒ String
Generates a trace string that can be used to connect other transactions.
154 155 156 157 158 159 |
# File 'lib/sentry/span.rb', line 154 def to_sentry_trace sampled_flag = "" sampled_flag = @sampled ? 1 : 0 unless @sampled.nil? "#{@trace_id}-#{@span_id}-#{sampled_flag}" end |
#with_child_span(**attributes, &block) {|child_span| ... } ⇒ Object
Starts a child span, yield it to the given block, and then finish the span after the block is executed.
234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/sentry/span.rb', line 234 def with_child_span(**attributes, &block) child_span = start_child(**attributes) yield(child_span) child_span.finish rescue child_span.set_http_status(500) child_span.finish raise end |