class OpenTelemetry::Context

Manages context on a per-fiber basis

Constants

EMPTY_ENTRIES
KEY
ROOT

Public Class Methods

clear() click to toggle source
# File lib/opentelemetry/context.rb, line 91
def clear
  self.current = ROOT
end
create_key(name) click to toggle source

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
current() click to toggle source

Returns current context, which is never nil

@return [Context]

# File lib/opentelemetry/context.rb, line 28
def current
  Thread.current[KEY] ||= ROOT
end
current=(ctx) click to toggle source

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
empty() click to toggle source
# File lib/opentelemetry/context.rb, line 95
def empty
  new(nil, EMPTY_ENTRIES)
end
new(parent, entries) click to toggle source
# File lib/opentelemetry/context.rb, line 100
def initialize(parent, entries)
  @parent = parent
  @entries = entries.freeze
end
value(key) click to toggle source

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
with_current(ctx) { |ctx| ... } click to toggle source

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
with_value(key, value) { |ctx, value| ... } click to toggle source

@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
with_values(values) { |ctx, values| ... } click to toggle source

@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

[](key)
Alias for: value
attach() click to toggle source

@api private

# File lib/opentelemetry/context.rb, line 138
def attach
  prev = self.class.current
  self.class.current = self
  prev
end
detach(ctx_to_attach = nil) click to toggle source

@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
set_value(key, value) click to toggle source

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
set_values(values) click to toggle source

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
value(key) click to toggle source

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
Also aliased as: []