Class: Sentry::Scope
- Inherits:
- 
      Object
      
        - Object
- Sentry::Scope
 
- Includes:
- ArgumentCheckingHelper
- Defined in:
- lib/sentry/scope.rb
Constant Summary collapse
- ATTRIBUTES =
- [ :transaction_name, :transaction_source, :contexts, :extra, :tags, :user, :level, :breadcrumbs, :fingerprint, :event_processors, :rack_env, :span, :session, :attachments, :propagation_context ] 
Class Method Summary collapse
- 
  
    
      .add_global_event_processor(&block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Adds a new global event processor [Proc]. 
- 
  
    
      .global_event_processors  ⇒ Array<Proc> 
    
    
  
  
  
  
  
  
  
  
  
    Returns the global event processors array. 
- .os_context ⇒ Hash
- .runtime_context ⇒ Hash
Instance Method Summary collapse
- 
  
    
      #add_attachment(**opts)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Add a new attachment to the scope. 
- 
  
    
      #add_breadcrumb(breadcrumb)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Adds the breadcrumb to the scope’s breadcrumbs buffer. 
- 
  
    
      #add_event_processor(&block)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Adds a new event processor [Proc] to the scope. 
- 
  
    
      #apply_to_event(event, hint = nil)  ⇒ Event 
    
    
  
  
  
  
  
  
  
  
  
    Applies stored attributes and event processors to the given event. 
- 
  
    
      #clear  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Resets the scope’s attributes to defaults. 
- 
  
    
      #clear_breadcrumbs  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Clears the scope’s breadcrumbs buffer. 
- #dup ⇒ Scope
- 
  
    
      #generate_propagation_context(env = nil)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Generate a new propagation context either from the incoming env headers or from scratch. 
- 
  
    
      #get_span  ⇒ Span? 
    
    
  
  
  
  
  
  
  
  
  
    Returns the associated Span object. 
- 
  
    
      #get_transaction  ⇒ Transaction? 
    
    
  
  
  
  
  
  
  
  
  
    Returns the associated Transaction object. 
- 
  
    
      #initialize(max_breadcrumbs: nil)  ⇒ Scope 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Scope. 
- 
  
    
      #set_context(key, value)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Adds a new key-value pair to current contexts. 
- 
  
    
      #set_contexts(contexts_hash)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Updates the scope’s contexts attribute by merging with the old value. 
- 
  
    
      #set_extra(key, value)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Adds a new key-value pair to current extras. 
- 
  
    
      #set_extras(extras_hash)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Updates the scope’s extras attribute by merging with the old value. 
- 
  
    
      #set_fingerprint(fingerprint)  ⇒ Array 
    
    
  
  
  
  
  
  
  
  
  
    Sets the scope’s fingerprint attribute. 
- 
  
    
      #set_level(level)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Sets the scope’s level attribute. 
- 
  
    
      #set_rack_env(env)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Sets the scope’s rack_env attribute. 
- 
  
    
      #set_session(session)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Sets the currently active session on the scope. 
- 
  
    
      #set_span(span)  ⇒ Span 
    
    
  
  
  
  
  
  
  
  
  
    Sets the scope’s span attribute. 
- 
  
    
      #set_tag(key, value)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Adds a new key-value pair to current tags. 
- 
  
    
      #set_tags(tags_hash)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Updates the scope’s tags attribute by merging with the old value. 
- 
  
    
      #set_transaction_name(transaction_name, source: :custom)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Appends a new transaction name to the scope. 
- 
  
    
      #set_user(user_hash)  ⇒ Hash 
    
    
  
  
  
  
  
  
  
  
  
    Sets the scope’s user attribute. 
- 
  
    
      #transaction_source_low_quality?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    These are high cardinality and thus bad. 
- 
  
    
      #update_from_options(contexts: nil, extra: nil, tags: nil, user: nil, level: nil, fingerprint: nil, attachments: nil, **options)  ⇒ Array 
    
    
  
  
  
  
  
  
  
  
  
    Updates the scope’s data from the given options. 
- 
  
    
      #update_from_scope(scope)  ⇒ void 
    
    
  
  
  
  
  
  
  
  
  
    Updates the scope’s data from a given scope. 
Constructor Details
#initialize(max_breadcrumbs: nil) ⇒ Scope
Returns a new instance of Scope.
| 33 34 35 36 | # File 'lib/sentry/scope.rb', line 33 def initialize(max_breadcrumbs: nil) @max_breadcrumbs = set_default_value end | 
Class Method Details
.add_global_event_processor(&block) ⇒ void
This method returns an undefined value.
Adds a new global event processor [Proc]. Sometimes we need a global event processor without needing to configure scope. These run before scope event processors.
| 365 366 367 | # File 'lib/sentry/scope.rb', line 365 def add_global_event_processor(&block) global_event_processors << block end | 
.global_event_processors ⇒ Array<Proc>
Returns the global event processors array.
| 355 356 357 | # File 'lib/sentry/scope.rb', line 355 def global_event_processors @global_event_processors ||= [] end | 
.os_context ⇒ Hash
| 331 332 333 334 335 336 337 338 339 340 341 342 343 | # File 'lib/sentry/scope.rb', line 331 def os_context @os_context ||= begin uname = Etc.uname { name: uname[:sysname] || RbConfig::CONFIG["host_os"], version: uname[:version], build: uname[:release], kernel_version: uname[:version], machine: uname[:machine] } end end | 
.runtime_context ⇒ Hash
| 346 347 348 349 350 351 | # File 'lib/sentry/scope.rb', line 346 def runtime_context @runtime_context ||= { name: RbConfig::CONFIG["ruby_install_name"], version: RUBY_DESCRIPTION || Sentry.sys_command("ruby -v") } end | 
Instance Method Details
#add_attachment(**opts) ⇒ Object
Add a new attachment to the scope.
| 295 296 297 298 | # File 'lib/sentry/scope.rb', line 295 def (**opts) << ( = Attachment.new(**opts)) end | 
#add_breadcrumb(breadcrumb) ⇒ void
This method returns an undefined value.
Adds the breadcrumb to the scope’s breadcrumbs buffer.
| 85 86 87 | # File 'lib/sentry/scope.rb', line 85 def () .record() end | 
#add_event_processor(&block) ⇒ void
This method returns an undefined value.
Adds a new event processor [Proc] to the scope.
| 283 284 285 | # File 'lib/sentry/scope.rb', line 283 def add_event_processor(&block) @event_processors << block end | 
#apply_to_event(event, hint = nil) ⇒ Event
Applies stored attributes and event processors to the given event.
| 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | # File 'lib/sentry/scope.rb', line 48 def apply_to_event(event, hint = nil) unless event.is_a?(CheckInEvent) event. = .merge(event.) event.user = user.merge(event.user) event.extra = extra.merge(event.extra) event.contexts = contexts.merge(event.contexts) event.transaction = transaction_name if transaction_name event.transaction_info = { source: transaction_source } if transaction_source event.fingerprint = fingerprint event.level = level event. = event.rack_env = rack_env if rack_env event. = end if span event.contexts[:trace] ||= span.get_trace_context event.dynamic_sampling_context ||= span.get_dynamic_sampling_context else event.contexts[:trace] ||= propagation_context.get_trace_context event.dynamic_sampling_context ||= propagation_context.get_dynamic_sampling_context end all_event_processors = self.class.global_event_processors + @event_processors unless all_event_processors.empty? all_event_processors.each do |processor_block| event = processor_block.call(event, hint) end end event end | 
#clear ⇒ void
This method returns an undefined value.
Resets the scope’s attributes to defaults.
| 40 41 42 | # File 'lib/sentry/scope.rb', line 40 def clear set_default_value end | 
#clear_breadcrumbs ⇒ void
This method returns an undefined value.
Clears the scope’s breadcrumbs buffer
| 91 92 93 | # File 'lib/sentry/scope.rb', line 91 def end | 
#dup ⇒ Scope
| 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | # File 'lib/sentry/scope.rb', line 96 def dup copy = super copy. = .dup copy.contexts = contexts.deep_dup copy.extra = extra.deep_dup copy. = .deep_dup copy.user = user.deep_dup copy.transaction_name = transaction_name.dup copy.transaction_source = transaction_source.dup copy.fingerprint = fingerprint.deep_dup copy.span = span.deep_dup copy.session = session.deep_dup copy.propagation_context = propagation_context.deep_dup copy. = .dup copy end | 
#generate_propagation_context(env = nil) ⇒ void
This method returns an undefined value.
Generate a new propagation context either from the incoming env headers or from scratch.
| 290 291 292 | # File 'lib/sentry/scope.rb', line 290 def generate_propagation_context(env = nil) @propagation_context = PropagationContext.new(self, env) end | 
#get_span ⇒ Span?
Returns the associated Span object.
| 267 268 269 | # File 'lib/sentry/scope.rb', line 267 def get_span span end | 
#get_transaction ⇒ Transaction?
Returns the associated Transaction object.
| 261 262 263 | # File 'lib/sentry/scope.rb', line 261 def get_transaction span.transaction if span end | 
#set_context(key, value) ⇒ Hash
Adds a new key-value pair to current contexts.
| 225 226 227 228 | # File 'lib/sentry/scope.rb', line 225 def set_context(key, value) check_argument_type!(value, Hash) set_contexts(key => value) end | 
#set_contexts(contexts_hash) ⇒ Hash
Updates the scope’s contexts attribute by merging with the old value.
| 213 214 215 216 217 218 219 220 221 222 | # File 'lib/sentry/scope.rb', line 213 def set_contexts(contexts_hash) check_argument_type!(contexts_hash, Hash) contexts_hash.values.each do |val| check_argument_type!(val, Hash) end @contexts.merge!(contexts_hash) do |key, old, new| old.merge(new) end end | 
#set_extra(key, value) ⇒ Hash
Adds a new key-value pair to current extras.
| 192 193 194 | # File 'lib/sentry/scope.rb', line 192 def set_extra(key, value) set_extras(key => value) end | 
#set_extras(extras_hash) ⇒ Hash
Updates the scope’s extras attribute by merging with the old value.
| 183 184 185 186 | # File 'lib/sentry/scope.rb', line 183 def set_extras(extras_hash) check_argument_type!(extras_hash, Hash) @extra.merge!(extras_hash) end | 
#set_fingerprint(fingerprint) ⇒ Array
Sets the scope’s fingerprint attribute.
| 274 275 276 277 278 | # File 'lib/sentry/scope.rb', line 274 def set_fingerprint(fingerprint) check_argument_type!(fingerprint, Array) @fingerprint = fingerprint end | 
#set_level(level) ⇒ void
This method returns an undefined value.
Sets the scope’s level attribute.
| 233 234 235 | # File 'lib/sentry/scope.rb', line 233 def set_level(level) @level = level end | 
#set_rack_env(env) ⇒ Hash
Sets the scope’s rack_env attribute.
| 163 164 165 166 | # File 'lib/sentry/scope.rb', line 163 def set_rack_env(env) env = env || {} @rack_env = env end | 
#set_session(session) ⇒ void
This method returns an undefined value.
Sets the currently active session on the scope.
| 249 250 251 | # File 'lib/sentry/scope.rb', line 249 def set_session(session) @session = session end | 
#set_span(span) ⇒ Span
Sets the scope’s span attribute.
| 171 172 173 174 | # File 'lib/sentry/scope.rb', line 171 def set_span(span) check_argument_type!(span, Span) @span = span end | 
#set_tag(key, value) ⇒ Hash
Adds a new key-value pair to current tags.
| 206 207 208 | # File 'lib/sentry/scope.rb', line 206 def set_tag(key, value) (key => value) end | 
#set_tags(tags_hash) ⇒ Hash
Updates the scope’s tags attribute by merging with the old value.
| 197 198 199 200 | # File 'lib/sentry/scope.rb', line 197 def () check_argument_type!(, Hash) @tags.merge!() end | 
#set_transaction_name(transaction_name, source: :custom) ⇒ void
This method returns an undefined value.
Appends a new transaction name to the scope. The “transaction” here does not refer to ‘Transaction` objects.
| 241 242 243 244 | # File 'lib/sentry/scope.rb', line 241 def set_transaction_name(transaction_name, source: :custom) @transaction_name = transaction_name @transaction_source = source end | 
#set_user(user_hash) ⇒ Hash
Sets the scope’s user attribute.
| 177 178 179 180 | # File 'lib/sentry/scope.rb', line 177 def set_user(user_hash) check_argument_type!(user_hash, Hash) @user = user_hash end | 
#transaction_source_low_quality? ⇒ Boolean
These are high cardinality and thus bad.
| 255 256 257 | # File 'lib/sentry/scope.rb', line 255 def transaction_source_low_quality? transaction_source == :url end | 
#update_from_options(contexts: nil, extra: nil, tags: nil, user: nil, level: nil, fingerprint: nil, attachments: nil, **options) ⇒ Array
Updates the scope’s data from the given options.
| 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | # File 'lib/sentry/scope.rb', line 139 def ( contexts: nil, extra: nil, tags: nil, user: nil, level: nil, fingerprint: nil, attachments: nil, ** ) self.contexts.merge!(contexts) if contexts self.extra.merge!(extra) if extra self..merge!() if self.user = user if user self.level = level if level self.fingerprint = fingerprint if fingerprint # Returns unsupported option keys so we can notify users. .keys end | 
#update_from_scope(scope) ⇒ void
This method returns an undefined value.
Updates the scope’s data from a given scope.
| 116 117 118 119 120 121 122 123 124 125 126 127 128 | # File 'lib/sentry/scope.rb', line 116 def update_from_scope(scope) self. = scope. self.contexts = scope.contexts self.extra = scope.extra self. = scope. self.user = scope.user self.transaction_name = scope.transaction_name self.transaction_source = scope.transaction_source self.fingerprint = scope.fingerprint self.span = scope.span self.propagation_context = scope.propagation_context self. = scope. end |