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
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 |