class OpenTelemetry::Context
Manages context on a per-fiber basis
Constants
- EMPTY_ENTRIES
- KEY
- ROOT
Public Class Methods
# File lib/opentelemetry/context.rb, line 91 def clear self.current = ROOT end
Returns a key used to index a value in a Context
@param [String] name The key name @return [Context::Key]
# File lib/opentelemetry/context.rb, line 21 def create_key(name) Key.new(name) end
Returns current context, which is never nil
@return [Context]
# File lib/opentelemetry/context.rb, line 28 def current Thread.current[KEY] ||= ROOT end
Sets the current context
@param [Context] ctx The context to be made active
# File lib/opentelemetry/context.rb, line 35 def current=(ctx) Thread.current[KEY] = ctx end
# File lib/opentelemetry/context.rb, line 95 def empty new(nil, EMPTY_ENTRIES) end
# File lib/opentelemetry/context.rb, line 100 def initialize(parent, entries) @parent = parent @entries = entries.freeze end
Returns the value associated with key in the current context
@param [String] key The lookup key
# File lib/opentelemetry/context.rb, line 87 def value(key) current.value(key) end
Executes a block with ctx as the current context. It restores the previous context upon exiting.
@param [Context] ctx The context to be made active @yield [context] Yields context to the block
# File lib/opentelemetry/context.rb, line 44 def with_current(ctx) prev = ctx.attach yield ctx ensure ctx.detach(prev) end
@param [String] key The lookup key @param [Object] value The object stored under key @param [Callable] Block to execute in a new context @yield [context, value] Yields the newly created context and value to
the block
# File lib/opentelemetry/context.rb, line 59 def with_value(key, value) ctx = current.set_value(key, value) prev = ctx.attach yield ctx, value ensure ctx.detach(prev) end
@param [String] key The lookup key @param [Hash] values Will be merged with values of the current context
and returned in a new context
@param [Callable] Block to execute in a new context @yield [context, values] Yields the newly created context and values
to the block
# File lib/opentelemetry/context.rb, line 76 def with_values(values) ctx = current.set_values(values) prev = ctx.attach yield ctx, values ensure ctx.detach(prev) end
Public Instance Methods
@api private
# File lib/opentelemetry/context.rb, line 138 def attach prev = self.class.current self.class.current = self prev end
@api private
# File lib/opentelemetry/context.rb, line 145 def detach(ctx_to_attach = nil) OpenTelemetry.logger.warn 'Calls to detach should match corresponding calls to attach' if self.class.current != self ctx_to_attach ||= @parent || ROOT ctx_to_attach.attach end
Returns a new Context
where entries contains the newly added key and value
@param [Key] key The key to store this value under @param [Object] value Object to be stored under key @return [Context]
# File lib/opentelemetry/context.rb, line 120 def set_value(key, value) new_entries = @entries.dup new_entries[key] = value Context.new(self, new_entries) end
Returns a new Context
with the current context's entries merged with the
new entries
@param [Hash] values The values to be merged with the current context's
entries.
@param [Object] value Object to be stored under key @return [Context]
# File lib/opentelemetry/context.rb, line 133 def set_values(values) # rubocop:disable Naming/AccessorMethodName: Context.new(self, @entries.merge(values)) end
Returns the corresponding value (or nil) for key
@param [Key] key The lookup key @return [Object]
# File lib/opentelemetry/context.rb, line 109 def value(key) @entries[key] end